diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2013-12-22 00:04:03 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2013-12-22 00:04:03 +0000 |
commit | f8af5cf600354830d4ccf59732403f0f073eccb9 (patch) | |
tree | 2ba0398b4c42ad4f55561327538044fd2c925a8b /cmake | |
parent | 59d6cff90eecf31cb3dd860c4e786674cfdd42eb (diff) | |
download | src-f8af5cf600354830d4ccf59732403f0f073eccb9.tar.gz src-f8af5cf600354830d4ccf59732403f0f073eccb9.zip |
Notes
Diffstat (limited to 'cmake')
-rwxr-xr-x | cmake/config-ix.cmake | 125 | ||||
-rwxr-xr-x | cmake/modules/AddLLVM.cmake | 81 | ||||
-rw-r--r-- | cmake/modules/CMakeLists.txt | 32 | ||||
-rw-r--r-- | cmake/modules/ChooseMSVCCRT.cmake | 2 | ||||
-rw-r--r-- | cmake/modules/HandleLLVMOptions.cmake | 61 | ||||
-rwxr-xr-x | cmake/modules/LLVM-Config.cmake | 7 | ||||
-rw-r--r-- | cmake/modules/LLVMConfig.cmake.in | 4 | ||||
-rw-r--r-- | cmake/modules/TableGen.cmake | 19 | ||||
-rw-r--r-- | cmake/nsis_logo.bmp | bin | 0 -> 30776 bytes | |||
-rw-r--r-- | cmake/platforms/Android.cmake | 11 |
10 files changed, 247 insertions, 95 deletions
diff --git a/cmake/config-ix.cmake b/cmake/config-ix.cmake index 7f8c48d3aaaa..dc991a23be07 100755 --- a/cmake/config-ix.cmake +++ b/cmake/config-ix.cmake @@ -35,37 +35,24 @@ function(check_type_exists type files variable) endfunction() # include checks -check_include_file(argz.h HAVE_ARGZ_H) -check_include_file(assert.h HAVE_ASSERT_H) -check_include_file(ctype.h HAVE_CTYPE_H) check_include_file_cxx(cxxabi.h HAVE_CXXABI_H) check_include_file(dirent.h HAVE_DIRENT_H) -check_include_file(dl.h HAVE_DL_H) -check_include_file(dld.h HAVE_DLD_H) check_include_file(dlfcn.h HAVE_DLFCN_H) check_include_file(errno.h HAVE_ERRNO_H) check_include_file(execinfo.h HAVE_EXECINFO_H) check_include_file(fcntl.h HAVE_FCNTL_H) check_include_file(inttypes.h HAVE_INTTYPES_H) check_include_file(limits.h HAVE_LIMITS_H) -check_include_file(link.h HAVE_LINK_H) check_include_file(malloc.h HAVE_MALLOC_H) check_include_file(malloc/malloc.h HAVE_MALLOC_MALLOC_H) -check_include_file(memory.h HAVE_MEMORY_H) check_include_file(ndir.h HAVE_NDIR_H) if( NOT PURE_WINDOWS ) check_include_file(pthread.h HAVE_PTHREAD_H) endif() check_include_file(sanitizer/msan_interface.h HAVE_SANITIZER_MSAN_INTERFACE_H) -check_include_file(setjmp.h HAVE_SETJMP_H) check_include_file(signal.h HAVE_SIGNAL_H) check_include_file(stdint.h HAVE_STDINT_H) -check_include_file(stdio.h HAVE_STDIO_H) -check_include_file(stdlib.h HAVE_STDLIB_H) -check_include_file(string.h HAVE_STRING_H) -check_include_file(strings.h HAVE_STRINGS_H) check_include_file(sys/dir.h HAVE_SYS_DIR_H) -check_include_file(sys/dl.h HAVE_SYS_DL_H) check_include_file(sys/ioctl.h HAVE_SYS_IOCTL_H) check_include_file(sys/mman.h HAVE_SYS_MMAN_H) check_include_file(sys/ndir.h HAVE_SYS_NDIR_H) @@ -73,14 +60,12 @@ check_include_file(sys/param.h HAVE_SYS_PARAM_H) check_include_file(sys/resource.h HAVE_SYS_RESOURCE_H) check_include_file(sys/stat.h HAVE_SYS_STAT_H) check_include_file(sys/time.h HAVE_SYS_TIME_H) -check_include_file(sys/types.h HAVE_SYS_TYPES_H) check_include_file(sys/uio.h HAVE_SYS_UIO_H) check_include_file(sys/wait.h HAVE_SYS_WAIT_H) check_include_file(termios.h HAVE_TERMIOS_H) check_include_file(unistd.h HAVE_UNISTD_H) check_include_file(utime.h HAVE_UTIME_H) check_include_file(valgrind/valgrind.h HAVE_VALGRIND_VALGRIND_H) -check_include_file(windows.h HAVE_WINDOWS_H) check_include_file(zlib.h HAVE_ZLIB_H) check_include_file(fenv.h HAVE_FENV_H) check_symbol_exists(FE_ALL_EXCEPT "fenv.h" HAVE_DECL_FE_ALL_EXCEPT) @@ -112,6 +97,20 @@ if( NOT PURE_WINDOWS ) else() set(HAVE_LIBZ 0) endif() + if(LLVM_ENABLE_TERMINFO) + set(HAVE_TERMINFO 0) + foreach(library tinfo terminfo curses ncurses ncursesw) + string(TOUPPER ${library} library_suffix) + check_library_exists(${library} setupterm "" HAVE_TERMINFO_${library_suffix}) + if(HAVE_TERMINFO_${library_suffix}) + set(HAVE_TERMINFO 1) + set(TERMINFO_LIBS "${library}") + break() + endif() + endforeach() + else() + set(HAVE_TERMINFO 0) + endif() endif() # function checks @@ -121,7 +120,6 @@ check_symbol_exists(getpagesize unistd.h HAVE_GETPAGESIZE) check_symbol_exists(getrusage sys/resource.h HAVE_GETRUSAGE) check_symbol_exists(setrlimit sys/resource.h HAVE_SETRLIMIT) check_symbol_exists(isatty unistd.h HAVE_ISATTY) -check_symbol_exists(index strings.h HAVE_INDEX) check_symbol_exists(isinf cmath HAVE_ISINF_IN_CMATH) check_symbol_exists(isinf math.h HAVE_ISINF_IN_MATH_H) check_symbol_exists(finite ieeefp.h HAVE_FINITE_IN_IEEEFP_H) @@ -136,6 +134,8 @@ check_symbol_exists(log10 math.h HAVE_LOG10) check_symbol_exists(exp math.h HAVE_EXP) check_symbol_exists(exp2 math.h HAVE_EXP2) check_symbol_exists(exp10 math.h HAVE_EXP10) +check_symbol_exists(futimens sys/stat.h HAVE_FUTIMENS) +check_symbol_exists(futimes sys/time.h HAVE_FUTIMES) if( HAVE_SETJMP_H ) check_symbol_exists(longjmp setjmp.h HAVE_LONGJMP) check_symbol_exists(setjmp setjmp.h HAVE_SETJMP) @@ -160,11 +160,7 @@ check_symbol_exists(gettimeofday sys/time.h HAVE_GETTIMEOFDAY) check_symbol_exists(getrlimit "sys/types.h;sys/time.h;sys/resource.h" HAVE_GETRLIMIT) check_symbol_exists(posix_spawn spawn.h HAVE_POSIX_SPAWN) check_symbol_exists(pread unistd.h HAVE_PREAD) -check_symbol_exists(rindex strings.h HAVE_RINDEX) -check_symbol_exists(strchr string.h HAVE_STRCHR) -check_symbol_exists(strcmp string.h HAVE_STRCMP) -check_symbol_exists(strdup string.h HAVE_STRDUP) -check_symbol_exists(strrchr string.h HAVE_STRRCHR) +check_symbol_exists(realpath stdlib.h HAVE_REALPATH) check_symbol_exists(sbrk unistd.h HAVE_SBRK) check_symbol_exists(srand48 stdlib.h HAVE_RAND48_SRAND48) if( HAVE_RAND48_SRAND48 ) @@ -181,8 +177,6 @@ check_symbol_exists(strtoq stdlib.h HAVE_STRTOQ) check_symbol_exists(strerror string.h HAVE_STRERROR) check_symbol_exists(strerror_r string.h HAVE_STRERROR_R) check_symbol_exists(strerror_s string.h HAVE_DECL_STRERROR_S) -check_symbol_exists(memcpy string.h HAVE_MEMCPY) -check_symbol_exists(memmove string.h HAVE_MEMMOVE) check_symbol_exists(setenv stdlib.h HAVE_SETENV) if( PURE_WINDOWS ) check_symbol_exists(_chsize_s io.h HAVE__CHSIZE_S) @@ -206,13 +200,6 @@ if( PURE_WINDOWS ) check_function_exists(__main HAVE___MAIN) check_function_exists(__cmpdi2 HAVE___CMPDI2) endif() -if( HAVE_ARGZ_H ) - check_symbol_exists(argz_append argz.h HAVE_ARGZ_APPEND) - check_symbol_exists(argz_create_sep argz.h HAVE_ARGZ_CREATE_SEP) - check_symbol_exists(argz_insert argz.h HAVE_ARGZ_INSERT) - check_symbol_exists(argz_next argz.h HAVE_ARGZ_NEXT) - check_symbol_exists(argz_stringify argz.h HAVE_ARGZ_STRINGIFY) -endif() if( HAVE_DLFCN_H ) if( HAVE_LIBDL ) list(APPEND CMAKE_REQUIRED_LIBRARIES dl) @@ -229,10 +216,7 @@ if( LLVM_USING_GLIBC ) add_llvm_definitions( -D_GNU_SOURCE ) endif() -set(headers "") -if (HAVE_SYS_TYPES_H) - set(headers ${headers} "sys/types.h") -endif() +set(headers "sys/types.h") if (HAVE_INTTYPES_H) set(headers ${headers} "inttypes.h") @@ -245,13 +229,13 @@ endif() check_type_exists(int64_t "${headers}" HAVE_INT64_T) check_type_exists(uint64_t "${headers}" HAVE_UINT64_T) check_type_exists(u_int64_t "${headers}" HAVE_U_INT64_T) -check_type_exists(error_t errno.h HAVE_ERROR_T) # available programs checks function(llvm_find_program name) string(TOUPPER ${name} NAME) string(REGEX REPLACE "\\." "_" NAME ${NAME}) - find_program(LLVM_PATH_${NAME} ${name}) + + find_program(LLVM_PATH_${NAME} NAMES ${ARGV}) mark_as_advanced(LLVM_PATH_${NAME}) if(LLVM_PATH_${NAME}) set(HAVE_${NAME} 1 CACHE INTERNAL "Is ${name} available ?") @@ -268,7 +252,7 @@ llvm_find_program(neato) llvm_find_program(fdp) llvm_find_program(dot) llvm_find_program(dotty) -llvm_find_program(xdot.py) +llvm_find_program(xdot xdot.py) llvm_find_program(Graphviz) if( LLVM_ENABLE_FFI ) @@ -316,6 +300,20 @@ endif() find_package(LibXml2) if (LIBXML2_FOUND) set(CLANG_HAVE_LIBXML 1) + # When cross-compiling, liblzma is not detected as a dependency for libxml2, + # which makes linking c-index-test fail. But for native builds, all libraries + # are installed and checked by CMake before Makefiles are generated and everything + # works according to the plan. However, if a -llzma is added to native builds, + # an additional requirement on the static liblzma.a is required, but will not + # be checked by CMake, breaking native compilation. + # Since this is only pertinent to cross-compilations, and there's no way CMake + # can check for every foreign library on every OS, we add the dep and warn the dev. + if ( CMAKE_CROSSCOMPILING ) + if (NOT PC_LIBXML_VERSION VERSION_LESS "2.8.0") + message(STATUS "Adding LZMA as a dep to XML2 for cross-compilation, make sure liblzma.a is available.") + set(LIBXML2_LIBRARIES ${LIBXML2_LIBRARIES} "-llzma") + endif () + endif () endif () include(CheckCXXCompilerFlag) @@ -384,6 +382,14 @@ else () message(FATAL_ERROR "Unknown architecture ${LLVM_NATIVE_ARCH}") endif () +# If build targets includes "host", then replace with native architecture. +list(FIND LLVM_TARGETS_TO_BUILD "host" idx) +if( NOT idx LESS 0 ) + list(REMOVE_AT LLVM_TARGETS_TO_BUILD ${idx}) + list(APPEND LLVM_TARGETS_TO_BUILD ${LLVM_NATIVE_ARCH}) + list(REMOVE_DUPLICATES LLVM_TARGETS_TO_BUILD) +endif() + list(FIND LLVM_TARGETS_TO_BUILD ${LLVM_NATIVE_ARCH} NATIVE_ARCH_IDX) if (NATIVE_ARCH_IDX EQUAL -1) message(STATUS @@ -409,27 +415,26 @@ endif () if( MINGW ) set(HAVE_LIBIMAGEHLP 1) set(HAVE_LIBPSAPI 1) + set(HAVE_LIBSHELL32 1) # TODO: Check existence of libraries. # include(CheckLibraryExists) # CHECK_LIBRARY_EXISTS(imagehlp ??? . HAVE_LIBIMAGEHLP) endif( MINGW ) +if (NOT HAVE_STRTOLL) + # Use _strtoi64 if strtoll is not available. + check_symbol_exists(_strtoi64 stdlib.h have_strtoi64) + if (have_strtoi64) + set(HAVE_STRTOLL 1) + set(strtoll "_strtoi64") + set(strtoull "_strtoui64") + endif () +endif () + if( MSVC ) - set(error_t int) - set(LTDL_SHLIBPATH_VAR "PATH") - set(LTDL_SYSSEARCHPATH "") - set(LTDL_DLOPEN_DEPLIBS 1) set(SHLIBEXT ".lib") - set(LTDL_OBJDIR "_libs") - set(HAVE_STRTOLL 1) - set(strtoll "_strtoi64") - set(strtoull "_strtoui64") set(stricmp "_stricmp") set(strdup "_strdup") -else( MSVC ) - set(LTDL_SHLIBPATH_VAR "LD_LIBRARY_PATH") - set(LTDL_SYSSEARCHPATH "") # TODO - set(LTDL_DLOPEN_DEPLIBS 0) # TODO endif( MSVC ) if( PURE_WINDOWS ) @@ -471,3 +476,25 @@ if (LLVM_ENABLE_ZLIB ) endif() set(LLVM_PREFIX ${CMAKE_INSTALL_PREFIX}) + +if (LLVM_ENABLE_DOXYGEN) + message(STATUS "Doxygen enabled.") + find_package(Doxygen) + + if (DOXYGEN_FOUND) + # If we find doxygen and we want to enable doxygen by default create a + # global aggregate doxygen target for generating llvm and any/all + # subprojects doxygen documentation. + if (LLVM_BUILD_DOCS) + add_custom_target(doxygen ALL) + endif() + + option(LLVM_DOXYGEN_EXTERNAL_SEARCH "Enable doxygen external search." OFF) + if (LLVM_DOXYGEN_EXTERNAL_SEARCH) + set(LLVM_DOXYGEN_SEARCHENGINE_URL "" CACHE STRING "URL to use for external searhc.") + set(LLVM_DOXYGEN_SEARCH_MAPPINGS "" CACHE STRING "Doxygen Search Mappings") + endif() + endif() +else() + message(STATUS "Doxygen disabled.") +endif() diff --git a/cmake/modules/AddLLVM.cmake b/cmake/modules/AddLLVM.cmake index f0b31ce65385..34e40172c96a 100755 --- a/cmake/modules/AddLLVM.cmake +++ b/cmake/modules/AddLLVM.cmake @@ -12,6 +12,11 @@ macro(add_llvm_library name) if( BUILD_SHARED_LIBS ) llvm_config( ${name} ${LLVM_LINK_COMPONENTS} ) + if (MSVC) + set_target_properties(${name} + PROPERTIES + IMPORT_SUFFIX ".imp") + endif () endif() # Ensure that the system libraries always comes last on the @@ -21,9 +26,11 @@ macro(add_llvm_library name) if( EXCLUDE_FROM_ALL ) set_target_properties( ${name} PROPERTIES EXCLUDE_FROM_ALL ON) else() - install(TARGETS ${name} - LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX} - ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}) + if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ${name} STREQUAL "LTO") + install(TARGETS ${name} + LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX} + ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}) + endif() endif() set_target_properties(${name} PROPERTIES FOLDER "Libraries") @@ -65,9 +72,11 @@ ${name} ignored.") if( EXCLUDE_FROM_ALL ) set_target_properties( ${name} PROPERTIES EXCLUDE_FROM_ALL ON) else() - install(TARGETS ${name} - LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX} - ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}) + if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) + install(TARGETS ${name} + LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX} + ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}) + endif() endif() endif() @@ -91,14 +100,23 @@ macro(add_llvm_executable name) endmacro(add_llvm_executable name) +set (LLVM_TOOLCHAIN_TOOLS + llvm-ar + llvm-objdump + ) + macro(add_llvm_tool name) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${LLVM_TOOLS_BINARY_DIR}) if( NOT LLVM_BUILD_TOOLS ) set(EXCLUDE_FROM_ALL ON) endif() add_llvm_executable(${name} ${ARGN}) - if( LLVM_BUILD_TOOLS ) - install(TARGETS ${name} RUNTIME DESTINATION bin) + + list(FIND LLVM_TOOLCHAIN_TOOLS ${name} LLVM_IS_${name}_TOOLCHAIN_TOOL) + if (LLVM_IS_${name}_TOOLCHAIN_TOOL GREATER -1 OR NOT LLVM_INSTALL_TOOLCHAIN_ONLY) + if( LLVM_BUILD_TOOLS ) + install(TARGETS ${name} RUNTIME DESTINATION bin) + endif() endif() set_target_properties(${name} PROPERTIES FOLDER "Tools") endmacro(add_llvm_tool name) @@ -141,6 +159,7 @@ macro(add_llvm_external_project name) if("${add_llvm_external_dir}" STREQUAL "") set(add_llvm_external_dir ${name}) endif() + list(APPEND LLVM_IMPLICIT_PROJECT_IGNORE "${CMAKE_CURRENT_SOURCE_DIR}/${add_llvm_external_dir}") string(REPLACE "-" "_" nameUNDERSCORE ${name}) string(TOUPPER ${nameUNDERSCORE} nameUPPER) set(LLVM_EXTERNAL_${nameUPPER}_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${add_llvm_external_dir}" @@ -155,6 +174,34 @@ macro(add_llvm_external_project name) endif() endmacro(add_llvm_external_project) +macro(add_llvm_tool_subdirectory name) + list(APPEND LLVM_IMPLICIT_PROJECT_IGNORE "${CMAKE_CURRENT_SOURCE_DIR}/${name}") + add_subdirectory(${name}) +endmacro(add_llvm_tool_subdirectory) + +macro(ignore_llvm_tool_subdirectory name) + list(APPEND LLVM_IMPLICIT_PROJECT_IGNORE "${CMAKE_CURRENT_SOURCE_DIR}/${name}") +endmacro(ignore_llvm_tool_subdirectory) + +function(add_llvm_implicit_external_projects) + set(list_of_implicit_subdirs "") + file(GLOB sub-dirs "${CMAKE_CURRENT_SOURCE_DIR}/*") + foreach(dir ${sub-dirs}) + if(IS_DIRECTORY "${dir}") + list(FIND LLVM_IMPLICIT_PROJECT_IGNORE "${dir}" tool_subdir_ignore) + if( tool_subdir_ignore EQUAL -1 + AND EXISTS "${dir}/CMakeLists.txt") + get_filename_component(fn "${dir}" NAME) + list(APPEND list_of_implicit_subdirs "${fn}") + endif() + endif() + endforeach() + + foreach(external_proj ${list_of_implicit_subdirs}) + add_llvm_external_project("${external_proj}") + endforeach() +endfunction(add_llvm_implicit_external_projects) + # Generic support for adding a unittest. function(add_unittest test_suite test_name) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) @@ -191,7 +238,7 @@ function(add_unittest test_suite test_name) if (LLVM_COMPILER_IS_GCC_COMPATIBLE) set(target_compile_flags "${target_compile_flags} -fno-rtti") elseif (MSVC) - set(target_compile_flags "${target_compile_flags} /GR-") + llvm_replace_compiler_option(target_compile_flags "/GR" "/GR-") endif () if (SUPPORTS_NO_VARIADIC_MACROS_FLAG) @@ -249,6 +296,22 @@ function(configure_lit_site_cfg input output) set(HOST_OS ${CMAKE_SYSTEM_NAME}) set(HOST_ARCH ${CMAKE_SYSTEM_PROCESSOR}) + if (CLANG_ENABLE_ARCMT) + set(ENABLE_CLANG_ARCMT "1") + else() + set(ENABLE_CLANG_ARCMT "0") + endif() + if (CLANG_ENABLE_REWRITER) + set(ENABLE_CLANG_REWRITER "1") + else() + set(ENABLE_CLANG_REWRITER "0") + endif() + if (CLANG_ENABLE_STATIC_ANALYZER) + set(ENABLE_CLANG_STATIC_ANALYZER "1") + else() + set(ENABLE_CLANG_STATIC_ANALYZER "0") + endif() + configure_file(${input} ${output} @ONLY) endfunction() diff --git a/cmake/modules/CMakeLists.txt b/cmake/modules/CMakeLists.txt index f51e9af8db0d..0253952caee8 100644 --- a/cmake/modules/CMakeLists.txt +++ b/cmake/modules/CMakeLists.txt @@ -19,19 +19,21 @@ configure_file( ${llvm_cmake_builddir}/LLVMConfigVersion.cmake @ONLY) -install(FILES - ${llvm_cmake_builddir}/LLVMConfig.cmake - ${llvm_cmake_builddir}/LLVMConfigVersion.cmake - LLVM-Config.cmake - DESTINATION share/llvm/cmake) +if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) + install(FILES + ${llvm_cmake_builddir}/LLVMConfig.cmake + ${llvm_cmake_builddir}/LLVMConfigVersion.cmake + LLVM-Config.cmake + DESTINATION share/llvm/cmake) -install(DIRECTORY . - DESTINATION share/llvm/cmake - FILES_MATCHING PATTERN *.cmake - PATTERN .svn EXCLUDE - PATTERN LLVMConfig.cmake EXCLUDE - PATTERN LLVMConfigVersion.cmake EXCLUDE - PATTERN LLVM-Config.cmake EXCLUDE - PATTERN GetHostTriple.cmake EXCLUDE - PATTERN VersionFromVCS.cmake EXCLUDE - PATTERN CheckAtomic.cmake EXCLUDE) + install(DIRECTORY . + DESTINATION share/llvm/cmake + FILES_MATCHING PATTERN *.cmake + PATTERN .svn EXCLUDE + PATTERN LLVMConfig.cmake EXCLUDE + PATTERN LLVMConfigVersion.cmake EXCLUDE + PATTERN LLVM-Config.cmake EXCLUDE + PATTERN GetHostTriple.cmake EXCLUDE + PATTERN VersionFromVCS.cmake EXCLUDE + PATTERN CheckAtomic.cmake EXCLUDE) +endif() diff --git a/cmake/modules/ChooseMSVCCRT.cmake b/cmake/modules/ChooseMSVCCRT.cmake index 6a2f426b2694..25ed9c71f1ab 100644 --- a/cmake/modules/ChooseMSVCCRT.cmake +++ b/cmake/modules/ChooseMSVCCRT.cmake @@ -71,7 +71,7 @@ variables (LLVM_USE_CRT_DEBUG, etc) instead.") CACHE STRING "Specify VC++ CRT to use for ${build_type} configurations." FORCE) set_property(CACHE LLVM_USE_CRT_${build} - PROPERTY STRINGS "";${${MSVC_CRT}}) + PROPERTY STRINGS ;${${MSVC_CRT}}) endif(NOT LLVM_USE_CRT_${build}) endforeach(build_type) diff --git a/cmake/modules/HandleLLVMOptions.cmake b/cmake/modules/HandleLLVMOptions.cmake index f8a017dcaef2..bb41a58df2dd 100644 --- a/cmake/modules/HandleLLVMOptions.cmake +++ b/cmake/modules/HandleLLVMOptions.cmake @@ -8,6 +8,8 @@ include(CheckCXXCompilerFlag) if( CMAKE_COMPILER_IS_GNUCXX ) set(LLVM_COMPILER_IS_GCC_COMPATIBLE ON) +elseif( MSVC ) + set(LLVM_COMPILER_IS_GCC_COMPATIBLE OFF) elseif( "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" ) set(LLVM_COMPILER_IS_GCC_COMPATIBLE ON) endif() @@ -17,13 +19,18 @@ if( LLVM_ENABLE_ASSERTIONS ) if( NOT MSVC ) add_definitions( -D_DEBUG ) endif() - # On Release builds cmake automatically defines NDEBUG, so we + # On non-Debug builds cmake automatically defines NDEBUG, so we # explicitly undefine it: - if( uppercase_CMAKE_BUILD_TYPE STREQUAL "RELEASE" ) + if( NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" ) add_definitions( -UNDEBUG ) # Also remove /D NDEBUG to avoid MSVC warnings about conflicting defines. - string (REGEX REPLACE "(^| )[/-]D *NDEBUG($| )" " " - CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}") + set(REGEXP_NDEBUG "(^| )[/-]D *NDEBUG($| )")
+ string (REGEX REPLACE "${REGEXP_NDEBUG}" " "
+ CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
+ string (REGEX REPLACE "${REGEXP_NDEBUG}" " "
+ CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
+ string (REGEX REPLACE "${REGEXP_NDEBUG}" " "
+ CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL}")
endif() else() if( NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "RELEASE" ) @@ -151,10 +158,25 @@ endif() if( MSVC ) include(ChooseMSVCCRT) - if( MSVC11 ) - add_llvm_definitions(-D_VARIADIC_MAX=10) + if( NOT (${CMAKE_VERSION} VERSION_LESS 2.8.11) ) + # set stack reserved size to ~10MB + # CMake previously automatically set this value for MSVC builds, but the + # behavior was changed in CMake 2.8.11 (Issue 12437) to use the MSVC default + # value (1 MB) which is not enough for us in tasks such as parsing recursive + # C++ templates in Clang. + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:10000000") endif() + if( MSVC10 ) + # MSVC 10 will complain about headers in the STL not being exported, but + # will not complain in MSVC 11. + add_llvm_definitions( + -wd4275 # Suppress 'An exported class was derived from a class that was not exported.' + ) + elseif( MSVC11 ) + add_llvm_definitions(-D_VARIADIC_MAX=10) + endif() + # Add definitions that make MSVC much less annoying. add_llvm_definitions( # For some reason MS wants to deprecate a bunch of standard functions... @@ -166,25 +188,18 @@ if( MSVC ) -D_SCL_SECURE_NO_WARNINGS # Disabled warnings. - -wd4065 # Suppress 'switch statement contains 'default' but no 'case' labels' -wd4146 # Suppress 'unary minus operator applied to unsigned type, result still unsigned' -wd4180 # Suppress 'qualifier applied to function type has no meaning; ignored' - -wd4181 # Suppress 'qualifier applied to reference type; ignored' - -wd4224 # Suppress 'nonstandard extension used : formal parameter 'identifier' was previously defined as a type' -wd4244 # Suppress ''argument' : conversion from 'type1' to 'type2', possible loss of data' -wd4267 # Suppress ''var' : conversion from 'size_t' to 'type', possible loss of data' - -wd4275 # Suppress 'An exported class was derived from a class that was not exported.' - -wd4291 # Suppress ''declaration' : no matching operator delete found; memory will not be freed if initialization throws an exception' -wd4345 # Suppress 'behavior change: an object of POD type constructed with an initializer of the form () will be default-initialized' -wd4351 # Suppress 'new behavior: elements of array 'array' will be default initialized' -wd4355 # Suppress ''this' : used in base member initializer list' -wd4503 # Suppress ''identifier' : decorated name length exceeded, name was truncated' - -wd4551 # Suppress 'function call missing argument list' -wd4624 # Suppress ''derived class' : destructor could not be generated because a base class destructor is inaccessible' - -wd4715 # Suppress ''function' : not all control paths return a value' - -wd4722 # Suppress ''function' : destructor never returns, potential memory leak' -wd4800 # Suppress ''type' : forcing value to bool 'true' or 'false' (performance warning)' - + -wd4291 # Suppress ''declaration' : no matching operator delete found; memory will not be freed if initialization throws an exception' + # Promoted warnings. -w14062 # Promote 'enumerator in switch of enum is not handled' to level 1 warning. @@ -241,6 +256,10 @@ macro(append_common_sanitizer_flags) NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "RELWITHDEBINFO") add_flag_if_supported("-gline-tables-only") endif() + # Use -O1 even in debug mode, otherwise sanitizers slowdown is too large. + if (uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG") + add_flag_if_supported("-O1") + endif() endmacro() # Turn on sanitizers if necessary. @@ -263,6 +282,18 @@ if(LLVM_USE_SANITIZER) endif() endif() +# Turn on -gsplit-dwarf if requested +if(LLVM_USE_SPLIT_DWARF) + add_llvm_definitions("-gsplit-dwarf") +endif() + add_llvm_definitions( -D__STDC_CONSTANT_MACROS ) add_llvm_definitions( -D__STDC_FORMAT_MACROS ) add_llvm_definitions( -D__STDC_LIMIT_MACROS ) + +# clang doesn't print colored diagnostics when invoked from Ninja +if (UNIX AND + CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND + CMAKE_GENERATOR STREQUAL "Ninja") + append("-fcolor-diagnostics" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) +endif() diff --git a/cmake/modules/LLVM-Config.cmake b/cmake/modules/LLVM-Config.cmake index 2ddc0b2bf89a..e26fabd1c6f7 100755 --- a/cmake/modules/LLVM-Config.cmake +++ b/cmake/modules/LLVM-Config.cmake @@ -2,7 +2,7 @@ function(get_system_libs return_var) # Returns in `return_var' a list of system libraries used by LLVM. if( NOT MSVC ) if( MINGW ) - set(system_libs ${system_libs} imagehlp psapi) + set(system_libs ${system_libs} imagehlp psapi shell32) elseif( CMAKE_HOST_UNIX ) if( HAVE_LIBRT ) set(system_libs ${system_libs} rt) @@ -10,6 +10,11 @@ function(get_system_libs return_var) if( HAVE_LIBDL ) set(system_libs ${system_libs} ${CMAKE_DL_LIBS}) endif() + if(LLVM_ENABLE_TERMINFO) + if(HAVE_TERMINFO) + set(system_libs ${system_libs} ${TERMINFO_LIBS}) + endif() + endif() if( LLVM_ENABLE_THREADS AND HAVE_LIBPTHREAD ) set(system_libs ${system_libs} pthread) endif() diff --git a/cmake/modules/LLVMConfig.cmake.in b/cmake/modules/LLVMConfig.cmake.in index f0b8c14ec34d..68fe296924c5 100644 --- a/cmake/modules/LLVMConfig.cmake.in +++ b/cmake/modules/LLVMConfig.cmake.in @@ -20,6 +20,8 @@ set(TARGET_TRIPLE "@TARGET_TRIPLE@") set(LLVM_TOOLS_BINARY_DIR @LLVM_TOOLS_BINARY_DIR@) +set(LLVM_ENABLE_TERMINFO @LLVM_ENABLE_TERMINFO@) + set(LLVM_ENABLE_THREADS @LLVM_ENABLE_THREADS@) set(LLVM_ENABLE_ZLIB @LLVM_ENABLE_ZLIB@) @@ -28,6 +30,8 @@ set(LLVM_NATIVE_ARCH @LLVM_NATIVE_ARCH@) set(LLVM_ENABLE_PIC @LLVM_ENABLE_PIC@) +set(HAVE_TERMINFO @HAVE_TERMINFO@) +set(TERMINFO_LIBS @TERMINFO_LIBS@) set(HAVE_LIBDL @HAVE_LIBDL@) set(HAVE_LIBPTHREAD @HAVE_LIBPTHREAD@) set(HAVE_LIBZ @HAVE_LIBZ@) diff --git a/cmake/modules/TableGen.cmake b/cmake/modules/TableGen.cmake index e3bdd9c70483..c17e67e478ef 100644 --- a/cmake/modules/TableGen.cmake +++ b/cmake/modules/TableGen.cmake @@ -66,7 +66,8 @@ if(CMAKE_CROSSCOMPILING) add_custom_command(OUTPUT ${CX_NATIVE_TG_DIR}/CMakeCache.txt COMMAND ${CMAKE_COMMAND} -UMAKE_TOOLCHAIN_FILE -DCMAKE_BUILD_TYPE=Release - -DLLVM_BUILD_POLLY=OFF ${CMAKE_SOURCE_DIR} + -DLLVM_BUILD_POLLY=OFF + -G "${CMAKE_GENERATOR}" ${CMAKE_SOURCE_DIR} WORKING_DIRECTORY ${CX_NATIVE_TG_DIR} DEPENDS ${CX_NATIVE_TG_DIR} COMMENT "Configuring native TableGen...") @@ -84,6 +85,16 @@ macro(add_tablegen target project) add_llvm_utility(${target} ${ARGN}) set(LLVM_LINK_COMPONENTS ${${target}_OLD_LLVM_LINK_COMPONENTS}) + # For Xcode builds, symlink bin/<target> to bin/<Config>/<target> so that + # a separately-configured Clang project can still find llvm-tblgen. + if (XCODE) + add_custom_target(${target}-top ALL + ${CMAKE_COMMAND} -E create_symlink + ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/${target}${CMAKE_EXECUTABLE_SUFFIX} + ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${target}${CMAKE_EXECUTABLE_SUFFIX} + DEPENDS ${target}) + endif () + set(${project}_TABLEGEN "${target}" CACHE STRING "Native TableGen executable. Saves building one when cross-compiling.") @@ -117,7 +128,7 @@ macro(add_tablegen target project) endif() if( MINGW ) - target_link_libraries(${target} imagehlp psapi) + target_link_libraries(${target} imagehlp psapi shell32) if(CMAKE_SIZEOF_VOID_P MATCHES "8") set_target_properties(${target} PROPERTIES LINK_FLAGS -Wl,--stack,16777216) endif(CMAKE_SIZEOF_VOID_P MATCHES "8") @@ -126,5 +137,7 @@ macro(add_tablegen target project) target_link_libraries(${target} pthread) endif() - install(TARGETS ${target} RUNTIME DESTINATION bin) + if (${project} STREQUAL LLVM AND NOT LLVM_INSTALL_TOOLCHAIN_ONLY) + install(TARGETS ${target} RUNTIME DESTINATION bin) + endif() endmacro() diff --git a/cmake/nsis_logo.bmp b/cmake/nsis_logo.bmp Binary files differnew file mode 100644 index 000000000000..5fcb3cec1985 --- /dev/null +++ b/cmake/nsis_logo.bmp diff --git a/cmake/platforms/Android.cmake b/cmake/platforms/Android.cmake index 72849b16c767..35df5ebd132f 100644 --- a/cmake/platforms/Android.cmake +++ b/cmake/platforms/Android.cmake @@ -11,8 +11,15 @@ # make <target> SET(CMAKE_SYSTEM_NAME Linux) -SET(CMAKE_C_COMPILER ${CMAKE_BINARY_DIR}/../bin/clang) -SET(CMAKE_CXX_COMPILER ${CMAKE_BINARY_DIR}/../bin/clang++) + +IF(NOT CMAKE_C_COMPILER) + SET(CMAKE_C_COMPILER ${CMAKE_BINARY_DIR}/../bin/clang) +ENDIF() + +IF(NOT CMAKE_CXX_COMPILER) + SET(CMAKE_CXX_COMPILER ${CMAKE_BINARY_DIR}/../bin/clang++) +ENDIF() + SET(ANDROID "1" CACHE STRING "ANDROID" FORCE) SET(ANDROID_COMMON_FLAGS "-target arm-linux-androideabi --sysroot=${LLVM_ANDROID_TOOLCHAIN_DIR}/sysroot -B${LLVM_ANDROID_TOOLCHAIN_DIR} -mllvm -arm-enable-ehabi") |