1include(AddLLVMDefinitions) 2 3if( CMAKE_COMPILER_IS_GNUCXX ) 4 set(LLVM_COMPILER_IS_GCC_COMPATIBLE ON) 5elseif( "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" ) 6 set(LLVM_COMPILER_IS_GCC_COMPATIBLE ON) 7endif() 8 9# Run-time build mode; It is used for unittests. 10if(MSVC_IDE) 11 # Expect "$(Configuration)", "$(OutDir)", etc. 12 # It is expanded by msbuild or similar. 13 set(RUNTIME_BUILD_MODE "${CMAKE_CFG_INTDIR}") 14elseif(NOT CMAKE_BUILD_TYPE STREQUAL "") 15 # Expect "Release" "Debug", etc. 16 # Or unittests could not run. 17 set(RUNTIME_BUILD_MODE ${CMAKE_BUILD_TYPE}) 18else() 19 # It might be "." 20 set(RUNTIME_BUILD_MODE "${CMAKE_CFG_INTDIR}") 21endif() 22 23set(LIT_ARGS_DEFAULT "-sv") 24if (MSVC OR XCODE) 25 set(LIT_ARGS_DEFAULT "${LIT_ARGS_DEFAULT} --no-progress-bar") 26endif() 27set(LLVM_LIT_ARGS "${LIT_ARGS_DEFAULT}" 28 CACHE STRING "Default options for lit") 29 30if( LLVM_ENABLE_ASSERTIONS ) 31 # MSVC doesn't like _DEBUG on release builds. See PR 4379. 32 if( NOT MSVC ) 33 add_definitions( -D_DEBUG ) 34 endif() 35 # On Release builds cmake automatically defines NDEBUG, so we 36 # explicitly undefine it: 37 if( uppercase_CMAKE_BUILD_TYPE STREQUAL "RELEASE" ) 38 add_definitions( -UNDEBUG ) 39 endif() 40else() 41 if( NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "RELEASE" ) 42 if( NOT MSVC_IDE AND NOT XCODE ) 43 add_definitions( -DNDEBUG ) 44 endif() 45 endif() 46endif() 47 48if(WIN32) 49 if(CYGWIN) 50 set(LLVM_ON_WIN32 0) 51 set(LLVM_ON_UNIX 1) 52 else(CYGWIN) 53 set(LLVM_ON_WIN32 1) 54 set(LLVM_ON_UNIX 0) 55 56 # This is effective only on Win32 hosts to use gnuwin32 tools. 57 set(LLVM_LIT_TOOLS_DIR "" CACHE PATH "Path to GnuWin32 tools") 58 endif(CYGWIN) 59 set(LTDL_SHLIB_EXT ".dll") 60 set(EXEEXT ".exe") 61 # Maximum path length is 160 for non-unicode paths 62 set(MAXPATHLEN 160) 63else(WIN32) 64 if(UNIX) 65 set(LLVM_ON_WIN32 0) 66 set(LLVM_ON_UNIX 1) 67 if(APPLE) 68 set(LTDL_SHLIB_EXT ".dylib") 69 else(APPLE) 70 set(LTDL_SHLIB_EXT ".so") 71 endif(APPLE) 72 set(EXEEXT "") 73 # FIXME: Maximum path length is currently set to 'safe' fixed value 74 set(MAXPATHLEN 2024) 75 else(UNIX) 76 MESSAGE(SEND_ERROR "Unable to determine platform") 77 endif(UNIX) 78endif(WIN32) 79 80if( LLVM_ENABLE_PIC ) 81 if( XCODE ) 82 # Xcode has -mdynamic-no-pic on by default, which overrides -fPIC. I don't 83 # know how to disable this, so just force ENABLE_PIC off for now. 84 message(WARNING "-fPIC not supported with Xcode.") 85 elseif( WIN32 ) 86 # On Windows all code is PIC. MinGW warns if -fPIC is used. 87 else() 88 include(CheckCXXCompilerFlag) 89 check_cxx_compiler_flag("-fPIC" SUPPORTS_FPIC_FLAG) 90 if( SUPPORTS_FPIC_FLAG ) 91 message(STATUS "Building with -fPIC") 92 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") 93 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") 94 else( SUPPORTS_FPIC_FLAG ) 95 message(WARNING "-fPIC not supported.") 96 endif() 97 endif() 98endif() 99 100if( CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT WIN32 ) 101 # TODO: support other platforms and toolchains. 102 option(LLVM_BUILD_32_BITS "Build 32 bits executables and libraries." OFF) 103 if( LLVM_BUILD_32_BITS ) 104 message(STATUS "Building 32 bits executables and libraries.") 105 add_llvm_definitions( -m32 ) 106 list(APPEND CMAKE_EXE_LINKER_FLAGS -m32) 107 list(APPEND CMAKE_SHARED_LINKER_FLAGS -m32) 108 endif( LLVM_BUILD_32_BITS ) 109endif( CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT WIN32 ) 110 111if( MSVC_IDE AND ( MSVC90 OR MSVC10 ) ) 112 # Only Visual Studio 2008 and 2010 officially supports /MP. 113 # Visual Studio 2005 do support it but it's experimental there. 114 set(LLVM_COMPILER_JOBS "0" CACHE STRING 115 "Number of parallel compiler jobs. 0 means use all processors. Default is 0.") 116 if( NOT LLVM_COMPILER_JOBS STREQUAL "1" ) 117 if( LLVM_COMPILER_JOBS STREQUAL "0" ) 118 add_llvm_definitions( /MP ) 119 else() 120 if (MSVC10) 121 message(FATAL_ERROR 122 "Due to a bug in CMake only 0 and 1 is supported for " 123 "LLVM_COMPILER_JOBS when generating for Visual Studio 2010") 124 else() 125 message(STATUS "Number of parallel compiler jobs set to " ${LLVM_COMPILER_JOBS}) 126 add_llvm_definitions( /MP${LLVM_COMPILER_JOBS} ) 127 endif() 128 endif() 129 else() 130 message(STATUS "Parallel compilation disabled") 131 endif() 132endif() 133 134if( MSVC ) 135 include(ChooseMSVCCRT) 136 137 # Add definitions that make MSVC much less annoying. 138 add_llvm_definitions( 139 # For some reason MS wants to deprecate a bunch of standard functions... 140 -D_CRT_SECURE_NO_DEPRECATE 141 -D_CRT_SECURE_NO_WARNINGS 142 -D_CRT_NONSTDC_NO_DEPRECATE 143 -D_CRT_NONSTDC_NO_WARNINGS 144 -D_SCL_SECURE_NO_DEPRECATE 145 -D_SCL_SECURE_NO_WARNINGS 146 147 -wd4146 # Suppress 'unary minus operator applied to unsigned type, result still unsigned' 148 -wd4180 # Suppress 'qualifier applied to function type has no meaning; ignored' 149 -wd4224 # Suppress 'nonstandard extension used : formal parameter 'identifier' was previously defined as a type' 150 -wd4244 # Suppress ''argument' : conversion from 'type1' to 'type2', possible loss of data' 151 -wd4267 # Suppress ''var' : conversion from 'size_t' to 'type', possible loss of data' 152 -wd4275 # Suppress 'An exported class was derived from a class that was not exported.' 153 -wd4291 # Suppress ''declaration' : no matching operator delete found; memory will not be freed if initialization throws an exception' 154 -wd4345 # Suppress 'behavior change: an object of POD type constructed with an initializer of the form () will be default-initialized' 155 -wd4351 # Suppress 'new behavior: elements of array 'array' will be default initialized' 156 -wd4355 # Suppress ''this' : used in base member initializer list' 157 -wd4503 # Suppress ''identifier' : decorated name length exceeded, name was truncated' 158 -wd4551 # Suppress 'function call missing argument list' 159 -wd4624 # Suppress ''derived class' : destructor could not be generated because a base class destructor is inaccessible' 160 -wd4715 # Suppress ''function' : not all control paths return a value' 161 -wd4800 # Suppress ''type' : forcing value to bool 'true' or 'false' (performance warning)' 162 -wd4065 # Suppress 'switch statement contains 'default' but no 'case' labels' 163 -wd4181 # Suppress 'qualifier applied to reference type; ignored' 164 -w14062 # Promote "enumerator in switch of enum is not handled" to level 1 warning. 165 ) 166 167 # Enable warnings 168 if (LLVM_ENABLE_WARNINGS) 169 add_llvm_definitions( /W4 /Wall ) 170 if (LLVM_ENABLE_PEDANTIC) 171 # No MSVC equivalent available 172 endif (LLVM_ENABLE_PEDANTIC) 173 endif (LLVM_ENABLE_WARNINGS) 174 if (LLVM_ENABLE_WERROR) 175 add_llvm_definitions( /WX ) 176 endif (LLVM_ENABLE_WERROR) 177elseif( LLVM_COMPILER_IS_GCC_COMPATIBLE ) 178 if (LLVM_ENABLE_WARNINGS) 179 add_llvm_definitions( -Wall -W -Wno-unused-parameter -Wwrite-strings ) 180 if (LLVM_ENABLE_PEDANTIC) 181 add_llvm_definitions( -pedantic -Wno-long-long ) 182 endif (LLVM_ENABLE_PEDANTIC) 183 endif (LLVM_ENABLE_WARNINGS) 184 if (LLVM_ENABLE_WERROR) 185 add_llvm_definitions( -Werror ) 186 endif (LLVM_ENABLE_WERROR) 187endif( MSVC ) 188 189add_llvm_definitions( -D__STDC_CONSTANT_MACROS ) 190add_llvm_definitions( -D__STDC_FORMAT_MACROS ) 191add_llvm_definitions( -D__STDC_LIMIT_MACROS ) 192 193option(LLVM_INCLUDE_TESTS "Generate build targets for the LLVM unit tests." ON) 194