diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2017-12-18 20:10:56 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2017-12-18 20:10:56 +0000 |
commit | 044eb2f6afba375a914ac9d8024f8f5142bb912e (patch) | |
tree | 1475247dc9f9fe5be155ebd4c9069c75aadf8c20 /CMakeLists.txt | |
parent | eb70dddbd77e120e5d490bd8fbe7ff3f8fa81c6b (diff) | |
download | src-044eb2f6afba375a914ac9d8024f8f5142bb912e.tar.gz src-044eb2f6afba375a914ac9d8024f8f5142bb912e.zip |
Notes
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 129 |
1 files changed, 68 insertions, 61 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 960febf60074..c100adef258c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,41 +2,32 @@ cmake_minimum_required(VERSION 3.4.3) -if(POLICY CMP0022) - cmake_policy(SET CMP0022 NEW) # automatic when 2.8.12 is required -endif() +cmake_policy(SET CMP0022 NEW) -if (POLICY CMP0051) - # CMake 3.1 and higher include generator expressions of the form - # $<TARGETLIB:obj> in the SOURCES property. These need to be - # stripped everywhere that access the SOURCES property, so we just - # defer to the OLD behavior of not including generator expressions - # in the output for now. - cmake_policy(SET CMP0051 OLD) -endif() +cmake_policy(SET CMP0048 NEW) -if(POLICY CMP0057) - cmake_policy(SET CMP0057 NEW) -endif() +# CMake 3.1 and higher include generator expressions of the form +# $<TARGETLIB:obj> in the SOURCES property. These need to be +# stripped everywhere that access the SOURCES property, so we just +# defer to the OLD behavior of not including generator expressions +# in the output for now. +cmake_policy(SET CMP0051 OLD) + +cmake_policy(SET CMP0056 NEW) + +cmake_policy(SET CMP0057 NEW) if(NOT DEFINED LLVM_VERSION_MAJOR) - set(LLVM_VERSION_MAJOR 5) + set(LLVM_VERSION_MAJOR 6) endif() if(NOT DEFINED LLVM_VERSION_MINOR) set(LLVM_VERSION_MINOR 0) endif() if(NOT DEFINED LLVM_VERSION_PATCH) - set(LLVM_VERSION_PATCH 1) + set(LLVM_VERSION_PATCH 0) endif() if(NOT DEFINED LLVM_VERSION_SUFFIX) - set(LLVM_VERSION_SUFFIX "") -endif() - -if (POLICY CMP0048) - cmake_policy(SET CMP0048 NEW) - set(cmake_3_0_PROJ_VERSION - VERSION ${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}) - set(cmake_3_0_LANGUAGES LANGUAGES) + set(LLVM_VERSION_SUFFIX svn) endif() if (NOT PACKAGE_VERSION) @@ -52,9 +43,8 @@ if ((CMAKE_GENERATOR MATCHES "Visual Studio") AND (CMAKE_GENERATOR_TOOLSET STREQ endif() project(LLVM - ${cmake_3_0_PROJ_VERSION} - ${cmake_3_0_LANGUAGES} - C CXX ASM) + VERSION ${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH} + LANGUAGES C CXX ASM) if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) message(STATUS "No build type selected, default to Debug") @@ -120,7 +110,7 @@ endif() # LLVM_EXTERNAL_${project}_SOURCE_DIR using LLVM_ALL_PROJECTS # This allows an easy way of setting up a build directory for llvm and another # one for llvm+clang+... using the same sources. -set(LLVM_ALL_PROJECTS "clang;libcxx;libcxxabi;lldb;compiler-rt;lld;polly") +set(LLVM_ALL_PROJECTS "clang;libcxx;libcxxabi;lldb;compiler-rt;lld;polly;debuginfo-tests") set(LLVM_ENABLE_PROJECTS "" CACHE STRING "Semicolon-separated list of projects to build (${LLVM_ALL_PROJECTS}), or \"all\".") if( LLVM_ENABLE_PROJECTS STREQUAL "all" ) @@ -176,12 +166,11 @@ if(LLVM_DEPENDENCY_DEBUGGING) endif() endif() -option(LLVM_BUILD_GLOBAL_ISEL "Experimental: Build GlobalISel" ON) -if(LLVM_BUILD_GLOBAL_ISEL) - add_definitions(-DLLVM_BUILD_GLOBAL_ISEL) -endif() - option(LLVM_ENABLE_DAGISEL_COV "Debug: Prints tablegen patterns that were used for selecting" OFF) +option(LLVM_ENABLE_GISEL_COV "Enable collection of GlobalISel rule coverage" OFF) +if(LLVM_ENABLE_GISEL_COV) + set(LLVM_GISEL_COV_PREFIX "${CMAKE_BINARY_DIR}/gisel-coverage-" CACHE STRING "Provide a filename prefix to collect the GlobalISel rule coverage") +endif() # Add path for custom modules set(CMAKE_MODULE_PATH @@ -194,6 +183,9 @@ set(CMAKE_MODULE_PATH # for use by clang_complete, YouCompleteMe, etc. set(CMAKE_EXPORT_COMPILE_COMMANDS 1) +option(LLVM_INSTALL_BINUTILS_SYMLINKS + "Install symlinks from the binutils tool names to the corresponding LLVM tools." OFF) + option(LLVM_INSTALL_UTILS "Include utility binaries in the 'install' target." OFF) option(LLVM_INSTALL_TOOLCHAIN_ONLY "Only include toolchain files in the 'install' target." OFF) @@ -242,11 +234,11 @@ endif() include(CPack) # Sanity check our source directory to make sure that we are not trying to -# generate an in-tree build (unless on MSVC_IDE, where it is ok), and to make +# generate an in-source build (unless on MSVC_IDE, where it is ok), and to make # sure that we don't have any stray generated files lying around in the tree # (which would end up getting picked up by header search, instead of the correct # versions). -if( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR AND NOT MSVC_IDE ) +if( CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR AND NOT MSVC_IDE ) message(FATAL_ERROR "In-source builds are not allowed. CMake would overwrite the makefiles distributed with LLVM. Please create a directory and run cmake from there, passing the path @@ -359,6 +351,8 @@ set(LLVM_TARGET_ARCH "host" option(LLVM_ENABLE_TERMINFO "Use terminfo database if available." ON) +set(LLVM_ENABLE_LIBXML2 "ON" CACHE STRING "Use libxml2 if available. Can be ON, OFF, or FORCE_ON") + option(LLVM_ENABLE_LIBEDIT "Use libedit if available." ON) option(LLVM_ENABLE_THREADS "Use threads if available." ON) @@ -391,6 +385,8 @@ option(LLVM_ENABLE_LLD "Use lld as C and C++ linker." OFF) option(LLVM_ENABLE_PEDANTIC "Compile with pedantic enabled." ON) option(LLVM_ENABLE_WERROR "Fail and stop if a warning is triggered." OFF) +option(LLVM_ENABLE_DUMP "Enable dump functions even when assertions are disabled" OFF) + if( NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" ) option(LLVM_ENABLE_ASSERTIONS "Enable assertions" OFF) else() @@ -432,6 +428,8 @@ endif( LLVM_USE_OPROFILE ) set(LLVM_USE_SANITIZER "" CACHE STRING "Define the sanitizer used to build binaries and tests.") +set(LLVM_LIB_FUZZING_ENGINE "" CACHE PATH + "Path to fuzzing library for linking with fuzz targets") option(LLVM_USE_SPLIT_DWARF "Use -gsplit-dwarf when compiling llvm." OFF) @@ -551,7 +549,8 @@ else() set(LLVM_ADD_NATIVE_VISUALIZERS_TO_SOLUTION FALSE CACHE INTERNAL "For Visual Studio 2013, manually copy natvis files to Documents\\Visual Studio 2013\\Visualizers" FORCE) endif() -if (LLVM_BUILD_INSTRUMENTED OR LLVM_BUILD_INSTRUMENTED_COVERAGE) +if (LLVM_BUILD_INSTRUMENTED OR LLVM_BUILD_INSTRUMENTED_COVERAGE OR + LLVM_ENABLE_IR_PGO) if(NOT LLVM_PROFILE_MERGE_POOL_SIZE) # A pool size of 1-2 is probably sufficient on a SSD. 3-4 should be fine # for spining disks. Anything higher may only help on slower mediums. @@ -559,10 +558,9 @@ if (LLVM_BUILD_INSTRUMENTED OR LLVM_BUILD_INSTRUMENTED_COVERAGE) endif() if(NOT LLVM_PROFILE_FILE_PATTERN) if(NOT LLVM_PROFILE_DATA_DIR) - file(TO_NATIVE_PATH "${LLVM_BINARY_DIR}/profiles/%${LLVM_PROFILE_MERGE_POOL_SIZE}m.profraw" LLVM_PROFILE_FILE_PATTERN) - else() - file(TO_NATIVE_PATH "${LLVM_PROFILE_DATA_DIR}/%${LLVM_PROFILE_MERGE_POOL_SIZE}m.profraw" LLVM_PROFILE_FILE_PATTERN) + file(TO_NATIVE_PATH "${LLVM_BINARY_DIR}/profiles" LLVM_PROFILE_DATA_DIR) endif() + file(TO_NATIVE_PATH "${LLVM_PROFILE_DATA_DIR}/%${LLVM_PROFILE_MERGE_POOL_SIZE}m.profraw" LLVM_PROFILE_FILE_PATTERN) endif() endif() @@ -680,9 +678,13 @@ foreach(t ${LLVM_TARGETS_TO_BUILD}) list(FIND LLVM_ALL_TARGETS ${t} idx) list(FIND LLVM_EXPERIMENTAL_TARGETS_TO_BUILD ${t} idy) + # At this point, LLVMBUILDTOOL already checked all the targets passed in + # LLVM_TARGETS_TO_BUILD and LLVM_EXPERIMENTAL_TARGETS_TO_BUILD, so + # this test just makes sure that any experimental targets were passed via + # LLVM_EXPERIMENTAL_TARGETS_TO_BUILD, not LLVM_TARGETS_TO_BUILD. if( idx LESS 0 AND idy LESS 0 ) - message(FATAL_ERROR "The target `${t}' does not exist. - It should be one of\n${LLVM_ALL_TARGETS}") + message(FATAL_ERROR "The target `${t}' is experimental and must be passed " + "via LLVM_EXPERIMENTAL_TARGETS_TO_BUILD.") else() set(LLVM_ENUM_TARGETS "${LLVM_ENUM_TARGETS}LLVM_TARGET(${t})\n") endif() @@ -757,6 +759,7 @@ configure_file( add_custom_target(srpm COMMAND cpack -G TGZ --config CPackSourceConfig.cmake -B ${LLVM_SRPM_DIR}/SOURCES COMMAND rpmbuild -bs --define '_topdir ${LLVM_SRPM_DIR}' ${LLVM_SRPM_BINARY_SPECFILE}) +set_target_properties(srpm PROPERTIES FOLDER "Misc") # They are not referenced. See set_output_directory(). @@ -792,14 +795,14 @@ if(LLVM_USE_HOST_TOOLS) include(CrossCompile) endif(LLVM_USE_HOST_TOOLS) if(LLVM_TARGET_IS_CROSSCOMPILE_HOST) -# Dummy use to avoid CMake Wraning: Manually-specified variables were not used +# Dummy use to avoid CMake Warning: Manually-specified variables were not used # (this is a variable that CrossCompile sets on recursive invocations) endif() if(${CMAKE_SYSTEM_NAME} MATCHES "(FreeBSD|DragonFly)") # On FreeBSD, /usr/local/* is not used by default. In order to build LLVM # with libxml2, iconv.h, etc., we must add /usr/local paths. - include_directories("/usr/local/include") + include_directories(SYSTEM "/usr/local/include") link_directories("/usr/local/lib") endif(${CMAKE_SYSTEM_NAME} MATCHES "(FreeBSD|DragonFly)") @@ -839,15 +842,6 @@ add_subdirectory(lib/TableGen) add_subdirectory(utils/TableGen) -# Force target to be built as soon as possible. Clang modules builds depend -# header-wise on it as they ship all headers from the umbrella folders. Building -# an entire module might include header, which depends on intrinsics_gen. This -# should be right after LLVMSupport and LLVMTableGen otherwise we introduce a -# circular dependence. -if (LLVM_ENABLE_MODULES) - list(APPEND LLVM_COMMON_DEPENDS intrinsics_gen) -endif(LLVM_ENABLE_MODULES) - add_subdirectory(include/llvm) add_subdirectory(lib) @@ -857,7 +851,6 @@ if( LLVM_INCLUDE_UTILS ) add_subdirectory(utils/PerfectShuffle) add_subdirectory(utils/count) add_subdirectory(utils/not) - add_subdirectory(utils/llvm-lit) add_subdirectory(utils/yaml-bench) else() if ( LLVM_INCLUDE_TESTS ) @@ -900,6 +893,7 @@ if( LLVM_INCLUDE_TESTS ) NO_INSTALL ALWAYS_CLEAN) endif() + add_subdirectory(utils/lit) add_subdirectory(test) add_subdirectory(unittests) if( LLVM_INCLUDE_UTILS ) @@ -943,6 +937,11 @@ endif() add_subdirectory(cmake/modules) +# Do this last so that all lit targets have already been created. +if (LLVM_INCLUDE_UTILS) + add_subdirectory(utils/llvm-lit) +endif() + if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) install(DIRECTORY include/llvm include/llvm-c DESTINATION include @@ -973,13 +972,11 @@ if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) # Installing the headers needs to depend on generating any public # tablegen'd headers. add_custom_target(llvm-headers DEPENDS intrinsics_gen) + set_target_properties(llvm-headers PROPERTIES FOLDER "Misc") if (NOT CMAKE_CONFIGURATION_TYPES) - add_custom_target(install-llvm-headers - DEPENDS llvm-headers - COMMAND "${CMAKE_COMMAND}" - -DCMAKE_INSTALL_COMPONENT=llvm-headers - -P "${CMAKE_BINARY_DIR}/cmake_install.cmake") + add_llvm_install_targets(install-llvm-headers + COMPONENT llvm-headers) endif() endif() @@ -992,22 +989,32 @@ if(LLVM_DISTRIBUTION_COMPONENTS) add_custom_target(distribution) add_custom_target(install-distribution) + add_custom_target(install-distribution-stripped) foreach(target ${LLVM_DISTRIBUTION_COMPONENTS}) if(TARGET ${target}) add_dependencies(distribution ${target}) else() - message(FATAL_ERROR "Specified distribution component '${target}' doesn't have a target") + message(SEND_ERROR "Specified distribution component '${target}' doesn't have a target") endif() if(TARGET install-${target}) add_dependencies(install-distribution install-${target}) else() - message(FATAL_ERROR "Specified distribution component '${target}' doesn't have an install target") + message(SEND_ERROR "Specified distribution component '${target}' doesn't have an install target") + endif() + + if(TARGET install-${target}-stripped) + add_dependencies(install-distribution-stripped install-${target}-stripped) + else() + message(SEND_ERROR "Specified distribution component '${target}' doesn't have an install-stripped target." + " Its installation target creation should be changed to use add_llvm_install_targets," + " or you should manually create the 'install-${target}-stripped' target.") endif() endforeach() endif() # This allows us to deploy the Universal CRT DLLs by passing -DCMAKE_INSTALL_UCRT_LIBRARIES=ON to CMake -if (MSVC) +if (MSVC AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") include(InstallRequiredSystemLibraries) endif() + |