diff options
| author | Danny <danny@kdrag0n.dev> | 2021-01-09 23:34:32 +0000 |
|---|---|---|
| committer | mosimchah <mosimchah@gmail.com> | 2021-01-22 03:35:20 -0800 |
| commit | 783d21ff74759076d2fc503685ca47d2c29baea3 (patch) | |
| tree | d650cc46cbf7ca53f15c77ced2682e97d492c068 /lib/cmake | |
| parent | fdbc6f7102056fb52d26bfb2cbc6ea317890ee34 (diff) | |
LLVM commit: https://github.com/llvm/llvm-project/commit/b02eab9058e58782fca32dd8b1e53c27ed93f866
binutils version: 2.35.1
Builder commit: https://github.com/kdrag0n/proton-clang-build/commit/ba42f701467c9103f23fbb90aca4b23858221ee2
Diffstat (limited to 'lib/cmake')
29 files changed, 1892 insertions, 538 deletions
diff --git a/lib/cmake/clang/ClangConfig.cmake b/lib/cmake/clang/ClangConfig.cmake index 0ee9509..ed3dccd 100644 --- a/lib/cmake/clang/ClangConfig.cmake +++ b/lib/cmake/clang/ClangConfig.cmake @@ -10,9 +10,10 @@ get_filename_component(CLANG_INSTALL_PREFIX "${CLANG_INSTALL_PREFIX}" PATH) find_package(LLVM REQUIRED CONFIG HINTS "${CLANG_INSTALL_PREFIX}/lib/cmake/llvm") -set(CLANG_EXPORTED_TARGETS "clangBasic;clangLex;clangParse;clangAST;clangDynamicASTMatchers;clangASTMatchers;clangCrossTU;clangSema;clangCodeGen;clangAnalysis;clangEdit;clangRewrite;clangDriver;clangSerialization;clangRewriteFrontend;clangFrontend;clangFrontendTool;clangToolingCore;clangToolingInclusions;clangToolingRefactoring;clangToolingASTDiff;clangToolingSyntax;clangDependencyScanning;clangTransformer;clangTooling;clangDirectoryWatcher;clangIndex;clangFormat;clang;clang-format;clangHandleCXX;clangHandleLLVM;clang-import-test;clang-offload-bundler;clang-offload-wrapper;clang-scan-deps;clang-rename;clang-refactor;clang-cpp;libclang") +set(CLANG_EXPORTED_TARGETS "clangBasic;clangAPINotes;clangLex;clangParse;clangAST;clangDynamicASTMatchers;clangASTMatchers;clangCrossTU;clangSema;clangCodeGen;clangAnalysis;clangEdit;clangRewrite;clangDriver;clangSerialization;clangRewriteFrontend;clangFrontend;clangFrontendTool;clangToolingCore;clangToolingInclusions;clangToolingRefactoring;clangToolingASTDiff;clangToolingSyntax;clangDependencyScanning;clangTransformer;clangTooling;clangDirectoryWatcher;clangIndex;clangIndexSerialization;clangStaticAnalyzerCore;clangStaticAnalyzerCheckers;clangStaticAnalyzerFrontend;clangFormat;clangTesting;diagtool;clang;clang-format;clangHandleCXX;clangHandleLLVM;clang-offload-bundler;clang-offload-wrapper;clang-scan-deps;clang-rename;clang-refactor;clang-cpp;libclang") set(CLANG_CMAKE_DIR "${CLANG_INSTALL_PREFIX}/lib/cmake/clang") set(CLANG_INCLUDE_DIRS "${CLANG_INSTALL_PREFIX}/include") +set(CLANG_LINK_CLANG_DYLIB "OFF") # Provide all our library targets to users. include("${CLANG_CMAKE_DIR}/ClangTargets.cmake") diff --git a/lib/cmake/clang/ClangTargets-release.cmake b/lib/cmake/clang/ClangTargets-release.cmake index 5596bcb..547e43a 100644 --- a/lib/cmake/clang/ClangTargets-release.cmake +++ b/lib/cmake/clang/ClangTargets-release.cmake @@ -15,6 +15,16 @@ set_target_properties(clangBasic PROPERTIES list(APPEND _IMPORT_CHECK_TARGETS clangBasic ) list(APPEND _IMPORT_CHECK_FILES_FOR_clangBasic "${_IMPORT_PREFIX}/lib/libclangBasic.a" ) +# Import target "clangAPINotes" for configuration "Release" +set_property(TARGET clangAPINotes APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(clangAPINotes PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libclangAPINotes.a" + ) + +list(APPEND _IMPORT_CHECK_TARGETS clangAPINotes ) +list(APPEND _IMPORT_CHECK_FILES_FOR_clangAPINotes "${_IMPORT_PREFIX}/lib/libclangAPINotes.a" ) + # Import target "clangLex" for configuration "Release" set_property(TARGET clangLex APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) set_target_properties(clangLex PROPERTIES @@ -275,6 +285,46 @@ set_target_properties(clangIndex PROPERTIES list(APPEND _IMPORT_CHECK_TARGETS clangIndex ) list(APPEND _IMPORT_CHECK_FILES_FOR_clangIndex "${_IMPORT_PREFIX}/lib/libclangIndex.a" ) +# Import target "clangIndexSerialization" for configuration "Release" +set_property(TARGET clangIndexSerialization APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(clangIndexSerialization PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libclangIndexSerialization.a" + ) + +list(APPEND _IMPORT_CHECK_TARGETS clangIndexSerialization ) +list(APPEND _IMPORT_CHECK_FILES_FOR_clangIndexSerialization "${_IMPORT_PREFIX}/lib/libclangIndexSerialization.a" ) + +# Import target "clangStaticAnalyzerCore" for configuration "Release" +set_property(TARGET clangStaticAnalyzerCore APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(clangStaticAnalyzerCore PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libclangStaticAnalyzerCore.a" + ) + +list(APPEND _IMPORT_CHECK_TARGETS clangStaticAnalyzerCore ) +list(APPEND _IMPORT_CHECK_FILES_FOR_clangStaticAnalyzerCore "${_IMPORT_PREFIX}/lib/libclangStaticAnalyzerCore.a" ) + +# Import target "clangStaticAnalyzerCheckers" for configuration "Release" +set_property(TARGET clangStaticAnalyzerCheckers APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(clangStaticAnalyzerCheckers PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libclangStaticAnalyzerCheckers.a" + ) + +list(APPEND _IMPORT_CHECK_TARGETS clangStaticAnalyzerCheckers ) +list(APPEND _IMPORT_CHECK_FILES_FOR_clangStaticAnalyzerCheckers "${_IMPORT_PREFIX}/lib/libclangStaticAnalyzerCheckers.a" ) + +# Import target "clangStaticAnalyzerFrontend" for configuration "Release" +set_property(TARGET clangStaticAnalyzerFrontend APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(clangStaticAnalyzerFrontend PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libclangStaticAnalyzerFrontend.a" + ) + +list(APPEND _IMPORT_CHECK_TARGETS clangStaticAnalyzerFrontend ) +list(APPEND _IMPORT_CHECK_FILES_FOR_clangStaticAnalyzerFrontend "${_IMPORT_PREFIX}/lib/libclangStaticAnalyzerFrontend.a" ) + # Import target "clangFormat" for configuration "Release" set_property(TARGET clangFormat APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) set_target_properties(clangFormat PROPERTIES @@ -285,14 +335,33 @@ set_target_properties(clangFormat PROPERTIES list(APPEND _IMPORT_CHECK_TARGETS clangFormat ) list(APPEND _IMPORT_CHECK_FILES_FOR_clangFormat "${_IMPORT_PREFIX}/lib/libclangFormat.a" ) +# Import target "clangTesting" for configuration "Release" +set_property(TARGET clangTesting APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(clangTesting PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libclangTesting.a" + ) + +list(APPEND _IMPORT_CHECK_TARGETS clangTesting ) +list(APPEND _IMPORT_CHECK_FILES_FOR_clangTesting "${_IMPORT_PREFIX}/lib/libclangTesting.a" ) + +# Import target "diagtool" for configuration "Release" +set_property(TARGET diagtool APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(diagtool PROPERTIES + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/bin/diagtool" + ) + +list(APPEND _IMPORT_CHECK_TARGETS diagtool ) +list(APPEND _IMPORT_CHECK_FILES_FOR_diagtool "${_IMPORT_PREFIX}/bin/diagtool" ) + # Import target "clang" for configuration "Release" set_property(TARGET clang APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) set_target_properties(clang PROPERTIES - IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/bin/clang-11" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/bin/clang-12" ) list(APPEND _IMPORT_CHECK_TARGETS clang ) -list(APPEND _IMPORT_CHECK_FILES_FOR_clang "${_IMPORT_PREFIX}/bin/clang-11" ) +list(APPEND _IMPORT_CHECK_FILES_FOR_clang "${_IMPORT_PREFIX}/bin/clang-12" ) # Import target "clang-format" for configuration "Release" set_property(TARGET clang-format APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) @@ -323,15 +392,6 @@ set_target_properties(clangHandleLLVM PROPERTIES list(APPEND _IMPORT_CHECK_TARGETS clangHandleLLVM ) list(APPEND _IMPORT_CHECK_FILES_FOR_clangHandleLLVM "${_IMPORT_PREFIX}/lib/libclangHandleLLVM.a" ) -# Import target "clang-import-test" for configuration "Release" -set_property(TARGET clang-import-test APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) -set_target_properties(clang-import-test PROPERTIES - IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/bin/clang-import-test" - ) - -list(APPEND _IMPORT_CHECK_TARGETS clang-import-test ) -list(APPEND _IMPORT_CHECK_FILES_FOR_clang-import-test "${_IMPORT_PREFIX}/bin/clang-import-test" ) - # Import target "clang-offload-bundler" for configuration "Release" set_property(TARGET clang-offload-bundler APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) set_target_properties(clang-offload-bundler PROPERTIES @@ -380,22 +440,22 @@ list(APPEND _IMPORT_CHECK_FILES_FOR_clang-refactor "${_IMPORT_PREFIX}/bin/clang- # Import target "clang-cpp" for configuration "Release" set_property(TARGET clang-cpp APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) set_target_properties(clang-cpp PROPERTIES - IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libclang-cpp.so.11git" - IMPORTED_SONAME_RELEASE "libclang-cpp.so.11git" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libclang-cpp.so.12git" + IMPORTED_SONAME_RELEASE "libclang-cpp.so.12git" ) list(APPEND _IMPORT_CHECK_TARGETS clang-cpp ) -list(APPEND _IMPORT_CHECK_FILES_FOR_clang-cpp "${_IMPORT_PREFIX}/lib/libclang-cpp.so.11git" ) +list(APPEND _IMPORT_CHECK_FILES_FOR_clang-cpp "${_IMPORT_PREFIX}/lib/libclang-cpp.so.12git" ) # Import target "libclang" for configuration "Release" set_property(TARGET libclang APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) set_target_properties(libclang PROPERTIES - IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libclang.so.11" - IMPORTED_SONAME_RELEASE "libclang.so.11git" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libclang.so.12" + IMPORTED_SONAME_RELEASE "libclang.so.12git" ) list(APPEND _IMPORT_CHECK_TARGETS libclang ) -list(APPEND _IMPORT_CHECK_FILES_FOR_libclang "${_IMPORT_PREFIX}/lib/libclang.so.11" ) +list(APPEND _IMPORT_CHECK_FILES_FOR_libclang "${_IMPORT_PREFIX}/lib/libclang.so.12" ) # Commands beyond this point should not need to know the version. set(CMAKE_IMPORT_FILE_VERSION) diff --git a/lib/cmake/clang/ClangTargets.cmake b/lib/cmake/clang/ClangTargets.cmake index adc2a6f..6bc234d 100644 --- a/lib/cmake/clang/ClangTargets.cmake +++ b/lib/cmake/clang/ClangTargets.cmake @@ -4,7 +4,7 @@ if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) message(FATAL_ERROR "CMake >= 2.6.0 required") endif() cmake_policy(PUSH) -cmake_policy(VERSION 2.6) +cmake_policy(VERSION 2.6...3.17) #---------------------------------------------------------------- # Generated CMake target import file. #---------------------------------------------------------------- @@ -16,7 +16,7 @@ set(CMAKE_IMPORT_FILE_VERSION 1) set(_targetsDefined) set(_targetsNotDefined) set(_expectedTargets) -foreach(_expectedTarget clangBasic clangLex clangParse clangAST clangDynamicASTMatchers clangASTMatchers clangCrossTU clangSema clangCodeGen clangAnalysis clangEdit clangRewrite clangDriver clangSerialization clangRewriteFrontend clangFrontend clangFrontendTool clangToolingCore clangToolingInclusions clangToolingRefactoring clangToolingASTDiff clangToolingSyntax clangDependencyScanning clangTransformer clangTooling clangDirectoryWatcher clangIndex clangFormat clang clang-format clangHandleCXX clangHandleLLVM clang-import-test clang-offload-bundler clang-offload-wrapper clang-scan-deps clang-rename clang-refactor clang-cpp libclang) +foreach(_expectedTarget clangBasic clangAPINotes clangLex clangParse clangAST clangDynamicASTMatchers clangASTMatchers clangCrossTU clangSema clangCodeGen clangAnalysis clangEdit clangRewrite clangDriver clangSerialization clangRewriteFrontend clangFrontend clangFrontendTool clangToolingCore clangToolingInclusions clangToolingRefactoring clangToolingASTDiff clangToolingSyntax clangDependencyScanning clangTransformer clangTooling clangDirectoryWatcher clangIndex clangIndexSerialization clangStaticAnalyzerCore clangStaticAnalyzerCheckers clangStaticAnalyzerFrontend clangFormat clangTesting diagtool clang clang-format clangHandleCXX clangHandleLLVM clang-offload-bundler clang-offload-wrapper clang-scan-deps clang-rename clang-refactor clang-cpp libclang) list(APPEND _expectedTargets ${_expectedTarget}) if(NOT TARGET ${_expectedTarget}) list(APPEND _targetsNotDefined ${_expectedTarget}) @@ -57,6 +57,13 @@ set_target_properties(clangBasic PROPERTIES INTERFACE_LINK_LIBRARIES "LLVMCore;LLVMMC;LLVMSupport" ) +# Create imported target clangAPINotes +add_library(clangAPINotes STATIC IMPORTED) + +set_target_properties(clangAPINotes PROPERTIES + INTERFACE_LINK_LIBRARIES "clangBasic;LLVMSupport" +) + # Create imported target clangLex add_library(clangLex STATIC IMPORTED) @@ -82,14 +89,14 @@ set_target_properties(clangAST PROPERTIES add_library(clangDynamicASTMatchers STATIC IMPORTED) set_target_properties(clangDynamicASTMatchers PROPERTIES - INTERFACE_LINK_LIBRARIES "clangAST;clangASTMatchers;clangBasic;LLVMSupport" + INTERFACE_LINK_LIBRARIES "clangAST;clangASTMatchers;clangBasic;LLVMFrontendOpenMP;LLVMSupport" ) # Create imported target clangASTMatchers add_library(clangASTMatchers STATIC IMPORTED) set_target_properties(clangASTMatchers PROPERTIES - INTERFACE_LINK_LIBRARIES "clangAST;clangBasic;LLVMSupport" + INTERFACE_LINK_LIBRARIES "clangAST;clangBasic;clangLex;LLVMFrontendOpenMP;LLVMSupport" ) # Create imported target clangCrossTU @@ -103,21 +110,21 @@ set_target_properties(clangCrossTU PROPERTIES add_library(clangSema STATIC IMPORTED) set_target_properties(clangSema PROPERTIES - INTERFACE_LINK_LIBRARIES "clangAST;clangAnalysis;clangBasic;clangEdit;clangLex;LLVMFrontendOpenMP;LLVMSupport" + INTERFACE_LINK_LIBRARIES "clangAST;clangAnalysis;clangBasic;clangEdit;clangLex;LLVMCore;LLVMFrontendOpenMP;LLVMSupport" ) # Create imported target clangCodeGen add_library(clangCodeGen STATIC IMPORTED) set_target_properties(clangCodeGen PROPERTIES - INTERFACE_LINK_LIBRARIES "clangAnalysis;clangAST;clangASTMatchers;clangBasic;clangFrontend;clangLex;clangSerialization;LLVMAnalysis;LLVMBitReader;LLVMBitWriter;LLVMCore;LLVMCoroutines;LLVMCoverage;LLVMFrontendOpenMP;LLVMipo;LLVMIRReader;LLVMAggressiveInstCombine;LLVMInstCombine;LLVMInstrumentation;LLVMLTO;LLVMLinker;LLVMMC;LLVMObjCARCOpts;LLVMObject;LLVMPasses;LLVMProfileData;LLVMRemarks;LLVMScalarOpts;LLVMSupport;LLVMTarget;LLVMTransformUtils" + INTERFACE_LINK_LIBRARIES "clangAnalysis;clangAST;clangBasic;clangFrontend;clangLex;clangSerialization;LLVMAnalysis;LLVMBitReader;LLVMBitWriter;LLVMCore;LLVMCoroutines;LLVMCoverage;LLVMExtensions;LLVMFrontendOpenMP;LLVMipo;LLVMIRReader;LLVMAggressiveInstCombine;LLVMInstCombine;LLVMInstrumentation;LLVMLTO;LLVMLinker;LLVMMC;LLVMObjCARCOpts;LLVMObject;LLVMPasses;LLVMProfileData;LLVMRemarks;LLVMScalarOpts;LLVMSupport;LLVMTarget;LLVMTransformUtils" ) # Create imported target clangAnalysis add_library(clangAnalysis STATIC IMPORTED) set_target_properties(clangAnalysis PROPERTIES - INTERFACE_LINK_LIBRARIES "clangAST;clangASTMatchers;clangBasic;clangLex;LLVMSupport" + INTERFACE_LINK_LIBRARIES "clangAST;clangASTMatchers;clangBasic;clangLex;LLVMFrontendOpenMP;LLVMSupport" ) # Create imported target clangEdit @@ -173,7 +180,7 @@ set_target_properties(clangFrontendTool PROPERTIES add_library(clangToolingCore STATIC IMPORTED) set_target_properties(clangToolingCore PROPERTIES - INTERFACE_LINK_LIBRARIES "clangAST;clangBasic;clangLex;clangRewrite;LLVMSupport" + INTERFACE_LINK_LIBRARIES "clangBasic;clangLex;clangRewrite;LLVMSupport" ) # Create imported target clangToolingInclusions @@ -215,14 +222,14 @@ set_target_properties(clangDependencyScanning PROPERTIES add_library(clangTransformer STATIC IMPORTED) set_target_properties(clangTransformer PROPERTIES - INTERFACE_LINK_LIBRARIES "clangAST;clangASTMatchers;clangBasic;clangLex;clangToolingCore;clangToolingRefactoring;LLVMSupport" + INTERFACE_LINK_LIBRARIES "clangAST;clangASTMatchers;clangBasic;clangLex;clangToolingCore;clangToolingRefactoring;LLVMFrontendOpenMP;LLVMSupport" ) # Create imported target clangTooling add_library(clangTooling STATIC IMPORTED) set_target_properties(clangTooling PROPERTIES - INTERFACE_LINK_LIBRARIES "clangAST;clangASTMatchers;clangBasic;clangDriver;clangFormat;clangFrontend;clangLex;clangRewrite;clangSerialization;clangToolingCore;LLVMOption;LLVMSupport" + INTERFACE_LINK_LIBRARIES "clangAST;clangASTMatchers;clangBasic;clangDriver;clangFormat;clangFrontend;clangLex;clangRewrite;clangSerialization;clangToolingCore;LLVMOption;LLVMFrontendOpenMP;LLVMSupport" ) # Create imported target clangDirectoryWatcher @@ -239,6 +246,34 @@ set_target_properties(clangIndex PROPERTIES INTERFACE_LINK_LIBRARIES "clangAST;clangBasic;clangFormat;clangFrontend;clangLex;clangRewrite;clangSerialization;clangToolingCore;LLVMCore;LLVMSupport" ) +# Create imported target clangIndexSerialization +add_library(clangIndexSerialization STATIC IMPORTED) + +set_target_properties(clangIndexSerialization PROPERTIES + INTERFACE_LINK_LIBRARIES "clangBasic;LLVMSupport" +) + +# Create imported target clangStaticAnalyzerCore +add_library(clangStaticAnalyzerCore STATIC IMPORTED) + +set_target_properties(clangStaticAnalyzerCore PROPERTIES + INTERFACE_LINK_LIBRARIES "clangAST;clangASTMatchers;clangAnalysis;clangBasic;clangCrossTU;clangFrontend;clangLex;clangRewrite;clangToolingCore;LLVMFrontendOpenMP;LLVMSupport" +) + +# Create imported target clangStaticAnalyzerCheckers +add_library(clangStaticAnalyzerCheckers STATIC IMPORTED) + +set_target_properties(clangStaticAnalyzerCheckers PROPERTIES + INTERFACE_LINK_LIBRARIES "clangAST;clangASTMatchers;clangAnalysis;clangBasic;clangLex;clangStaticAnalyzerCore;LLVMFrontendOpenMP;LLVMSupport" +) + +# Create imported target clangStaticAnalyzerFrontend +add_library(clangStaticAnalyzerFrontend STATIC IMPORTED) + +set_target_properties(clangStaticAnalyzerFrontend PROPERTIES + INTERFACE_LINK_LIBRARIES "clangAST;clangASTMatchers;clangAnalysis;clangBasic;clangCrossTU;clangFrontend;clangLex;clangStaticAnalyzerCheckers;clangStaticAnalyzerCore;LLVMSupport" +) + # Create imported target clangFormat add_library(clangFormat STATIC IMPORTED) @@ -246,6 +281,16 @@ set_target_properties(clangFormat PROPERTIES INTERFACE_LINK_LIBRARIES "clangBasic;clangLex;clangToolingCore;clangToolingInclusions;LLVMSupport" ) +# Create imported target clangTesting +add_library(clangTesting STATIC IMPORTED) + +set_target_properties(clangTesting PROPERTIES + INTERFACE_LINK_LIBRARIES "LLVMSupport" +) + +# Create imported target diagtool +add_executable(diagtool IMPORTED) + # Create imported target clang add_executable(clang IMPORTED) @@ -256,19 +301,16 @@ add_executable(clang-format IMPORTED) add_library(clangHandleCXX STATIC IMPORTED) set_target_properties(clangHandleCXX PROPERTIES - INTERFACE_LINK_LIBRARIES "clangBasic;clangCodeGen;clangFrontend;clangLex;clangSerialization;clangTooling;LLVMARMCodeGen;LLVMARMAsmParser;LLVMARMDesc;LLVMARMDisassembler;LLVMARMInfo;LLVMARMUtils;LLVMAArch64CodeGen;LLVMAArch64AsmParser;LLVMAArch64Desc;LLVMAArch64Disassembler;LLVMAArch64Info;LLVMAArch64Utils;LLVMX86CodeGen;LLVMX86AsmParser;LLVMX86Desc;LLVMX86Disassembler;LLVMX86Info;LLVMX86Utils;LLVMSupport" + INTERFACE_LINK_LIBRARIES "clangBasic;clangCodeGen;clangFrontend;clangLex;clangSerialization;clangTooling;LLVMARMCodeGen;LLVMARMAsmParser;LLVMARMDesc;LLVMARMDisassembler;LLVMARMInfo;LLVMARMUtils;LLVMAArch64CodeGen;LLVMAArch64AsmParser;LLVMAArch64Desc;LLVMAArch64Disassembler;LLVMAArch64Info;LLVMAArch64Utils;LLVMX86CodeGen;LLVMX86AsmParser;LLVMX86Desc;LLVMX86Disassembler;LLVMX86Info;LLVMSupport" ) # Create imported target clangHandleLLVM add_library(clangHandleLLVM STATIC IMPORTED) set_target_properties(clangHandleLLVM PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMAnalysis;LLVMCodeGen;LLVMCore;LLVMExecutionEngine;LLVMipo;LLVMIRReader;LLVMMC;LLVMMCJIT;LLVMObject;LLVMRuntimeDyld;LLVMSelectionDAG;LLVMSupport;LLVMTarget;LLVMTransformUtils;LLVMX86CodeGen;LLVMX86AsmParser;LLVMX86Desc;LLVMX86Disassembler;LLVMX86Info;LLVMX86Utils" + INTERFACE_LINK_LIBRARIES "LLVMAnalysis;LLVMCodeGen;LLVMCore;LLVMExecutionEngine;LLVMipo;LLVMIRReader;LLVMMC;LLVMMCJIT;LLVMObject;LLVMRuntimeDyld;LLVMSelectionDAG;LLVMSupport;LLVMTarget;LLVMTransformUtils;LLVMX86CodeGen;LLVMX86AsmParser;LLVMX86Desc;LLVMX86Disassembler;LLVMX86Info" ) -# Create imported target clang-import-test -add_executable(clang-import-test IMPORTED) - # Create imported target clang-offload-bundler add_executable(clang-offload-bundler IMPORTED) @@ -323,10 +365,10 @@ but not all the files it references. endforeach() unset(_IMPORT_CHECK_TARGETS) -# Make sure the targets which have been exported in some other +# Make sure the targets which have been exported in some other # export set exist. unset(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets) -foreach(_target "LLVMCore" "LLVMMC" "LLVMSupport" "LLVMFrontendOpenMP" "LLVMMCParser" "LLVMBinaryFormat" "LLVMAnalysis" "LLVMBitReader" "LLVMBitWriter" "LLVMCoroutines" "LLVMCoverage" "LLVMipo" "LLVMIRReader" "LLVMAggressiveInstCombine" "LLVMInstCombine" "LLVMInstrumentation" "LLVMLTO" "LLVMLinker" "LLVMObjCARCOpts" "LLVMObject" "LLVMPasses" "LLVMProfileData" "LLVMRemarks" "LLVMScalarOpts" "LLVMTarget" "LLVMTransformUtils" "LLVMOption" "LLVMBitstreamReader" "LLVMARMCodeGen" "LLVMARMAsmParser" "LLVMARMDesc" "LLVMARMDisassembler" "LLVMARMInfo" "LLVMARMUtils" "LLVMAArch64CodeGen" "LLVMAArch64AsmParser" "LLVMAArch64Desc" "LLVMAArch64Disassembler" "LLVMAArch64Info" "LLVMAArch64Utils" "LLVMX86CodeGen" "LLVMX86AsmParser" "LLVMX86Desc" "LLVMX86Disassembler" "LLVMX86Info" "LLVMX86Utils" "LLVMCodeGen" "LLVMExecutionEngine" "LLVMMCJIT" "LLVMRuntimeDyld" "LLVMSelectionDAG" ) +foreach(_target "LLVMCore" "LLVMMC" "LLVMSupport" "LLVMFrontendOpenMP" "LLVMMCParser" "LLVMBinaryFormat" "LLVMAnalysis" "LLVMBitReader" "LLVMBitWriter" "LLVMCoroutines" "LLVMCoverage" "LLVMExtensions" "LLVMipo" "LLVMIRReader" "LLVMAggressiveInstCombine" "LLVMInstCombine" "LLVMInstrumentation" "LLVMLTO" "LLVMLinker" "LLVMObjCARCOpts" "LLVMObject" "LLVMPasses" "LLVMProfileData" "LLVMRemarks" "LLVMScalarOpts" "LLVMTarget" "LLVMTransformUtils" "LLVMOption" "LLVMBitstreamReader" "LLVMARMCodeGen" "LLVMARMAsmParser" "LLVMARMDesc" "LLVMARMDisassembler" "LLVMARMInfo" "LLVMARMUtils" "LLVMAArch64CodeGen" "LLVMAArch64AsmParser" "LLVMAArch64Desc" "LLVMAArch64Disassembler" "LLVMAArch64Info" "LLVMAArch64Utils" "LLVMX86CodeGen" "LLVMX86AsmParser" "LLVMX86Desc" "LLVMX86Disassembler" "LLVMX86Info" "LLVMCodeGen" "LLVMExecutionEngine" "LLVMMCJIT" "LLVMRuntimeDyld" "LLVMSelectionDAG" ) if(NOT TARGET "${_target}" ) set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets "${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets} ${_target}") endif() diff --git a/lib/cmake/lld/LLDConfig.cmake b/lib/cmake/lld/LLDConfig.cmake new file mode 100644 index 0000000..f0d140d --- /dev/null +++ b/lib/cmake/lld/LLDConfig.cmake @@ -0,0 +1,18 @@ +# This file allows users to call find_package(LLD) and pick up our targets. + + +# Compute the installation prefix from this LLVMConfig.cmake file location. +get_filename_component(LLD_INSTALL_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(LLD_INSTALL_PREFIX "${LLD_INSTALL_PREFIX}" PATH) +get_filename_component(LLD_INSTALL_PREFIX "${LLD_INSTALL_PREFIX}" PATH) +get_filename_component(LLD_INSTALL_PREFIX "${LLD_INSTALL_PREFIX}" PATH) + +find_package(LLVM REQUIRED CONFIG + HINTS "${LLD_INSTALL_PREFIX}/lib/cmake/llvm") + +set(LLD_EXPORTED_TARGETS "lldCommon;lldCore;lldDriver;lldMachO;lldYAML;lldReaderWriter;lld;lldCOFF;lldELF;lldMachO2;lldMinGW;lldWasm") +set(LLD_CMAKE_DIR "${LLD_INSTALL_PREFIX}/lib/cmake/lld") +set(LLD_INCLUDE_DIRS "${LLD_INSTALL_PREFIX}/include") + +# Provide all our library targets to users. +include("${LLD_CMAKE_DIR}/LLDTargets.cmake") diff --git a/lib/cmake/lld/LLDTargets-release.cmake b/lib/cmake/lld/LLDTargets-release.cmake new file mode 100644 index 0000000..69cd78b --- /dev/null +++ b/lib/cmake/lld/LLDTargets-release.cmake @@ -0,0 +1,128 @@ +#---------------------------------------------------------------- +# Generated CMake target import file for configuration "Release". +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "lldCommon" for configuration "Release" +set_property(TARGET lldCommon APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(lldCommon PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/liblldCommon.a" + ) + +list(APPEND _IMPORT_CHECK_TARGETS lldCommon ) +list(APPEND _IMPORT_CHECK_FILES_FOR_lldCommon "${_IMPORT_PREFIX}/lib/liblldCommon.a" ) + +# Import target "lldCore" for configuration "Release" +set_property(TARGET lldCore APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(lldCore PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/liblldCore.a" + ) + +list(APPEND _IMPORT_CHECK_TARGETS lldCore ) +list(APPEND _IMPORT_CHECK_FILES_FOR_lldCore "${_IMPORT_PREFIX}/lib/liblldCore.a" ) + +# Import target "lldDriver" for configuration "Release" +set_property(TARGET lldDriver APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(lldDriver PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/liblldDriver.a" + ) + +list(APPEND _IMPORT_CHECK_TARGETS lldDriver ) +list(APPEND _IMPORT_CHECK_FILES_FOR_lldDriver "${_IMPORT_PREFIX}/lib/liblldDriver.a" ) + +# Import target "lldMachO" for configuration "Release" +set_property(TARGET lldMachO APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(lldMachO PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/liblldMachO.a" + ) + +list(APPEND _IMPORT_CHECK_TARGETS lldMachO ) +list(APPEND _IMPORT_CHECK_FILES_FOR_lldMachO "${_IMPORT_PREFIX}/lib/liblldMachO.a" ) + +# Import target "lldYAML" for configuration "Release" +set_property(TARGET lldYAML APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(lldYAML PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/liblldYAML.a" + ) + +list(APPEND _IMPORT_CHECK_TARGETS lldYAML ) +list(APPEND _IMPORT_CHECK_FILES_FOR_lldYAML "${_IMPORT_PREFIX}/lib/liblldYAML.a" ) + +# Import target "lldReaderWriter" for configuration "Release" +set_property(TARGET lldReaderWriter APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(lldReaderWriter PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/liblldReaderWriter.a" + ) + +list(APPEND _IMPORT_CHECK_TARGETS lldReaderWriter ) +list(APPEND _IMPORT_CHECK_FILES_FOR_lldReaderWriter "${_IMPORT_PREFIX}/lib/liblldReaderWriter.a" ) + +# Import target "lld" for configuration "Release" +set_property(TARGET lld APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(lld PROPERTIES + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/bin/lld" + ) + +list(APPEND _IMPORT_CHECK_TARGETS lld ) +list(APPEND _IMPORT_CHECK_FILES_FOR_lld "${_IMPORT_PREFIX}/bin/lld" ) + +# Import target "lldCOFF" for configuration "Release" +set_property(TARGET lldCOFF APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(lldCOFF PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/liblldCOFF.a" + ) + +list(APPEND _IMPORT_CHECK_TARGETS lldCOFF ) +list(APPEND _IMPORT_CHECK_FILES_FOR_lldCOFF "${_IMPORT_PREFIX}/lib/liblldCOFF.a" ) + +# Import target "lldELF" for configuration "Release" +set_property(TARGET lldELF APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(lldELF PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/liblldELF.a" + ) + +list(APPEND _IMPORT_CHECK_TARGETS lldELF ) +list(APPEND _IMPORT_CHECK_FILES_FOR_lldELF "${_IMPORT_PREFIX}/lib/liblldELF.a" ) + +# Import target "lldMachO2" for configuration "Release" +set_property(TARGET lldMachO2 APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(lldMachO2 PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/liblldMachO2.a" + ) + +list(APPEND _IMPORT_CHECK_TARGETS lldMachO2 ) +list(APPEND _IMPORT_CHECK_FILES_FOR_lldMachO2 "${_IMPORT_PREFIX}/lib/liblldMachO2.a" ) + +# Import target "lldMinGW" for configuration "Release" +set_property(TARGET lldMinGW APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(lldMinGW PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/liblldMinGW.a" + ) + +list(APPEND _IMPORT_CHECK_TARGETS lldMinGW ) +list(APPEND _IMPORT_CHECK_FILES_FOR_lldMinGW "${_IMPORT_PREFIX}/lib/liblldMinGW.a" ) + +# Import target "lldWasm" for configuration "Release" +set_property(TARGET lldWasm APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(lldWasm PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/liblldWasm.a" + ) + +list(APPEND _IMPORT_CHECK_TARGETS lldWasm ) +list(APPEND _IMPORT_CHECK_FILES_FOR_lldWasm "${_IMPORT_PREFIX}/lib/liblldWasm.a" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/lib/cmake/lld/LLDTargets.cmake b/lib/cmake/lld/LLDTargets.cmake new file mode 100644 index 0000000..0d02736 --- /dev/null +++ b/lib/cmake/lld/LLDTargets.cmake @@ -0,0 +1,188 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) + message(FATAL_ERROR "CMake >= 2.6.0 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.6...3.17) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_targetsDefined) +set(_targetsNotDefined) +set(_expectedTargets) +foreach(_expectedTarget lldCommon lldCore lldDriver lldMachO lldYAML lldReaderWriter lld lldCOFF lldELF lldMachO2 lldMinGW lldWasm) + list(APPEND _expectedTargets ${_expectedTarget}) + if(NOT TARGET ${_expectedTarget}) + list(APPEND _targetsNotDefined ${_expectedTarget}) + endif() + if(TARGET ${_expectedTarget}) + list(APPEND _targetsDefined ${_expectedTarget}) + endif() +endforeach() +if("${_targetsDefined}" STREQUAL "${_expectedTargets}") + unset(_targetsDefined) + unset(_targetsNotDefined) + unset(_expectedTargets) + set(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT "${_targetsDefined}" STREQUAL "") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_targetsDefined}\nTargets not yet defined: ${_targetsNotDefined}\n") +endif() +unset(_targetsDefined) +unset(_targetsNotDefined) +unset(_expectedTargets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target lldCommon +add_library(lldCommon STATIC IMPORTED) + +set_target_properties(lldCommon PROPERTIES + INTERFACE_LINK_LIBRARIES "-lpthread;LLVMCodeGen;LLVMCore;LLVMDebugInfoDWARF;LLVMDemangle;LLVMMC;LLVMOption;LLVMSupport;LLVMTarget" +) + +# Create imported target lldCore +add_library(lldCore STATIC IMPORTED) + +set_target_properties(lldCore PROPERTIES + INTERFACE_LINK_LIBRARIES "-lpthread;LLVMBinaryFormat;LLVMMC;LLVMSupport" +) + +# Create imported target lldDriver +add_library(lldDriver STATIC IMPORTED) + +set_target_properties(lldDriver PROPERTIES + INTERFACE_LINK_LIBRARIES "lldCommon;lldCore;lldMachO;lldReaderWriter;lldYAML;LLVMOption;LLVMSupport" +) + +# Create imported target lldMachO +add_library(lldMachO STATIC IMPORTED) + +set_target_properties(lldMachO PROPERTIES + INTERFACE_LINK_LIBRARIES "lldCommon;lldCore;lldYAML;-lpthread;LLVMDebugInfoDWARF;LLVMDemangle;LLVMObject;LLVMSupport;LLVMTextAPI" +) + +# Create imported target lldYAML +add_library(lldYAML STATIC IMPORTED) + +set_target_properties(lldYAML PROPERTIES + INTERFACE_LINK_LIBRARIES "lldCore;LLVMSupport" +) + +# Create imported target lldReaderWriter +add_library(lldReaderWriter STATIC IMPORTED) + +set_target_properties(lldReaderWriter PROPERTIES + INTERFACE_LINK_LIBRARIES "lldCore;LLVMObject;LLVMSupport" +) + +# Create imported target lld +add_executable(lld IMPORTED) +set_property(TARGET lld PROPERTY ENABLE_EXPORTS 1) + +# Create imported target lldCOFF +add_library(lldCOFF STATIC IMPORTED) + +set_target_properties(lldCOFF PROPERTIES + INTERFACE_LINK_LIBRARIES "lldCommon;-lpthread;LLVMARMCodeGen;LLVMARMAsmParser;LLVMARMDesc;LLVMARMDisassembler;LLVMARMInfo;LLVMARMUtils;LLVMAArch64CodeGen;LLVMAArch64AsmParser;LLVMAArch64Desc;LLVMAArch64Disassembler;LLVMAArch64Info;LLVMAArch64Utils;LLVMX86CodeGen;LLVMX86AsmParser;LLVMX86Desc;LLVMX86Disassembler;LLVMX86Info;LLVMBinaryFormat;LLVMCore;LLVMDebugInfoCodeView;LLVMDebugInfoDWARF;LLVMDebugInfoMSF;LLVMDebugInfoPDB;LLVMDemangle;LLVMLibDriver;LLVMLTO;LLVMMC;LLVMObject;LLVMOption;LLVMPasses;LLVMSupport;LLVMWindowsManifest" +) + +# Create imported target lldELF +add_library(lldELF STATIC IMPORTED) + +set_target_properties(lldELF PROPERTIES + INTERFACE_LINK_LIBRARIES "lldCommon;-lpthread;LLVMARMCodeGen;LLVMARMAsmParser;LLVMARMDesc;LLVMARMDisassembler;LLVMARMInfo;LLVMARMUtils;LLVMAArch64CodeGen;LLVMAArch64AsmParser;LLVMAArch64Desc;LLVMAArch64Disassembler;LLVMAArch64Info;LLVMAArch64Utils;LLVMX86CodeGen;LLVMX86AsmParser;LLVMX86Desc;LLVMX86Disassembler;LLVMX86Info;LLVMBinaryFormat;LLVMBitWriter;LLVMCore;LLVMDebugInfoDWARF;LLVMDemangle;LLVMLTO;LLVMMC;LLVMObject;LLVMOption;LLVMPasses;LLVMSupport" +) + +# Create imported target lldMachO2 +add_library(lldMachO2 STATIC IMPORTED) + +set_target_properties(lldMachO2 PROPERTIES + INTERFACE_LINK_LIBRARIES "lldCommon;-lpthread;LLVMARMCodeGen;LLVMARMAsmParser;LLVMARMDesc;LLVMARMDisassembler;LLVMARMInfo;LLVMARMUtils;LLVMAArch64CodeGen;LLVMAArch64AsmParser;LLVMAArch64Desc;LLVMAArch64Disassembler;LLVMAArch64Info;LLVMAArch64Utils;LLVMX86CodeGen;LLVMX86AsmParser;LLVMX86Desc;LLVMX86Disassembler;LLVMX86Info;LLVMBinaryFormat;LLVMCore;LLVMDebugInfoDWARF;LLVMLTO;LLVMMC;LLVMObject;LLVMOption;LLVMPasses;LLVMSupport;LLVMTextAPI" +) + +# Create imported target lldMinGW +add_library(lldMinGW STATIC IMPORTED) + +set_target_properties(lldMinGW PROPERTIES + INTERFACE_LINK_LIBRARIES "lldCOFF;lldCommon;LLVMOption;LLVMSupport" +) + +# Create imported target lldWasm +add_library(lldWasm STATIC IMPORTED) + +set_target_properties(lldWasm PROPERTIES + INTERFACE_LINK_LIBRARIES "lldCommon;LLVMARMCodeGen;LLVMARMAsmParser;LLVMARMDesc;LLVMARMDisassembler;LLVMARMInfo;LLVMARMUtils;LLVMAArch64CodeGen;LLVMAArch64AsmParser;LLVMAArch64Desc;LLVMAArch64Disassembler;LLVMAArch64Info;LLVMAArch64Utils;LLVMX86CodeGen;LLVMX86AsmParser;LLVMX86Desc;LLVMX86Disassembler;LLVMX86Info;LLVMBinaryFormat;LLVMCore;LLVMDemangle;LLVMLTO;LLVMMC;LLVMObject;LLVMOption;LLVMPasses;LLVMSupport" +) + +if(CMAKE_VERSION VERSION_LESS 2.8.12) + message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.") +endif() + +# Load information for each installed configuration. +get_filename_component(_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) +file(GLOB CONFIG_FILES "${_DIR}/LLDTargets-*.cmake") +foreach(f ${CONFIG_FILES}) + include(${f}) +endforeach() + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(target ${_IMPORT_CHECK_TARGETS} ) + foreach(file ${_IMPORT_CHECK_FILES_FOR_${target}} ) + if(NOT EXISTS "${file}" ) + message(FATAL_ERROR "The imported target \"${target}\" references the file + \"${file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_IMPORT_CHECK_FILES_FOR_${target}) +endforeach() +unset(_IMPORT_CHECK_TARGETS) + +# Make sure the targets which have been exported in some other +# export set exist. +unset(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets) +foreach(_target "LLVMCodeGen" "LLVMCore" "LLVMDebugInfoDWARF" "LLVMDemangle" "LLVMMC" "LLVMOption" "LLVMSupport" "LLVMTarget" "LLVMBinaryFormat" "LLVMObject" "LLVMTextAPI" "LLVMARMCodeGen" "LLVMARMAsmParser" "LLVMARMDesc" "LLVMARMDisassembler" "LLVMARMInfo" "LLVMARMUtils" "LLVMAArch64CodeGen" "LLVMAArch64AsmParser" "LLVMAArch64Desc" "LLVMAArch64Disassembler" "LLVMAArch64Info" "LLVMAArch64Utils" "LLVMX86CodeGen" "LLVMX86AsmParser" "LLVMX86Desc" "LLVMX86Disassembler" "LLVMX86Info" "LLVMDebugInfoCodeView" "LLVMDebugInfoMSF" "LLVMDebugInfoPDB" "LLVMLibDriver" "LLVMLTO" "LLVMPasses" "LLVMWindowsManifest" "LLVMBitWriter" ) + if(NOT TARGET "${_target}" ) + set(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets "${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets} ${_target}") + endif() +endforeach() + +if(DEFINED ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets) + if(CMAKE_FIND_PACKAGE_NAME) + set( ${CMAKE_FIND_PACKAGE_NAME}_FOUND FALSE) + set( ${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE "The following imported targets are referenced, but are missing: ${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets}") + else() + message(FATAL_ERROR "The following imported targets are referenced, but are missing: ${${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets}") + endif() +endif() +unset(${CMAKE_FIND_PACKAGE_NAME}_NOT_FOUND_MESSAGE_targets) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/lib/cmake/llvm/AddLLVM.cmake b/lib/cmake/llvm/AddLLVM.cmake index fce36ba..97c9980 100644 --- a/lib/cmake/llvm/AddLLVM.cmake +++ b/lib/cmake/llvm/AddLLVM.cmake @@ -90,6 +90,9 @@ function(add_llvm_symbol_exports target_name export_file) set_property(TARGET ${target_name} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,-exported_symbols_list,\"${CMAKE_CURRENT_BINARY_DIR}/${native_export_file}\"") elseif(${CMAKE_SYSTEM_NAME} MATCHES "AIX") + # FIXME: `-Wl,-bE:` bypasses whatever handling there is in the build + # compiler driver to defer to the specified export list. + set(native_export_file "${export_file}") set_property(TARGET ${target_name} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,-bE:${export_file}") elseif(LLVM_HAVE_LINK_VERSION_SCRIPT) @@ -117,7 +120,7 @@ function(add_llvm_symbol_exports target_name export_file) set(native_export_file "${target_name}.def") add_custom_command(OUTPUT ${native_export_file} - COMMAND ${PYTHON_EXECUTABLE} -c "import sys;print(''.join(['EXPORTS\\n']+sys.stdin.readlines(),))" + COMMAND "${Python3_EXECUTABLE}" -c "import sys;print(''.join(['EXPORTS\\n']+sys.stdin.readlines(),))" < ${export_file} > ${native_export_file} DEPENDS ${export_file} VERBATIM @@ -162,49 +165,54 @@ function(add_llvm_symbol_exports target_name export_file) set(LLVM_COMMON_DEPENDS ${LLVM_COMMON_DEPENDS} PARENT_SCOPE) endfunction(add_llvm_symbol_exports) -if(APPLE) - execute_process( - COMMAND "${CMAKE_LINKER}" -v - ERROR_VARIABLE stderr - ) - set(LLVM_LINKER_DETECTED YES) - if("${stderr}" MATCHES "PROJECT:ld64") - set(LLVM_LINKER_IS_LD64 YES) - message(STATUS "Linker detection: ld64") - else() - set(LLVM_LINKER_DETECTED NO) - message(STATUS "Linker detection: unknown") - endif() -elseif(NOT WIN32) - # Detect what linker we have here - if( LLVM_USE_LINKER ) - set(command ${CMAKE_C_COMPILER} -fuse-ld=${LLVM_USE_LINKER} -Wl,--version) - else() - separate_arguments(flags UNIX_COMMAND "${CMAKE_EXE_LINKER_FLAGS}") - set(command ${CMAKE_C_COMPILER} ${flags} -Wl,--version) - endif() - execute_process( - COMMAND ${command} - OUTPUT_VARIABLE stdout - ERROR_VARIABLE stderr - ) - set(LLVM_LINKER_DETECTED YES) - if("${stdout}" MATCHES "GNU gold") - set(LLVM_LINKER_IS_GOLD YES) - message(STATUS "Linker detection: GNU Gold") - elseif("${stdout}" MATCHES "^LLD") - set(LLVM_LINKER_IS_LLD YES) - message(STATUS "Linker detection: LLD") - elseif("${stdout}" MATCHES "GNU ld") - set(LLVM_LINKER_IS_GNULD YES) - message(STATUS "Linker detection: GNU ld") - elseif("${stderr}" MATCHES "Solaris Link Editors" OR - "${stdout}" MATCHES "Solaris Link Editors") - set(LLVM_LINKER_IS_SOLARISLD YES) - message(STATUS "Linker detection: Solaris ld") - else() - set(LLVM_LINKER_DETECTED NO) - message(STATUS "Linker detection: unknown") +if (NOT DEFINED LLVM_LINKER_DETECTED) + if(APPLE) + execute_process( + COMMAND "${CMAKE_LINKER}" -v + ERROR_VARIABLE stderr + ) + if("${stderr}" MATCHES "PROJECT:ld64") + set(LLVM_LINKER_DETECTED YES CACHE INTERNAL "") + set(LLVM_LINKER_IS_LD64 YES CACHE INTERNAL "") + message(STATUS "Linker detection: ld64") + else() + set(LLVM_LINKER_DETECTED NO CACHE INTERNAL "") + message(STATUS "Linker detection: unknown") + endif() + elseif(NOT WIN32) + # Detect what linker we have here + if( LLVM_USE_LINKER ) + set(command ${CMAKE_C_COMPILER} -fuse-ld=${LLVM_USE_LINKER} -Wl,--version) + else() + separate_arguments(flags UNIX_COMMAND "${CMAKE_EXE_LINKER_FLAGS}") + set(command ${CMAKE_C_COMPILER} ${flags} -Wl,--version) + endif() + execute_process( + COMMAND ${command} + OUTPUT_VARIABLE stdout + ERROR_VARIABLE stderr + ) + if("${stdout}" MATCHES "GNU gold") + set(LLVM_LINKER_DETECTED YES CACHE INTERNAL "") + set(LLVM_LINKER_IS_GOLD YES CACHE INTERNAL "") + message(STATUS "Linker detection: GNU Gold") + elseif("${stdout}" MATCHES "^LLD") + set(LLVM_LINKER_DETECTED YES CACHE INTERNAL "") + set(LLVM_LINKER_IS_LLD YES CACHE INTERNAL "") + message(STATUS "Linker detection: LLD") + elseif("${stdout}" MATCHES "GNU ld") + set(LLVM_LINKER_DETECTED YES CACHE INTERNAL "") + set(LLVM_LINKER_IS_GNULD YES CACHE INTERNAL "") + message(STATUS "Linker detection: GNU ld") + elseif("${stderr}" MATCHES "Solaris Link Editors" OR + "${stdout}" MATCHES "Solaris Link Editors") + set(LLVM_LINKER_DETECTED YES CACHE INTERNAL "") + set(LLVM_LINKER_IS_SOLARISLD YES CACHE INTERNAL "") + message(STATUS "Linker detection: Solaris ld") + else() + set(LLVM_LINKER_DETECTED NO CACHE INTERNAL "") + message(STATUS "Linker detection: unknown") + endif() endif() endif() @@ -215,33 +223,27 @@ function(add_link_opts target_name) # Pass -O3 to the linker. This enabled different optimizations on different # linkers. - if(NOT (${CMAKE_SYSTEM_NAME} MATCHES "Darwin|SunOS|AIX" OR WIN32)) + if(NOT (CMAKE_SYSTEM_NAME MATCHES "Darwin|SunOS|AIX|OS390" OR WIN32)) set_property(TARGET ${target_name} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,-O3") endif() - if(LLVM_LINKER_IS_GOLD) - # With gold gc-sections is always safe. - set_property(TARGET ${target_name} APPEND_STRING PROPERTY - LINK_FLAGS " -Wl,--gc-sections") - # Note that there is a bug with -Wl,--icf=safe so it is not safe - # to enable. See https://sourceware.org/bugzilla/show_bug.cgi?id=17704. - endif() - if(NOT LLVM_NO_DEAD_STRIP) if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") # ld64's implementation of -dead_strip breaks tools that use plugins. set_property(TARGET ${target_name} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,-dead_strip") elseif(${CMAKE_SYSTEM_NAME} MATCHES "SunOS") - set_property(TARGET ${target_name} APPEND_STRING PROPERTY - LINK_FLAGS " -Wl,-z -Wl,discard-unused=sections") - elseif(NOT WIN32 AND NOT LLVM_LINKER_IS_GOLD AND - NOT ${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD|AIX") - # Object files are compiled with -ffunction-data-sections. - # Versions of bfd ld < 2.23.1 have a bug in --gc-sections that breaks - # tools that use plugins. Always pass --gc-sections once we require - # a newer linker. + # Support for ld -z discard-unused=sections was only added in + # Solaris 11.4. + include(CheckLinkerFlag) + check_linker_flag("-Wl,-z,discard-unused=sections" LINKER_SUPPORTS_Z_DISCARD_UNUSED) + if (LINKER_SUPPORTS_Z_DISCARD_UNUSED) + set_property(TARGET ${target_name} APPEND_STRING PROPERTY + LINK_FLAGS " -Wl,-z,discard-unused=sections") + endif() + elseif(NOT WIN32 AND NOT CMAKE_SYSTEM_NAME MATCHES "OpenBSD|AIX|OS390") + # TODO Revisit this later on z/OS. set_property(TARGET ${target_name} APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--gc-sections") endif() @@ -252,6 +254,11 @@ function(add_link_opts target_name) endif() endif() endif() + + if(ARG_SUPPORT_PLUGINS AND ${CMAKE_SYSTEM_NAME} MATCHES "AIX") + set_property(TARGET ${target_name} APPEND_STRING PROPERTY + LINK_FLAGS " -Wl,-brtl") + endif() endfunction(add_link_opts) # Set each output directory according to ${CMAKE_CONFIGURATION_TYPES}. @@ -404,7 +411,7 @@ endfunction(set_windows_version_resource_properties) # ) function(llvm_add_library name) cmake_parse_arguments(ARG - "MODULE;SHARED;STATIC;OBJECT;DISABLE_LLVM_LINK_LLVM_DYLIB;SONAME;NO_INSTALL_RPATH;COMPONENT_LIB;ENABLE_PLUGINS" + "MODULE;SHARED;STATIC;OBJECT;DISABLE_LLVM_LINK_LLVM_DYLIB;SONAME;NO_INSTALL_RPATH;COMPONENT_LIB" "OUTPUT_NAME;PLUGIN_TOOL;ENTITLEMENTS;BUNDLE_PATH" "ADDITIONAL_HEADERS;DEPENDS;LINK_COMPONENTS;LINK_LIBS;OBJLIBS" ${ARGN}) @@ -418,9 +425,6 @@ function(llvm_add_library name) else() llvm_process_sources(ALL_FILES ${ARG_UNPARSED_ARGUMENTS} ${ARG_ADDITIONAL_HEADERS}) endif() - if(ARG_ENABLE_PLUGINS) - set_property(GLOBAL APPEND PROPERTY LLVM_PLUGIN_TARGETS ${name}) - endif() if(ARG_MODULE) if(ARG_SHARED OR ARG_STATIC) @@ -465,6 +469,26 @@ function(llvm_add_library name) if(ARG_DEPENDS) add_dependencies(${obj_name} ${ARG_DEPENDS}) endif() + # Treat link libraries like PUBLIC dependencies. LINK_LIBS might + # result in generating header files. Add a dependendency so that + # the generated header is created before this object library. + if(ARG_LINK_LIBS) + cmake_parse_arguments(LINK_LIBS_ARG + "" + "" + "PUBLIC;PRIVATE" + ${ARG_LINK_LIBS}) + foreach(link_lib ${LINK_LIBS_ARG_PUBLIC}) + if(LLVM_PTHREAD_LIB) + # Can't specify a dependence on -lpthread + if(NOT ${link_lib} STREQUAL ${LLVM_PTHREAD_LIB}) + add_dependencies(${obj_name} ${link_lib}) + endif() + else() + add_dependencies(${obj_name} ${link_lib}) + endif() + endforeach() + endif() endif() if(ARG_SHARED AND ARG_STATIC) @@ -532,7 +556,7 @@ function(llvm_add_library name) endif() if(ARG_SHARED) - if(WIN32) + if(MSVC) set_target_properties(${name} PROPERTIES PREFIX "" ) @@ -579,6 +603,13 @@ function(llvm_add_library name) endif() endif() + if(ARG_STATIC) + set(libtype PUBLIC) + else() + # We can use PRIVATE since SO knows its dependent libs. + set(libtype PRIVATE) + endif() + if(ARG_MODULE AND LLVM_EXPORT_SYMBOLS_FOR_PLUGINS AND ARG_PLUGIN_TOOL AND (WIN32 OR CYGWIN)) # On DLL platforms symbols are imported from the tool by linking against it. set(llvm_libs ${ARG_PLUGIN_TOOL}) @@ -593,19 +624,19 @@ function(llvm_add_library name) endif() else() # Components have not been defined explicitly in CMake, so add the - # dependency information for this library as defined by LLVMBuild. + # dependency information for this library through their name, and let + # LLVMBuildResolveComponentsLink resolve the mapping. # # It would be nice to verify that we have the dependencies for this library # name, but using get_property(... SET) doesn't suffice to determine if a # property has been set to an empty value. - get_property(lib_deps GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_${name}) - endif() + set_property(TARGET ${name} PROPERTY LLVM_LINK_COMPONENTS ${ARG_LINK_COMPONENTS} ${LLVM_LINK_COMPONENTS}) - if(ARG_STATIC) - set(libtype INTERFACE) - else() - # We can use PRIVATE since SO knows its dependent libs. - set(libtype PRIVATE) + # These two properties are internal properties only used to make sure the + # link step applied in LLVMBuildResolveComponentsLink uses the same + # properties as the target_link_libraries call below. + set_property(TARGET ${name} PROPERTY LLVM_LINK_LIBS ${ARG_LINK_LIBS}) + set_property(TARGET ${name} PROPERTY LLVM_LIBTYPE ${libtype}) endif() target_link_libraries(${name} ${libtype} @@ -686,8 +717,49 @@ function(add_llvm_install_targets target) endif() endfunction() +# Define special targets that behave like a component group. They don't have any +# source attached but other components can add themselves to them. If the +# component supports is a Target and it supports JIT compilation, HAS_JIT must +# be passed. One can use ADD_TO_COMPONENT option from add_llvm_component_library +# to link extra component into an existing group. +function(add_llvm_component_group name) + cmake_parse_arguments(ARG "HAS_JIT" "" "LINK_COMPONENTS" ${ARGN}) + add_custom_target(${name}) + if(ARG_HAS_JIT) + set_property(TARGET ${name} PROPERTY COMPONENT_HAS_JIT ON) + endif() + if(ARG_LINK_COMPONENTS) + set_property(TARGET ${name} PROPERTY LLVM_LINK_COMPONENTS ${ARG_LINK_COMPONENTS}) + endif() +endfunction() + +# An LLVM component is a cmake target with the following cmake properties +# eventually set: +# - LLVM_COMPONENT_NAME: the name of the component, which can be the name of +# the associated library or the one specified through COMPONENT_NAME +# - LLVM_LINK_COMPONENTS: a list of component this component depends on +# - COMPONENT_HAS_JIT: (only for group component) whether this target group +# supports JIT compilation +# Additionnaly, the ADD_TO_COMPONENT <component> option make it possible to add this +# component to the LLVM_LINK_COMPONENTS of <component>. function(add_llvm_component_library name) - add_llvm_library(${name} COMPONENT_LIB ${ARGN}) + cmake_parse_arguments(ARG + "" + "COMPONENT_NAME;ADD_TO_COMPONENT" + "" + ${ARGN}) + add_llvm_library(${name} COMPONENT_LIB ${ARG_UNPARSED_ARGUMENTS}) + string(REGEX REPLACE "^LLVM" "" component_name ${name}) + set_property(TARGET ${name} PROPERTY LLVM_COMPONENT_NAME ${component_name}) + + if(ARG_COMPONENT_NAME) + set_property(GLOBAL PROPERTY LLVM_COMPONENT_NAME_${ARG_COMPONENT_NAME} ${component_name}) + endif() + + if(ARG_ADD_TO_COMPONENT) + set_property(TARGET ${ARG_ADD_TO_COMPONENT} APPEND PROPERTY LLVM_LINK_COMPONENTS ${component_name}) + endif() + endfunction() macro(add_llvm_library name) @@ -753,7 +825,7 @@ endmacro(add_llvm_library name) macro(add_llvm_executable name) cmake_parse_arguments(ARG - "DISABLE_LLVM_LINK_LLVM_DYLIB;IGNORE_EXTERNALIZE_DEBUGINFO;NO_INSTALL_RPATH;SUPPORT_PLUGINS;ENABLE_PLUGINS" + "DISABLE_LLVM_LINK_LLVM_DYLIB;IGNORE_EXTERNALIZE_DEBUGINFO;NO_INSTALL_RPATH;SUPPORT_PLUGINS" "ENTITLEMENTS;BUNDLE_PATH" "DEPENDS" ${ARGN}) @@ -793,6 +865,13 @@ macro(add_llvm_executable name) if(NOT ARG_NO_INSTALL_RPATH) llvm_setup_rpath(${name}) + elseif(NOT "${LLVM_LOCAL_RPATH}" STREQUAL "") + # Enable BUILD_WITH_INSTALL_RPATH unless CMAKE_BUILD_RPATH is set. + if("${CMAKE_BUILD_RPATH}" STREQUAL "") + set_property(TARGET ${name} PROPERTY BUILD_WITH_INSTALL_RPATH ON) + endif() + + set_property(TARGET ${name} PROPERTY INSTALL_RPATH "${LLVM_LOCAL_RPATH}") endif() if(DEFINED windows_resource_file) @@ -840,9 +919,6 @@ macro(add_llvm_executable name) # API for all shared libaries loaded by this executable. target_link_libraries(${name} PRIVATE ${LLVM_PTHREAD_LIB}) endif() - if(ARG_ENABLE_PLUGINS) - set_property(GLOBAL APPEND PROPERTY LLVM_PLUGIN_TARGETS ${name}) - endif() llvm_codesign(${name} ENTITLEMENTS ${ARG_ENTITLEMENTS} BUNDLE_PATH ${ARG_BUNDLE_PATH}) endmacro(add_llvm_executable name) @@ -854,14 +930,31 @@ endmacro(add_llvm_executable name) # # If NO_MODULE is specified, when option LLVM_${name_upper}_LINK_INTO_TOOLS is set to OFF, # only an object library is built, and no module is built. This is specific to the Polly use case. +# +# The SUBPROJECT argument contains the LLVM project the plugin belongs +# to. If set, the plugin will link statically by default it if the +# project was enabled. function(add_llvm_pass_plugin name) cmake_parse_arguments(ARG - "NO_MODULE" "" "" + "NO_MODULE" "SUBPROJECT" "" ${ARGN}) string(TOUPPER ${name} name_upper) - option(LLVM_${name_upper}_LINK_INTO_TOOLS "Statically link ${name} into tools (if available)" OFF) + # Enable the plugin by default if it was explicitly enabled by the user. + # Note: If was set to "all", LLVM's CMakeLists.txt replaces it with a + # list of all projects, counting as explicitly enabled. + set(link_into_tools_default OFF) + if (ARG_SUBPROJECT AND LLVM_TOOL_${name_upper}_BUILD) + set(link_into_tools_default ON) + endif() + option(LLVM_${name_upper}_LINK_INTO_TOOLS "Statically link ${name} into tools (if available)" ${link_into_tools_default}) + + # If we statically link the plugin, don't use llvm dylib because we're going + # to be part of it. + if(LLVM_${name_upper}_LINK_INTO_TOOLS) + list(APPEND ARG_UNPARSED_ARGUMENTS DISABLE_LLVM_LINK_LLVM_DYLIB) + endif() if(LLVM_${name_upper}_LINK_INTO_TOOLS) list(REMOVE_ITEM ARG_UNPARSED_ARGUMENTS BUILDTREE_ONLY) @@ -873,53 +966,129 @@ function(add_llvm_pass_plugin name) if (TARGET intrinsics_gen) add_dependencies(obj.${name} intrinsics_gen) endif() - message(STATUS "Registering ${name} as a pass plugin (static build: ${LLVM_${name_upper}_LINK_INTO_TOOLS})") - set_property(GLOBAL APPEND PROPERTY LLVM_COMPILE_EXTENSIONS ${name}) + if (TARGET omp_gen) + add_dependencies(obj.${name} omp_gen) + endif() + if (TARGET acc_gen) + add_dependencies(obj.${name} acc_gen) + endif() + set_property(GLOBAL APPEND PROPERTY LLVM_STATIC_EXTENSIONS ${name}) elseif(NOT ARG_NO_MODULE) add_llvm_library(${name} MODULE ${ARG_UNPARSED_ARGUMENTS}) else() add_llvm_library(${name} OBJECT ${ARG_UNPARSED_ARGUMENTS}) endif() + message(STATUS "Registering ${name} as a pass plugin (static build: ${LLVM_${name_upper}_LINK_INTO_TOOLS})") endfunction(add_llvm_pass_plugin) -# Generate X Macro file for extension handling. It provides a -# HANDLE_EXTENSION(extension_namespace, ExtensionProject) call for each extension -# allowing client code to define HANDLE_EXTENSION to have a specific code be run for -# each extension. +# process_llvm_pass_plugins([GEN_CONFIG]) +# +# Correctly set lib dependencies between plugins and tools, based on tools +# registered with the ENABLE_PLUGINS option. +# +# if GEN_CONFIG option is set, also generate X Macro file for extension +# handling. It provides a HANDLE_EXTENSION(extension_namespace, ExtensionProject) +# call for each extension allowing client code to define +# HANDLE_EXTENSION to have a specific code be run for each extension. # -# Also correctly set lib dependencies between plugins and tools. function(process_llvm_pass_plugins) - get_property(LLVM_EXTENSIONS GLOBAL PROPERTY LLVM_COMPILE_EXTENSIONS) - file(WRITE "${LLVM_BINARY_DIR}/include/llvm/Support/Extension.def.tmp" "//extension handlers\n") - foreach(llvm_extension ${LLVM_EXTENSIONS}) - string(TOLOWER ${llvm_extension} llvm_extension_lower) - - string(TOUPPER ${llvm_extension} llvm_extension_upper) - string(SUBSTRING ${llvm_extension_upper} 0 1 llvm_extension_upper_first) - string(SUBSTRING ${llvm_extension_lower} 1 -1 llvm_extension_lower_tail) - string(CONCAT llvm_extension_project ${llvm_extension_upper_first} ${llvm_extension_lower_tail}) - - if(LLVM_${llvm_extension_upper}_LINK_INTO_TOOLS) - file(APPEND "${LLVM_BINARY_DIR}/include/llvm/Support/Extension.def.tmp" "HANDLE_EXTENSION(${llvm_extension_project})\n") - - get_property(llvm_plugin_targets GLOBAL PROPERTY LLVM_PLUGIN_TARGETS) - foreach(llvm_plugin_target ${llvm_plugin_targets}) - set_property(TARGET ${llvm_plugin_target} APPEND PROPERTY LINK_LIBRARIES ${llvm_extension}) - set_property(TARGET ${llvm_plugin_target} APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${llvm_extension}) - endforeach() - else() - add_llvm_library(${llvm_extension_lower} MODULE obj.${llvm_extension_lower}) - endif() + cmake_parse_arguments(ARG + "GEN_CONFIG" "" "" + ${ARGN}) + if(ARG_GEN_CONFIG) + get_property(LLVM_STATIC_EXTENSIONS GLOBAL PROPERTY LLVM_STATIC_EXTENSIONS) + else() + include(LLVMConfigExtensions) + endif() + + # Add static plugins to the Extension component + foreach(llvm_extension ${LLVM_STATIC_EXTENSIONS}) + set_property(TARGET LLVMExtensions APPEND PROPERTY LINK_LIBRARIES ${llvm_extension}) + set_property(TARGET LLVMExtensions APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${llvm_extension}) endforeach() - file(APPEND "${LLVM_BINARY_DIR}/include/llvm/Support/Extension.def.tmp" "#undef HANDLE_EXTENSION\n") - # only replace if there's an actual change - execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different - "${LLVM_BINARY_DIR}/include/llvm/Support/Extension.def.tmp" - "${LLVM_BINARY_DIR}/include/llvm/Support/Extension.def") - file(REMOVE "${LLVM_BINARY_DIR}/include/llvm/Support/Extension.def.tmp") + # Eventually generate the extension headers, and store config to a cmake file + # for usage in third-party configuration. + if(ARG_GEN_CONFIG) + + ## Part 1: Extension header to be included whenever we need extension + # processing. + set(LLVM_INSTALL_PACKAGE_DIR lib${LLVM_LIBDIR_SUFFIX}/cmake/llvm) + set(llvm_cmake_builddir "${LLVM_BINARY_DIR}/${LLVM_INSTALL_PACKAGE_DIR}") + file(WRITE + "${llvm_cmake_builddir}/LLVMConfigExtensions.cmake" + "set(LLVM_STATIC_EXTENSIONS ${LLVM_STATIC_EXTENSIONS})") + install(FILES + ${llvm_cmake_builddir}/LLVMConfigExtensions.cmake + DESTINATION ${LLVM_INSTALL_PACKAGE_DIR} + COMPONENT cmake-exports) + + set(ExtensionDef "${LLVM_BINARY_DIR}/include/llvm/Support/Extension.def") + file(WRITE "${ExtensionDef}.tmp" "//extension handlers\n") + foreach(llvm_extension ${LLVM_STATIC_EXTENSIONS}) + file(APPEND "${ExtensionDef}.tmp" "HANDLE_EXTENSION(${llvm_extension})\n") + endforeach() + file(APPEND "${ExtensionDef}.tmp" "#undef HANDLE_EXTENSION\n") + + # only replace if there's an actual change + execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${ExtensionDef}.tmp" + "${ExtensionDef}") + file(REMOVE "${ExtensionDef}.tmp") + + ## Part 2: Extension header that captures each extension dependency, to be + # used by llvm-config. + set(ExtensionDeps "${LLVM_BINARY_DIR}/tools/llvm-config/ExtensionDependencies.inc") + + # Max needed to correctly size the required library array. + set(llvm_plugin_max_deps_length 0) + foreach(llvm_extension ${LLVM_STATIC_EXTENSIONS}) + get_property(llvm_plugin_deps TARGET ${llvm_extension} PROPERTY LINK_LIBRARIES) + list(LENGTH llvm_plugin_deps llvm_plugin_deps_length) + if(llvm_plugin_deps_length GREATER llvm_plugin_max_deps_length) + set(llvm_plugin_max_deps_length ${llvm_plugin_deps_length}) + endif() + endforeach() + + list(LENGTH LLVM_STATIC_EXTENSIONS llvm_static_extension_count) + file(WRITE + "${ExtensionDeps}.tmp" + "#include <array>\n\ + struct ExtensionDescriptor {\n\ + const char* Name;\n\ + const char* RequiredLibraries[1 + 1 + ${llvm_plugin_max_deps_length}];\n\ + };\n\ + std::array<ExtensionDescriptor, ${llvm_static_extension_count}> AvailableExtensions{\n") + + foreach(llvm_extension ${LLVM_STATIC_EXTENSIONS}) + get_property(llvm_plugin_deps TARGET ${llvm_extension} PROPERTY LINK_LIBRARIES) + + file(APPEND "${ExtensionDeps}.tmp" "ExtensionDescriptor{\"${llvm_extension}\", {") + foreach(llvm_plugin_dep ${llvm_plugin_deps}) + # Turn library dependency back to component name, if possible. + # That way llvm-config can avoid redundant dependencies. + STRING(REGEX REPLACE "^-l" "" plugin_dep_name ${llvm_plugin_dep}) + STRING(REGEX MATCH "^LLVM" is_llvm_library ${plugin_dep_name}) + if(is_llvm_library) + STRING(REGEX REPLACE "^LLVM" "" plugin_dep_name ${plugin_dep_name}) + STRING(TOLOWER ${plugin_dep_name} plugin_dep_name) + endif() + file(APPEND "${ExtensionDeps}.tmp" "\"${plugin_dep_name}\", ") + endforeach() + + # Self + mandatory trailing null, because the number of RequiredLibraries differs between extensions. + file(APPEND "${ExtensionDeps}.tmp" \"${llvm_extension}\", "nullptr}},\n") + endforeach() + file(APPEND "${ExtensionDeps}.tmp" "};\n") + + # only replace if there's an actual change + execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${ExtensionDeps}.tmp" + "${ExtensionDeps}") + file(REMOVE "${ExtensionDeps}.tmp") + endif() endfunction() function(export_executable_symbols target) @@ -966,7 +1135,7 @@ function(export_executable_symbols target) set(mangling itanium) endif() add_custom_command(OUTPUT ${exported_symbol_file} - COMMAND ${PYTHON_EXECUTABLE} ${LLVM_MAIN_SRC_DIR}/utils/extract_symbols.py --mangling=${mangling} ${static_libs} -o ${exported_symbol_file} + COMMAND "${Python3_EXECUTABLE}" ${LLVM_MAIN_SRC_DIR}/utils/extract_symbols.py --mangling=${mangling} ${static_libs} -o ${exported_symbol_file} WORKING_DIRECTORY ${LLVM_LIBRARY_OUTPUT_INTDIR} DEPENDS ${LLVM_MAIN_SRC_DIR}/utils/extract_symbols.py ${static_libs} VERBATIM @@ -995,9 +1164,17 @@ function(export_executable_symbols target) endif() endfunction() +# Export symbols if LLVM plugins are enabled. +function(export_executable_symbols_for_plugins target) + if(LLVM_ENABLE_PLUGINS OR LLVM_EXPORT_SYMBOLS_FOR_PLUGINS) + export_executable_symbols(${target}) + endif() +endfunction() + if(NOT LLVM_TOOLCHAIN_TOOLS) set (LLVM_TOOLCHAIN_TOOLS llvm-ar + llvm-cov llvm-cxxfilt llvm-ranlib llvm-lib @@ -1090,7 +1267,7 @@ macro(add_llvm_utility name) add_llvm_executable(${name} DISABLE_LLVM_LINK_LLVM_DYLIB ${ARGN}) set_target_properties(${name} PROPERTIES FOLDER "Utils") - if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) + if ( ${name} IN_LIST LLVM_TOOLCHAIN_UTILITIES OR NOT LLVM_INSTALL_TOOLCHAIN_ONLY) if (LLVM_INSTALL_UTILS AND LLVM_BUILD_UTILS) set(export_to_llvmexports) if (${name} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR @@ -1264,19 +1441,6 @@ function(add_unittest test_suite test_name) set(EXCLUDE_FROM_ALL ON) endif() - # Our current version of gtest does not properly recognize C++11 support - # with MSVC, so it falls back to tr1 / experimental classes. Since LLVM - # itself requires C++11, we can safely force it on unconditionally so that - # we don't have to fight with the buggy gtest check. - add_definitions(-DGTEST_LANG_CXX11=1) - add_definitions(-DGTEST_HAS_TR1_TUPLE=0) - - include_directories(${LLVM_MAIN_SRC_DIR}/utils/unittest/googletest/include) - include_directories(${LLVM_MAIN_SRC_DIR}/utils/unittest/googlemock/include) - if (NOT LLVM_ENABLE_THREADS) - list(APPEND LLVM_COMPILE_DEFINITIONS GTEST_HAS_PTHREAD=0) - endif () - if (SUPPORTS_VARIADIC_MACROS_FLAG) list(APPEND LLVM_COMPILE_FLAGS "-Wno-variadic-macros") endif () @@ -1298,7 +1462,7 @@ function(add_unittest test_suite test_name) add_dependencies(${test_suite} ${test_name}) get_target_property(test_suite_folder ${test_suite} FOLDER) - if (NOT ${test_suite_folder} STREQUAL "NOTFOUND") + if (test_suite_folder) set_property(TARGET ${test_name} PROPERTY FOLDER "${test_suite_folder}") endif () endfunction() @@ -1327,36 +1491,6 @@ function(add_benchmark benchmark_name) target_link_libraries(${benchmark_name} PRIVATE benchmark) endfunction() -function(llvm_add_go_executable binary pkgpath) - cmake_parse_arguments(ARG "ALL" "" "DEPENDS;GOFLAGS" ${ARGN}) - - if(LLVM_BINDINGS MATCHES "go") - # FIXME: This should depend only on the libraries Go needs. - get_property(llvmlibs GLOBAL PROPERTY LLVM_LIBS) - set(binpath ${CMAKE_BINARY_DIR}/bin/${binary}${CMAKE_EXECUTABLE_SUFFIX}) - set(cc "${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}") - set(cxx "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1}") - set(cppflags "") - get_property(include_dirs DIRECTORY PROPERTY INCLUDE_DIRECTORIES) - foreach(d ${include_dirs}) - set(cppflags "${cppflags} -I${d}") - endforeach(d) - set(ldflags "${CMAKE_EXE_LINKER_FLAGS}") - add_custom_command(OUTPUT ${binpath} - COMMAND ${CMAKE_BINARY_DIR}/bin/llvm-go "go=${GO_EXECUTABLE}" "cc=${cc}" "cxx=${cxx}" "cppflags=${cppflags}" "ldflags=${ldflags}" "packages=${LLVM_GO_PACKAGES}" - ${ARG_GOFLAGS} build -o ${binpath} ${pkgpath} - DEPENDS llvm-config ${CMAKE_BINARY_DIR}/bin/llvm-go${CMAKE_EXECUTABLE_SUFFIX} - ${llvmlibs} ${ARG_DEPENDS} - COMMENT "Building Go executable ${binary}" - VERBATIM) - if (ARG_ALL) - add_custom_target(${binary} ALL DEPENDS ${binpath}) - else() - add_custom_target(${binary} DEPENDS ${binpath}) - endif() - endif() -endfunction() - # This function canonicalize the CMake variables passed by names # from CMake boolean to 0/1 suitable for passing into Python or C++, # in place. @@ -1379,13 +1513,63 @@ macro(set_llvm_build_mode) endif () endmacro() +# Takes a list of path names in pathlist and a base directory, and returns +# a list of paths relative to the base directory in out_pathlist. +# Paths that are on a different drive than the basedir (on Windows) or that +# contain symlinks are returned absolute. +# Use with LLVM_LIT_PATH_FUNCTION below. +function(make_paths_relative out_pathlist basedir pathlist) + # Passing ARG_PATH_VALUES as-is to execute_process() makes cmake strip + # empty list entries. So escape the ;s in the list and do the splitting + # ourselves. cmake has no relpath function, so use Python for that. + string(REPLACE ";" "\\;" pathlist_escaped "${pathlist}") + execute_process(COMMAND "${Python3_EXECUTABLE}" "-c" "\n +import os, sys\n +base = sys.argv[1] +def haslink(p):\n + if not p or p == os.path.dirname(p): return False\n + return os.path.islink(p) or haslink(os.path.dirname(p))\n +def relpath(p):\n + if not p: return ''\n + if os.path.splitdrive(p)[0] != os.path.splitdrive(base)[0]: return p\n + if haslink(p) or haslink(base): return p\n + return os.path.relpath(p, base)\n +if len(sys.argv) < 3: sys.exit(0)\n +sys.stdout.write(';'.join(relpath(p) for p in sys.argv[2].split(';')))" + ${basedir} + ${pathlist_escaped} + OUTPUT_VARIABLE pathlist_relative + ERROR_VARIABLE error + RESULT_VARIABLE result) + if (NOT result EQUAL 0) + message(FATAL_ERROR "make_paths_relative() failed due to error '${result}', with stderr\n${error}") + endif() + set(${out_pathlist} "${pathlist_relative}" PARENT_SCOPE) +endfunction() + +# Converts a file that's relative to the current python file to an absolute +# path. Since this uses __file__, it has to be emitted into python files that +# use it and can't be in a lit module. Use with make_paths_relative(). +string(CONCAT LLVM_LIT_PATH_FUNCTION + "# Allow generated file to be relocatable.\n" + "def path(p):\n" + " if not p: return ''\n" + " return os.path.join(os.path.dirname(os.path.abspath(__file__)), p)\n" + ) + # This function provides an automatic way to 'configure'-like generate a file # based on a set of common and custom variables, specifically targeting the # variables needed for the 'lit.site.cfg' files. This function bundles the # common variables that any Lit instance is likely to need, and custom # variables can be passed in. +# The keyword PATHS is followed by a list of cmake variable names that are +# mentioned as `path("@varname@")` in the lit.cfg.py.in file. Variables in that +# list are treated as paths that are relative to the directory the generated +# lit.cfg.py file is in, and the `path()` function converts the relative +# path back to absolute form. This makes it possible to move a build directory +# containing lit.cfg.py files from one machine to another. function(configure_lit_site_cfg site_in site_out) - cmake_parse_arguments(ARG "" "" "MAIN_CONFIG;OUTPUT_MAPPING" ${ARGN}) + cmake_parse_arguments(ARG "" "" "MAIN_CONFIG;OUTPUT_MAPPING;PATHS" ${ARGN}) if ("${ARG_MAIN_CONFIG}" STREQUAL "") get_filename_component(INPUT_DIR ${site_in} DIRECTORY) @@ -1413,7 +1597,6 @@ function(configure_lit_site_cfg site_in site_out) # SHLIBDIR points the build tree. string(REPLACE "${CMAKE_CFG_INTDIR}" "${LLVM_BUILD_MODE}" SHLIBDIR "${LLVM_SHLIB_OUTPUT_INTDIR}") - set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE}) # FIXME: "ENABLE_SHARED" doesn't make sense, since it is used just for # plugins. We may rename it. if(LLVM_ENABLE_PLUGINS) @@ -1435,12 +1618,15 @@ function(configure_lit_site_cfg site_in site_out) set(HOST_CXX "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1}") set(HOST_LDFLAGS "${CMAKE_EXE_LINKER_FLAGS}") - set(LIT_SITE_CFG_IN_HEADER "## Autogenerated from ${site_in}\n## Do not edit!") + string(CONCAT LIT_SITE_CFG_IN_HEADER + "# Autogenerated from ${site_in}\n# Do not edit!\n\n" + "${LLVM_LIT_PATH_FUNCTION}" + ) # Override config_target_triple (and the env) if(LLVM_TARGET_TRIPLE_ENV) # This is expanded into the heading. - string(CONCAT LIT_SITE_CFG_IN_HEADER "${LIT_SITE_CFG_IN_HEADER}\n\n" + string(CONCAT LIT_SITE_CFG_IN_HEADER "${LIT_SITE_CFG_IN_HEADER}" "import os\n" "target_env = \"${LLVM_TARGET_TRIPLE_ENV}\"\n" "config.target_triple = config.environment[target_env] = os.environ.get(target_env, \"${TARGET_TRIPLE}\")\n" @@ -1450,12 +1636,47 @@ function(configure_lit_site_cfg site_in site_out) set(TARGET_TRIPLE "\"+config.target_triple+\"") endif() + if (ARG_PATHS) + # Walk ARG_PATHS and collect the current value of the variables in there. + # list(APPEND) ignores empty elements exactly if the list is empty, + # so start the list with a dummy element and drop it, to make sure that + # even empty values make it into the values list. + set(ARG_PATH_VALUES "dummy") + foreach(path ${ARG_PATHS}) + list(APPEND ARG_PATH_VALUES "${${path}}") + endforeach() + list(REMOVE_AT ARG_PATH_VALUES 0) + + get_filename_component(OUTPUT_DIR ${site_out} DIRECTORY) + make_paths_relative( + ARG_PATH_VALUES_RELATIVE "${OUTPUT_DIR}" "${ARG_PATH_VALUES}") + + list(LENGTH ARG_PATHS len_paths) + list(LENGTH ARG_PATH_VALUES len_path_values) + list(LENGTH ARG_PATH_VALUES_RELATIVE len_path_value_rels) + if ((NOT ${len_paths} EQUAL ${len_path_values}) OR + (NOT ${len_paths} EQUAL ${len_path_value_rels})) + message(SEND_ERROR "PATHS lengths got confused") + endif() + + # Transform variables mentioned in ARG_PATHS to relative paths for + # the configure_file() call. Variables are copied to subscopeds by cmake, + # so this only modifies the local copy of the variables. + math(EXPR arg_path_limit "${len_paths} - 1") + foreach(i RANGE ${arg_path_limit}) + list(GET ARG_PATHS ${i} val1) + list(GET ARG_PATH_VALUES_RELATIVE ${i} val2) + set(${val1} ${val2}) + endforeach() + endif() + configure_file(${site_in} ${site_out} @ONLY) + if (EXISTS "${ARG_MAIN_CONFIG}") - set(PYTHON_STATEMENT "map_config('${ARG_MAIN_CONFIG}', '${site_out}')") - get_property(LLVM_LIT_CONFIG_MAP GLOBAL PROPERTY LLVM_LIT_CONFIG_MAP) - set(LLVM_LIT_CONFIG_MAP "${LLVM_LIT_CONFIG_MAP}\n${PYTHON_STATEMENT}") - set_property(GLOBAL PROPERTY LLVM_LIT_CONFIG_MAP ${LLVM_LIT_CONFIG_MAP}) + # Remember main config / generated site config for llvm-lit.in. + get_property(LLVM_LIT_CONFIG_FILES GLOBAL PROPERTY LLVM_LIT_CONFIG_FILES) + list(APPEND LLVM_LIT_CONFIG_FILES "${ARG_MAIN_CONFIG}" "${site_out}") + set_property(GLOBAL PROPERTY LLVM_LIT_CONFIG_FILES ${LLVM_LIT_CONFIG_FILES}) endif() endfunction() @@ -1482,8 +1703,9 @@ function(get_llvm_lit_path base_dir file_name) set(${file_name} ${LIT_FILE_NAME} PARENT_SCOPE) set(${base_dir} ${LIT_BASE_DIR} PARENT_SCOPE) return() - else() + elseif (NOT DEFINED CACHE{LLVM_EXTERNAL_LIT_MISSING_WARNED_ONCE}) message(WARNING "LLVM_EXTERNAL_LIT set to ${LLVM_EXTERNAL_LIT}, but the path does not exist.") + set(LLVM_EXTERNAL_LIT_MISSING_WARNED_ONCE YES CACHE INTERNAL "") endif() endif() endif() @@ -1533,7 +1755,7 @@ function(add_lit_target target comment) ALLOW_EXTERNAL ) - set(LIT_COMMAND "${PYTHON_EXECUTABLE};${lit_base_dir}/${lit_file_name}") + set(LIT_COMMAND "${Python3_EXECUTABLE};${lit_base_dir}/${lit_file_name}") list(APPEND LIT_COMMAND ${LIT_ARGS}) foreach(param ${ARG_PARAMS}) list(APPEND LIT_COMMAND --param ${param}) @@ -1560,10 +1782,10 @@ endfunction() # A function to add a set of lit test suites to be driven through 'check-*' targets. function(add_lit_testsuite target comment) - cmake_parse_arguments(ARG "" "" "PARAMS;DEPENDS;ARGS" ${ARGN}) + cmake_parse_arguments(ARG "EXCLUDE_FROM_CHECK_ALL" "" "PARAMS;DEPENDS;ARGS" ${ARGN}) # EXCLUDE_FROM_ALL excludes the test ${target} out of check-all. - if(NOT EXCLUDE_FROM_ALL) + if(NOT ARG_EXCLUDE_FROM_CHECK_ALL) # Register the testsuites, params and depends for the global check rule. set_property(GLOBAL APPEND PROPERTY LLVM_LIT_TESTSUITES ${ARG_UNPARSED_ARGUMENTS}) set_property(GLOBAL APPEND PROPERTY LLVM_LIT_PARAMS ${ARG_PARAMS}) @@ -1582,7 +1804,7 @@ endfunction() function(add_lit_testsuites project directory) if (NOT LLVM_ENABLE_IDE) - cmake_parse_arguments(ARG "" "" "PARAMS;DEPENDS;ARGS" ${ARGN}) + cmake_parse_arguments(ARG "EXCLUDE_FROM_CHECK_ALL" "" "PARAMS;DEPENDS;ARGS" ${ARGN}) # Search recursively for test directories by assuming anything not # in a directory called Inputs contains tests. @@ -1605,6 +1827,7 @@ function(add_lit_testsuites project directory) string(TOLOWER "${project}${name_dashes}" name_var) add_lit_target("check-${name_var}" "Running lit suite ${lit_suite}" ${lit_suite} + ${EXCLUDE_FROM_CHECK_ALL} PARAMS ${ARG_PARAMS} DEPENDS ${ARG_DEPENDS} ARGS ${ARG_ARGS} @@ -1849,9 +2072,10 @@ function(llvm_codesign name) set(ARG_BUNDLE_PATH $<TARGET_FILE:${name}>) endif() - if(ARG_FORCE) - set(force_flag "-f") - endif() + # ld64 now always codesigns the binaries it creates. Apply the force arg + # unconditionally so that we can - for example - add entitlements to the + # targets that need it. + set(force_flag "-f") add_custom_command( TARGET ${name} POST_BUILD @@ -1892,8 +2116,12 @@ function(llvm_setup_rpath name) return() endif() + # Enable BUILD_WITH_INSTALL_RPATH unless CMAKE_BUILD_RPATH is set. + if("${CMAKE_BUILD_RPATH}" STREQUAL "") + set_property(TARGET ${name} PROPERTY BUILD_WITH_INSTALL_RPATH ON) + endif() + set_target_properties(${name} PROPERTIES - BUILD_WITH_INSTALL_RPATH On INSTALL_RPATH "${_install_rpath}" ${_install_name_dir}) endfunction() @@ -1914,38 +2142,39 @@ function(setup_dependency_debugging name) set_target_properties(${name} PROPERTIES RULE_LAUNCH_COMPILE ${sandbox_command}) endfunction() +# If the sources at the given `path` are under version control, set `out_var` +# to the the path of a file which will be modified when the VCS revision +# changes, attempting to create that file if it does not exist; if no such +# file exists and one cannot be created, instead set `out_var` to the +# empty string. +# +# If the sources are not under version control, do not define `out_var`. function(find_first_existing_vc_file path out_var) if(NOT EXISTS "${path}") return() endif() - if(EXISTS "${path}/.svn") - set(svn_files - "${path}/.svn/wc.db" # SVN 1.7 - "${path}/.svn/entries" # SVN 1.6 - ) - foreach(file IN LISTS svn_files) - if(EXISTS "${file}") - set(${out_var} "${file}" PARENT_SCOPE) - return() - endif() - endforeach() - else() - find_package(Git) - if(GIT_FOUND) - execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --git-dir - WORKING_DIRECTORY ${path} - RESULT_VARIABLE git_result - OUTPUT_VARIABLE git_output - ERROR_QUIET) - if(git_result EQUAL 0) - string(STRIP "${git_output}" git_output) - get_filename_component(git_dir ${git_output} ABSOLUTE BASE_DIR ${path}) - # Some branchless cases (e.g. 'repo') may not yet have .git/logs/HEAD - if (NOT EXISTS "${git_dir}/logs/HEAD") - file(WRITE "${git_dir}/logs/HEAD" "") + find_package(Git) + if(GIT_FOUND) + execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --git-dir + WORKING_DIRECTORY ${path} + RESULT_VARIABLE git_result + OUTPUT_VARIABLE git_output + ERROR_QUIET) + if(git_result EQUAL 0) + string(STRIP "${git_output}" git_output) + get_filename_component(git_dir ${git_output} ABSOLUTE BASE_DIR ${path}) + # Some branchless cases (e.g. 'repo') may not yet have .git/logs/HEAD + if (NOT EXISTS "${git_dir}/logs/HEAD") + execute_process(COMMAND ${CMAKE_COMMAND} -E touch HEAD + WORKING_DIRECTORY "${git_dir}/logs" + RESULT_VARIABLE touch_head_result + ERROR_QUIET) + if (NOT touch_head_result EQUAL 0) + set(${out_var} "" PARENT_SCOPE) + return() endif() - set(${out_var} "${git_dir}/logs/HEAD" PARENT_SCOPE) endif() + set(${out_var} "${git_dir}/logs/HEAD" PARENT_SCOPE) endif() endif() endfunction() diff --git a/lib/cmake/llvm/AddSphinxTarget.cmake b/lib/cmake/llvm/AddSphinxTarget.cmake index 2bf654b..b5babb3 100644 --- a/lib/cmake/llvm/AddSphinxTarget.cmake +++ b/lib/cmake/llvm/AddSphinxTarget.cmake @@ -18,6 +18,7 @@ endif() # # ``project`` should be the project name function (add_sphinx_target builder project) + cmake_parse_arguments(ARG "" "SOURCE_DIR" "" ${ARGN}) set(SPHINX_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/${builder}") set(SPHINX_DOC_TREE_DIR "${CMAKE_CURRENT_BINARY_DIR}/_doctrees-${project}-${builder}") set(SPHINX_TARGET_NAME docs-${project}-${builder}) @@ -28,13 +29,18 @@ function (add_sphinx_target builder project) set(SPHINX_WARNINGS_AS_ERRORS_FLAG "") endif() + if (NOT ARG_SOURCE_DIR) + set(ARG_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") + endif() + add_custom_target(${SPHINX_TARGET_NAME} COMMAND ${SPHINX_EXECUTABLE} -b ${builder} -d "${SPHINX_DOC_TREE_DIR}" -q # Quiet: no output other than errors and warnings. + -t builder-${builder} # tag for builder ${SPHINX_WARNINGS_AS_ERRORS_FLAG} # Treat warnings as errors if requested - "${CMAKE_CURRENT_SOURCE_DIR}" # Source + "${ARG_SOURCE_DIR}" # Source "${SPHINX_BUILD_DIR}" # Output COMMENT "Generating ${builder} Sphinx documentation for ${project} into \"${SPHINX_BUILD_DIR}\"") diff --git a/lib/cmake/llvm/CheckAtomic.cmake b/lib/cmake/llvm/CheckAtomic.cmake index 29f3bdd..04eed14 100644 --- a/lib/cmake/llvm/CheckAtomic.cmake +++ b/lib/cmake/llvm/CheckAtomic.cmake @@ -12,8 +12,12 @@ function(check_working_cxx_atomics varname) CHECK_CXX_SOURCE_COMPILES(" #include <atomic> std::atomic<int> x; +std::atomic<short> y; +std::atomic<char> z; int main() { - return x; + ++z; + ++y; + return ++x; } " ${varname}) set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS}) @@ -28,6 +32,7 @@ function(check_working_cxx_atomics64 varname) std::atomic<uint64_t> x (0); int main() { uint64_t i = x.load(std::memory_order_relaxed); + (void)i; return 0; } " ${varname}) @@ -35,19 +40,20 @@ int main() { endfunction(check_working_cxx_atomics64) -# This isn't necessary on MSVC, so avoid command-line switch annoyance -# by only running on GCC-like hosts. -if (LLVM_COMPILER_IS_GCC_COMPATIBLE) +# Check for (non-64-bit) atomic operations. +if(MSVC) + set(HAVE_CXX_ATOMICS_WITHOUT_LIB True) +elseif(LLVM_COMPILER_IS_GCC_COMPATIBLE) # First check if atomics work without the library. check_working_cxx_atomics(HAVE_CXX_ATOMICS_WITHOUT_LIB) # If not, check if the library exists, and atomics work with it. if(NOT HAVE_CXX_ATOMICS_WITHOUT_LIB) check_library_exists(atomic __atomic_fetch_add_4 "" HAVE_LIBATOMIC) - if( HAVE_LIBATOMIC ) + if(HAVE_LIBATOMIC) list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic") check_working_cxx_atomics(HAVE_CXX_ATOMICS_WITH_LIB) if (NOT HAVE_CXX_ATOMICS_WITH_LIB) - message(FATAL_ERROR "Host compiler must support std::atomic!") + message(FATAL_ERROR "Host compiler must support std::atomic!") endif() else() message(FATAL_ERROR "Host compiler appears to require libatomic, but cannot find it.") @@ -58,21 +64,21 @@ endif() # Check for 64 bit atomic operations. if(MSVC) set(HAVE_CXX_ATOMICS64_WITHOUT_LIB True) -else() +elseif(LLVM_COMPILER_IS_GCC_COMPATIBLE) + # First check if atomics work without the library. check_working_cxx_atomics64(HAVE_CXX_ATOMICS64_WITHOUT_LIB) -endif() - -# If not, check if the library exists, and atomics work with it. -if(NOT HAVE_CXX_ATOMICS64_WITHOUT_LIB) - check_library_exists(atomic __atomic_load_8 "" HAVE_CXX_LIBATOMICS64) - if(HAVE_CXX_LIBATOMICS64) - list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic") - check_working_cxx_atomics64(HAVE_CXX_ATOMICS64_WITH_LIB) - if (NOT HAVE_CXX_ATOMICS64_WITH_LIB) - message(FATAL_ERROR "Host compiler must support 64-bit std::atomic!") + # If not, check if the library exists, and atomics work with it. + if(NOT HAVE_CXX_ATOMICS64_WITHOUT_LIB) + check_library_exists(atomic __atomic_load_8 "" HAVE_CXX_LIBATOMICS64) + if(HAVE_CXX_LIBATOMICS64) + list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic") + check_working_cxx_atomics64(HAVE_CXX_ATOMICS64_WITH_LIB) + if (NOT HAVE_CXX_ATOMICS64_WITH_LIB) + message(FATAL_ERROR "Host compiler must support 64-bit std::atomic!") + endif() + else() + message(FATAL_ERROR "Host compiler appears to require libatomic for 64-bit operations, but cannot find it.") endif() - else() - message(FATAL_ERROR "Host compiler appears to require libatomic for 64-bit operations, but cannot find it.") endif() endif() diff --git a/lib/cmake/llvm/CheckCompilerVersion.cmake b/lib/cmake/llvm/CheckCompilerVersion.cmake index ad70d85..375a526 100644 --- a/lib/cmake/llvm/CheckCompilerVersion.cmake +++ b/lib/cmake/llvm/CheckCompilerVersion.cmake @@ -12,9 +12,9 @@ set(APPLECLANG_MIN 6.0) set(APPLECLANG_SOFT_ERROR 6.0) # https://en.wikipedia.org/wiki/Microsoft_Visual_C#Internal_version_numbering -# _MSC_VER == 1910 MSVC++ 14.1 (Visual Studio 2017 version 15.0) -set(MSVC_MIN 19.1) -set(MSVC_SOFT_ERROR 19.1) +# _MSC_VER == 1914 MSVC++ 14.14 (Visual Studio 2017 version 15.4) +set(MSVC_MIN 19.14) +set(MSVC_SOFT_ERROR 19.14) # Map the above GCC versions to dates: https://gcc.gnu.org/develop.html#timeline set(GCC_MIN_DATE 20150422) @@ -50,6 +50,20 @@ check_compiler_version("Clang" "Clang" ${CLANG_MIN} ${CLANG_SOFT_ERROR}) check_compiler_version("AppleClang" "Apple Clang" ${APPLECLANG_MIN} ${APPLECLANG_SOFT_ERROR}) check_compiler_version("MSVC" "Visual Studio" ${MSVC_MIN} ${MSVC_SOFT_ERROR}) +# See https://developercommunity.visualstudio.com/content/problem/845933/miscompile-boolean-condition-deduced-to-be-always.html +# and thread "[llvm-dev] Longstanding failing tests - clang-tidy, MachO, Polly" +# on llvm-dev Jan 21-23 2020. +if ((${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC) AND + (19.24 VERSION_LESS_EQUAL ${CMAKE_CXX_COMPILER_VERSION}) AND + (${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 19.25)) + if(LLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN) + message(WARNING "Host Visual Studio version 16.4 is known to miscompile part of LLVM") + else() + message(FATAL_ERROR "Host Visual Studio version 16.4 is known to miscompile part of LLVM, please use clang-cl or upgrade to 16.5 or above (use -DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON to ignore)") + endif() +endif() + + if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") if (CMAKE_CXX_SIMULATE_ID MATCHES "MSVC") if (CMAKE_CXX_SIMULATE_VERSION VERSION_LESS MSVC_MIN) diff --git a/lib/cmake/llvm/CrossCompile.cmake b/lib/cmake/llvm/CrossCompile.cmake index 8a6e880..01cd371 100644 --- a/lib/cmake/llvm/CrossCompile.cmake +++ b/lib/cmake/llvm/CrossCompile.cmake @@ -6,7 +6,7 @@ function(llvm_create_cross_target project_name target_name toolchain buildtype) if(NOT DEFINED ${project_name}_${target_name}_BUILD) set(${project_name}_${target_name}_BUILD - "${CMAKE_BINARY_DIR}/${target_name}") + "${CMAKE_CURRENT_BINARY_DIR}/${target_name}") set(${project_name}_${target_name}_BUILD ${${project_name}_${target_name}_BUILD} PARENT_SCOPE) message(STATUS "Setting native build dir to " ${${project_name}_${target_name}_BUILD}) @@ -68,7 +68,7 @@ function(llvm_create_cross_target project_name target_name toolchain buildtype) add_custom_command(OUTPUT ${${project_name}_${target_name}_BUILD}/CMakeCache.txt COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" -DCMAKE_MAKE_PROGRAM="${CMAKE_MAKE_PROGRAM}" - ${CROSS_TOOLCHAIN_FLAGS_${target_name}} ${CMAKE_SOURCE_DIR} + ${CROSS_TOOLCHAIN_FLAGS_${target_name}} ${CMAKE_CURRENT_SOURCE_DIR} ${CROSS_TOOLCHAIN_FLAGS_${project_name}_${target_name}} -DLLVM_TARGET_IS_CROSSCOMPILE_HOST=TRUE -DLLVM_TARGETS_TO_BUILD="${targets_to_build_arg}" @@ -99,17 +99,17 @@ function(build_native_tool target output_path_var) cmake_parse_arguments(ARG "" "" "DEPENDS" ${ARGN}) if(CMAKE_CONFIGURATION_TYPES) - set(output_path "${${CMAKE_PROJECT_NAME}_NATIVE_BUILD}/Release/bin/${target}") + set(output_path "${${PROJECT_NAME}_NATIVE_BUILD}/Release/bin/${target}") else() - set(output_path "${${CMAKE_PROJECT_NAME}_NATIVE_BUILD}/bin/${target}") + set(output_path "${${PROJECT_NAME}_NATIVE_BUILD}/bin/${target}") endif() - llvm_ExternalProject_BuildCmd(build_cmd ${target} ${${CMAKE_PROJECT_NAME}_NATIVE_BUILD} + llvm_ExternalProject_BuildCmd(build_cmd ${target} ${${PROJECT_NAME}_NATIVE_BUILD} CONFIGURATION Release) add_custom_command(OUTPUT "${output_path}" COMMAND ${build_cmd} - DEPENDS CONFIGURE_${CMAKE_PROJECT_NAME}_NATIVE ${ARG_DEPENDS} - WORKING_DIRECTORY "${${CMAKE_PROJECT_NAME}_NATIVE_BUILD}" + DEPENDS CONFIGURE_${PROJECT_NAME}_NATIVE ${ARG_DEPENDS} + WORKING_DIRECTORY "${${PROJECT_NAME}_NATIVE_BUILD}" COMMENT "Building native ${target}..." USES_TERMINAL) set(${output_path_var} "${output_path}" PARENT_SCOPE) diff --git a/lib/cmake/llvm/FindGRPC.cmake b/lib/cmake/llvm/FindGRPC.cmake new file mode 100644 index 0000000..8fdb350 --- /dev/null +++ b/lib/cmake/llvm/FindGRPC.cmake @@ -0,0 +1,131 @@ +# FIXME(kirillbobyrev): Check if gRPC and Protobuf headers can be included at +# configure time. +find_package(Threads REQUIRED) +if (GRPC_INSTALL_PATH) + # This setup requires gRPC to be built from sources using CMake and installed + # to ${GRPC_INSTALL_PATH} via -DCMAKE_INSTALL_PREFIX=${GRPC_INSTALL_PATH}. + # Libraries will be linked according to gRPC build policy which generates + # static libraries when BUILD_SHARED_LIBS is Off and dynamic libraries when + # it's On (NOTE: This is a variable passed to gRPC CMake build invocation, + # LLVM's BUILD_SHARED_LIBS has no effect). + set(protobuf_MODULE_COMPATIBLE TRUE) + find_package(Protobuf CONFIG REQUIRED HINTS ${GRPC_INSTALL_PATH}) + message(STATUS "Using protobuf ${protobuf_VERSION}") + find_package(gRPC CONFIG REQUIRED HINTS ${GRPC_INSTALL_PATH}) + message(STATUS "Using gRPC ${gRPC_VERSION}") + + include_directories(${Protobuf_INCLUDE_DIRS}) + + # gRPC CMake CONFIG gives the libraries slightly odd names, make them match + # the conventional system-installed names. + set_target_properties(protobuf::libprotobuf PROPERTIES IMPORTED_GLOBAL TRUE) + add_library(protobuf ALIAS protobuf::libprotobuf) + set_target_properties(gRPC::grpc++ PROPERTIES IMPORTED_GLOBAL TRUE) + add_library(grpc++ ALIAS gRPC::grpc++) + + set(GRPC_CPP_PLUGIN $<TARGET_FILE:gRPC::grpc_cpp_plugin>) + set(PROTOC ${Protobuf_PROTOC_EXECUTABLE}) +else() + # This setup requires system-installed gRPC and Protobuf. + # We always link dynamically in this mode. While the static libraries are + # usually installed, the CMake files telling us *which* static libraries to + # link are not. + if (NOT BUILD_SHARED_LIBS) + message(NOTICE "gRPC and Protobuf will be linked dynamically. If you want static linking, build gRPC from sources with -DBUILD_SHARED_LIBS=Off.") + endif() + find_program(GRPC_CPP_PLUGIN grpc_cpp_plugin) + find_program(PROTOC protoc) + if (NOT GRPC_CPP_PLUGIN OR NOT PROTOC) + message(FATAL_ERROR "gRPC C++ Plugin and Protoc must be on $PATH for Clangd remote index build.") + endif() + # On macOS the libraries are typically installed via Homebrew and are not on + # the system path. + set(GRPC_OPTS "") + set(PROTOBUF_OPTS "") + if (${APPLE}) + find_program(HOMEBREW brew) + # If Homebrew is not found, the user might have installed libraries + # manually. Fall back to the system path. + if (HOMEBREW) + execute_process(COMMAND ${HOMEBREW} --prefix grpc + OUTPUT_VARIABLE GRPC_HOMEBREW_PATH + RESULT_VARIABLE GRPC_HOMEBREW_RETURN_CODE + OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND ${HOMEBREW} --prefix protobuf + OUTPUT_VARIABLE PROTOBUF_HOMEBREW_PATH + RESULT_VARIABLE PROTOBUF_HOMEBREW_RETURN_CODE + OUTPUT_STRIP_TRAILING_WHITESPACE) + # If either library is not installed via Homebrew, fall back to the + # system path. + if (GRPC_HOMEBREW_RETURN_CODE EQUAL "0") + include_directories(${GRPC_HOMEBREW_PATH}/include) + list(APPEND GRPC_OPTS PATHS ${GRPC_HOMEBREW_PATH}/lib NO_DEFAULT_PATH) + endif() + if (PROTOBUF_HOMEBREW_RETURN_CODE EQUAL "0") + include_directories(${PROTOBUF_HOMEBREW_PATH}/include) + list(APPEND PROTOBUF_OPTS PATHS ${PROTOBUF_HOMEBREW_PATH}/lib NO_DEFAULT_PATH) + endif() + endif() + endif() + find_library(GRPC_LIBRARY grpc++ $GRPC_OPTS REQUIRED) + add_library(grpc++ UNKNOWN IMPORTED GLOBAL) + message(STATUS "Using grpc++: " ${GRPC_LIBRARY}) + set_target_properties(grpc++ PROPERTIES IMPORTED_LOCATION ${GRPC_LIBRARY}) + find_library(PROTOBUF_LIBRARY protobuf $PROTOBUF_OPTS REQUIRED) + message(STATUS "Using protobuf: " ${PROTOBUF_LIBRARY}) + add_library(protobuf UNKNOWN IMPORTED GLOBAL) + set_target_properties(protobuf PROPERTIES IMPORTED_LOCATION ${PROTOBUF_LIBRARY}) +endif() + +# Proto headers are generated in ${CMAKE_CURRENT_BINARY_DIR}. +# Libraries that use these headers should adjust the include path. +# If the "GRPC" argument is given, services are also generated. +# The DEPENDS list should name *.proto source files that are imported. +# They may be relative to the source dir or absolute (for generated protos). +function(generate_protos LibraryName ProtoFile) + cmake_parse_arguments(PARSE_ARGV 2 PROTO "GRPC" "" "DEPENDS") + get_filename_component(ProtoSourceAbsolutePath "${CMAKE_CURRENT_SOURCE_DIR}/${ProtoFile}" ABSOLUTE) + get_filename_component(ProtoSourcePath ${ProtoSourceAbsolutePath} PATH) + get_filename_component(Basename ${ProtoSourceAbsolutePath} NAME_WLE) + + set(GeneratedProtoSource "${CMAKE_CURRENT_BINARY_DIR}/${Basename}.pb.cc") + set(GeneratedProtoHeader "${CMAKE_CURRENT_BINARY_DIR}/${Basename}.pb.h") + set(Flags + --cpp_out="${CMAKE_CURRENT_BINARY_DIR}" + --proto_path="${ProtoSourcePath}") + if (PROTO_GRPC) + list(APPEND Flags + --grpc_out="${CMAKE_CURRENT_BINARY_DIR}" + --plugin=protoc-gen-grpc="${GRPC_CPP_PLUGIN}") + list(APPEND GeneratedProtoSource "${CMAKE_CURRENT_BINARY_DIR}/${Basename}.grpc.pb.cc") + list(APPEND GeneratedProtoHeader "${CMAKE_CURRENT_BINARY_DIR}/${Basename}.grpc.pb.h") + endif() + add_custom_command( + OUTPUT ${GeneratedProtoSource} ${GeneratedProtoHeader} + COMMAND ${PROTOC} + ARGS ${Flags} "${ProtoSourceAbsolutePath}" + DEPENDS "${ProtoSourceAbsolutePath}") + + add_clang_library(${LibraryName} ${GeneratedProtoSource} + PARTIAL_SOURCES_INTENDED + LINK_LIBS PUBLIC grpc++ protobuf) + + # Ensure dependency headers are generated before dependent protos are built. + # DEPENDS arg is a list of "Foo.proto". While they're logically relative to + # the source dir, the generated headers we need are in the binary dir. + foreach(ImportedProto IN LISTS PROTO_DEPENDS) + # Foo.proto -> Foo.pb.h + STRING(REGEX REPLACE "\\.proto$" ".pb.h" ImportedHeader "${ImportedProto}") + # Foo.pb.h -> ${CMAKE_CURRENT_BINARY_DIR}/Foo.pb.h + get_filename_component(ImportedHeader "${ImportedHeader}" + ABSOLUTE + BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}") + # Compilation of each generated source depends on ${BINARY}/Foo.pb.h. + foreach(Generated IN LISTS GeneratedProtoSource) + # FIXME: CMake docs suggest OBJECT_DEPENDS isn't needed, but I can't get + # the recommended add_dependencies() approach to work. + set_source_files_properties("${Generated}" + PROPERTIES OBJECT_DEPENDS "${ImportedHeader}") + endforeach(Generated) + endforeach(ImportedProto) +endfunction() diff --git a/lib/cmake/llvm/FindLibpfm.cmake b/lib/cmake/llvm/FindLibpfm.cmake index 202bb03..38cf3af 100644 --- a/lib/cmake/llvm/FindLibpfm.cmake +++ b/lib/cmake/llvm/FindLibpfm.cmake @@ -7,6 +7,7 @@ include(CheckIncludeFile) include(CheckLibraryExists) +include(CheckCXXSourceCompiles) if (LLVM_ENABLE_LIBPFM) check_library_exists(pfm pfm_initialize "" HAVE_LIBPFM_INITIALIZE) @@ -16,6 +17,19 @@ if (LLVM_ENABLE_LIBPFM) check_include_file(perfmon/pfmlib_perf_event.h HAVE_PERFMON_PFMLIB_PERF_EVENT_H) if(HAVE_PERFMON_PERF_EVENT_H AND HAVE_PERFMON_PFMLIB_H AND HAVE_PERFMON_PFMLIB_PERF_EVENT_H) set(HAVE_LIBPFM 1) + # Check to see if perf_branch_entry has the field 'cycles'. + # We couldn't use CheckStructHasMember here because 'cycles' is a bit field which is not + # supported by CheckStructHasMember. + CHECK_CXX_SOURCE_COMPILES(" + #include <perfmon/perf_event.h> + int main() { + perf_branch_entry entry; + entry.cycles = 2; + return 0; + }" COMPILE_WITH_CYCLES) + if(COMPILE_WITH_CYCLES) + set(LIBPFM_HAS_FIELD_CYCLES 1) + endif() endif() endif() endif() diff --git a/lib/cmake/llvm/FindZ3.cmake b/lib/cmake/llvm/FindZ3.cmake index 0429427..95dd377 100644 --- a/lib/cmake/llvm/FindZ3.cmake +++ b/lib/cmake/llvm/FindZ3.cmake @@ -27,7 +27,7 @@ function(check_z3_version z3_include z3_lib) ) if(Z3_COMPILED) - string(REGEX REPLACE "([0-9]*\\.[0-9]*\\.[0-9]*\\.[0-9]*)" "\\1" + string(REGEX REPLACE "([0-9]*\\.[0-9]*\\.[0-9]*)" "\\1" z3_version "${SRC_OUTPUT}") set(Z3_VERSION_STRING ${z3_version} PARENT_SCOPE) endif() diff --git a/lib/cmake/llvm/GetLibraryName.cmake b/lib/cmake/llvm/GetLibraryName.cmake new file mode 100644 index 0000000..13c0080 --- /dev/null +++ b/lib/cmake/llvm/GetLibraryName.cmake @@ -0,0 +1,17 @@ +# Returns library name for a given path. +function(get_library_name path name) + get_filename_component(path ${path} NAME) + set(prefixes ${CMAKE_FIND_LIBRARY_PREFIXES}) + set(suffixes ${CMAKE_FIND_LIBRARY_SUFFIXES}) + list(FILTER prefixes EXCLUDE REGEX "^\\s*$") + list(FILTER suffixes EXCLUDE REGEX "^\\s*$") + if(prefixes) + string(REPLACE ";" "|" prefixes "${prefixes}") + string(REGEX REPLACE "^(${prefixes})" "" path ${path}) + endif() + if(suffixes) + string(REPLACE ";" "|" suffixes "${suffixes}") + string(REGEX REPLACE "(${suffixes})$" "" path ${path}) + endif() + set(${name} "${path}" PARENT_SCOPE) +endfunction() diff --git a/lib/cmake/llvm/HandleLLVMOptions.cmake b/lib/cmake/llvm/HandleLLVMOptions.cmake index d519a7e..5d4d692 100644 --- a/lib/cmake/llvm/HandleLLVMOptions.cmake +++ b/lib/cmake/llvm/HandleLLVMOptions.cmake @@ -11,8 +11,10 @@ include(HandleLLVMStdlib) include(CheckCCompilerFlag) include(CheckCXXCompilerFlag) include(CheckSymbolExists) +include(CMakeDependentOption) +include(LLVMProcessSources) -if(CMAKE_LINKER MATCHES "lld-link" OR (WIN32 AND LLVM_USE_LINKER STREQUAL "lld") OR LLVM_ENABLE_LLD) +if(CMAKE_LINKER MATCHES "lld-link" OR (MSVC AND (LLVM_USE_LINKER STREQUAL "lld" OR LLVM_ENABLE_LLD))) set(LINKER_IS_LLD_LINK TRUE) else() set(LINKER_IS_LLD_LINK FALSE) @@ -26,7 +28,7 @@ string(TOUPPER "${LLVM_ENABLE_LTO}" uppercase_LLVM_ENABLE_LTO) set(LLVM_PARALLEL_COMPILE_JOBS "" CACHE STRING "Define the maximum number of concurrent compilation jobs (Ninja only).") if(LLVM_PARALLEL_COMPILE_JOBS) - if(NOT CMAKE_MAKE_PROGRAM MATCHES "ninja") + if(NOT CMAKE_GENERATOR STREQUAL "Ninja") message(WARNING "Job pooling is only available with Ninja generators.") else() set_property(GLOBAL APPEND PROPERTY JOB_POOLS compile_job_pool=${LLVM_PARALLEL_COMPILE_JOBS}) @@ -36,7 +38,7 @@ endif() set(LLVM_PARALLEL_LINK_JOBS "" CACHE STRING "Define the maximum number of concurrent link jobs (Ninja only).") -if(CMAKE_MAKE_PROGRAM MATCHES "ninja") +if(CMAKE_GENERATOR STREQUAL "Ninja") if(NOT LLVM_PARALLEL_LINK_JOBS AND uppercase_LLVM_ENABLE_LTO STREQUAL "THIN") message(STATUS "ThinLTO provides its own parallel linking - limiting parallel link jobs to 2.") set(LLVM_PARALLEL_LINK_JOBS "2") @@ -57,7 +59,10 @@ if( LLVM_ENABLE_ASSERTIONS ) # On non-Debug builds cmake automatically defines NDEBUG, so we # explicitly undefine it: if( NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" ) - add_definitions( -UNDEBUG ) + # NOTE: use `add_compile_options` rather than `add_definitions` since + # `add_definitions` does not support generator expressions. + add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-UNDEBUG>) + # Also remove /D NDEBUG to avoid MSVC warnings about conflicting defines. foreach (flags_var_to_scrub CMAKE_CXX_FLAGS_RELEASE @@ -74,7 +79,26 @@ endif() if(LLVM_ENABLE_EXPENSIVE_CHECKS) add_definitions(-DEXPENSIVE_CHECKS) - add_definitions(-D_GLIBCXX_DEBUG) + + # In some libstdc++ versions, std::min_element is not constexpr when + # _GLIBCXX_DEBUG is enabled. + CHECK_CXX_SOURCE_COMPILES(" + #define _GLIBCXX_DEBUG + #include <algorithm> + int main(int argc, char** argv) { + static constexpr int data[] = {0, 1}; + constexpr const int* min_elt = std::min_element(&data[0], &data[2]); + return 0; + }" CXX_SUPPORTS_GLIBCXX_DEBUG) + if(CXX_SUPPORTS_GLIBCXX_DEBUG) + add_definitions(-D_GLIBCXX_DEBUG) + else() + add_definitions(-D_GLIBCXX_ASSERTIONS) + endif() +endif() + +if (LLVM_ENABLE_STRICT_FIXED_SIZE_VECTORS) + add_definitions(-DSTRICT_FIXED_SIZE_VECTORS) endif() string(TOUPPER "${LLVM_ABI_BREAKING_CHECKS}" uppercase_LLVM_ABI_BREAKING_CHECKS) @@ -121,6 +145,10 @@ else(WIN32) endif(FUCHSIA OR UNIX) endif(WIN32) +if (CMAKE_SYSTEM_NAME MATCHES "OS390") + set(LLVM_HAVE_LINK_VERSION_SCRIPT 0) +endif() + set(EXEEXT ${CMAKE_EXECUTABLE_SUFFIX}) set(LTDL_SHLIB_EXT ${CMAKE_SHARED_LIBRARY_SUFFIX}) @@ -137,13 +165,21 @@ endif() if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") # RHEL7 has ar and ranlib being non-deterministic by default. The D flag forces determinism, - # however only GNU version of ar and ranlib (2.27) have this option. + # however only GNU version of ar and ranlib (2.27) have this option. # RHEL DTS7 is also affected by this, which uses GNU binutils 2.28 execute_process(COMMAND ${CMAKE_AR} rD t.a - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} RESULT_VARIABLE AR_RESULT OUTPUT_VARIABLE RANLIB_OUTPUT) + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + RESULT_VARIABLE AR_RESULT + OUTPUT_QUIET + ERROR_QUIET + ) if(${AR_RESULT} EQUAL 0) execute_process(COMMAND ${CMAKE_RANLIB} -D t.a - WORKING_DIRECTORY ${CMAKE_BINARY_DIR} RESULT_VARIABLE RANLIB_RESULT OUTPUT_VARIABLE RANLIB_OUTPUT) + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + RESULT_VARIABLE RANLIB_RESULT + OUTPUT_QUIET + ERROR_QUIET + ) if(${RANLIB_RESULT} EQUAL 0) set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> Dqc <TARGET> <LINK_FLAGS> <OBJECTS>") set(CMAKE_C_ARCHIVE_APPEND "<CMAKE_AR> Dq <TARGET> <LINK_FLAGS> <OBJECTS>") @@ -158,30 +194,25 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") endif() if(${CMAKE_SYSTEM_NAME} MATCHES "AIX") - if(NOT LLVM_BUILD_32_BITS) - if (CMAKE_CXX_COMPILER_ID MATCHES "XL") - append("-q64" CMAKE_CXX_FLAGS CMAKE_C_FLAGS) - else() - append("-maix64" CMAKE_CXX_FLAGS CMAKE_C_FLAGS) - endif() - set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> -X64 qc <TARGET> <LINK_FLAGS> <OBJECTS>") - set(CMAKE_CXX_ARCHIVE_APPEND "<CMAKE_AR> -X64 q <TARGET> <LINK_FLAGS> <OBJECTS>") - set(CMAKE_C_ARCHIVE_FINISH "<CMAKE_RANLIB> -X64 <TARGET>") - set(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -X64 <TARGET>") - endif() # -fPIC does not enable the large code model for GCC on AIX but does for XL. - if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") append("-mcmodel=large" CMAKE_CXX_FLAGS CMAKE_C_FLAGS) elseif(CMAKE_CXX_COMPILER_ID MATCHES "XL") # XL generates a small number of relocations not of the large model, -bbigtoc is needed. append("-Wl,-bbigtoc" CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS) + # The default behaviour on AIX processes dynamic initialization of non-local variables with + # static storage duration even for archive members that are otherwise unreferenced. + # Since `--whole-archive` is not used by the LLVM build to keep such initializations for Linux, + # we can limit the processing for archive members to only those that are otherwise referenced. + append("-bcdtors:mbr" + CMAKE_EXE_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS) endif() endif() # Pass -Wl,-z,defs. This makes sure all symbols are defined. Otherwise a DSO # build might work on ELF but fail on MachO/COFF. -if(NOT (${CMAKE_SYSTEM_NAME} MATCHES "Darwin|FreeBSD|OpenBSD|DragonFly|AIX|SunOS" OR +if(NOT (CMAKE_SYSTEM_NAME MATCHES "Darwin|FreeBSD|OpenBSD|DragonFly|AIX|SunOS|OS390" OR WIN32 OR CYGWIN) AND NOT LLVM_USE_SANITIZER) set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,defs") @@ -235,7 +266,12 @@ if( LLVM_ENABLE_LLD ) if ( LLVM_USE_LINKER ) message(FATAL_ERROR "LLVM_ENABLE_LLD and LLVM_USE_LINKER can't be set at the same time") endif() - set(LLVM_USE_LINKER "lld") + # In case of MSVC cmake always invokes the linker directly, so the linker + # should be specified by CMAKE_LINKER cmake variable instead of by -fuse-ld + # compiler option. + if ( NOT MSVC ) + set(LLVM_USE_LINKER "lld") + endif() endif() if( LLVM_USE_LINKER ) @@ -265,6 +301,15 @@ if( LLVM_ENABLE_PIC ) NOT Uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG") add_flag_or_print_warning("-fno-shrink-wrap" FNO_SHRINK_WRAP) endif() + # gcc with -O3 -fPIC generates TLS sequences that violate the spec on + # Solaris/sparcv9, causing executables created with the system linker + # to SEGV (GCC PR target/96607). + # clang with -O3 -fPIC generates code that SEGVs. + # Both can be worked around by compiling with -O instead. + if(${CMAKE_SYSTEM_NAME} STREQUAL "SunOS" AND LLVM_NATIVE_ARCH STREQUAL "Sparc") + llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELEASE "-O[23]" "-O") + llvm_replace_compiler_option(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O[23]" "-O") + endif() endif() if(NOT WIN32 AND NOT CYGWIN AND NOT (${CMAKE_SYSTEM_NAME} MATCHES "AIX" AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU")) @@ -364,6 +409,8 @@ elseif(MINGW) # FIXME: Also cygwin? endif() endif() +option(LLVM_ENABLE_WARNINGS "Enable compiler warnings." ON) + if( MSVC ) include(ChooseMSVCCRT) @@ -390,6 +437,12 @@ if( MSVC ) append("/Zc:inline" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) + # Some projects use the __cplusplus preprocessor macro to check support for + # a particular version of the C++ standard. When this option is not specified + # explicitly, macro's value is "199711L" that implies C++98 Standard. + # https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/ + append("/Zc:__cplusplus" CMAKE_CXX_FLAGS) + # Allow users to request PDBs in release mode. CMake offeres the # RelWithDebInfo configuration, but it uses different optimization settings # (/Ob1 vs /Ob2 or -O2 vs -O3). LLVM provides this flag so that users can get @@ -442,6 +495,10 @@ if( MSVC ) endif() endif() endif() + # By default MSVC has a 2^16 limit on the number of sections in an object file, + # but in many objects files need more than that. This flag is to increase the + # number of sections. + append("/bigobj" CMAKE_CXX_FLAGS) endif( MSVC ) # Warnings-as-errors handling for GCC-compatible compilers: @@ -499,7 +556,6 @@ if (MSVC) -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' -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' -wd4456 # Suppress 'declaration of 'var' hides local variable' -wd4457 # Suppress 'declaration of 'var' hides function parameter' @@ -647,6 +703,21 @@ if (LLVM_ENABLE_WARNINGS AND (LLVM_COMPILER_IS_GCC_COMPATIBLE OR CLANG_CL)) # Enable -Wdelete-non-virtual-dtor if available. add_flag_if_supported("-Wdelete-non-virtual-dtor" DELETE_NON_VIRTUAL_DTOR_FLAG) + # Enable -Wsuggest-override if it's available, and only if it doesn't + # suggest adding 'override' to functions that are already marked 'final' + # (which means it is disabled for GCC < 9.2). + check_cxx_compiler_flag("-Wsuggest-override" CXX_SUPPORTS_SUGGEST_OVERRIDE_FLAG) + if (CXX_SUPPORTS_SUGGEST_OVERRIDE_FLAG) + set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS}) + set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -Werror=suggest-override") + CHECK_CXX_SOURCE_COMPILES("class base {public: virtual void anchor();}; + class derived : base {public: void anchor() final;}; + int main() { return 0; }" + CXX_WSUGGEST_OVERRIDE_ALLOWS_ONLY_FINAL) + set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS}) + append_if(CXX_WSUGGEST_OVERRIDE_ALLOWS_ONLY_FINAL "-Wsuggest-override" CMAKE_CXX_FLAGS) + endif() + # Check if -Wcomment is OK with an // comment ending with '\' if the next # line is also a // comment. set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS}) @@ -705,16 +776,17 @@ if(LLVM_USE_SANITIZER) endif() elseif (LLVM_USE_SANITIZER STREQUAL "Undefined") append_common_sanitizer_flags() - append("-fsanitize=undefined -fno-sanitize=vptr,function -fno-sanitize-recover=all" - CMAKE_C_FLAGS CMAKE_CXX_FLAGS) + append("${LLVM_UBSAN_FLAGS}" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) elseif (LLVM_USE_SANITIZER STREQUAL "Thread") append_common_sanitizer_flags() append("-fsanitize=thread" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) + elseif (LLVM_USE_SANITIZER STREQUAL "DataFlow") + append("-fsanitize=dataflow" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) elseif (LLVM_USE_SANITIZER STREQUAL "Address;Undefined" OR LLVM_USE_SANITIZER STREQUAL "Undefined;Address") append_common_sanitizer_flags() - append("-fsanitize=address,undefined -fno-sanitize=vptr,function -fno-sanitize-recover=all" - CMAKE_C_FLAGS CMAKE_CXX_FLAGS) + append("-fsanitize=address" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) + append("${LLVM_UBSAN_FLAGS}" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) elseif (LLVM_USE_SANITIZER STREQUAL "Leaks") append_common_sanitizer_flags() append("-fsanitize=leak" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) @@ -747,9 +819,15 @@ if(LLVM_USE_SANITIZER) endif() endif() -# Turn on -gsplit-dwarf if requested -if(LLVM_USE_SPLIT_DWARF) - add_definitions("-gsplit-dwarf") +# Turn on -gsplit-dwarf if requested in debug builds. +if (LLVM_USE_SPLIT_DWARF AND + ((uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG") OR + (uppercase_CMAKE_BUILD_TYPE STREQUAL "RELWITHDEBINFO"))) + # Limit to clang and gcc so far. Add compilers supporting this option. + if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR + CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + add_compile_options(-gsplit-dwarf) + endif() endif() add_definitions( -D__STDC_CONSTANT_MACROS ) @@ -790,6 +868,10 @@ if(NOT CYGWIN AND NOT WIN32) endif() add_flag_if_supported("-fdata-sections" FDATA_SECTIONS) endif() +elseif(MSVC) + if( NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" ) + append("/Gw" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) + endif() endif() if(MSVC) @@ -822,7 +904,8 @@ option(LLVM_ENABLE_IR_PGO "Build LLVM and tools with IR PGO instrumentation (dep mark_as_advanced(LLVM_ENABLE_IR_PGO) set(LLVM_BUILD_INSTRUMENTED OFF CACHE STRING "Build LLVM and tools with PGO instrumentation. May be specified as IR or Frontend") -mark_as_advanced(LLVM_BUILD_INSTRUMENTED) +set(LLVM_VP_COUNTERS_PER_SITE "1.5" CACHE STRING "Value profile counters to use per site for IR PGO with Clang") +mark_as_advanced(LLVM_BUILD_INSTRUMENTED LLVM_VP_COUNTERS_PER_SITE) string(TOUPPER "${LLVM_BUILD_INSTRUMENTED}" uppercase_LLVM_BUILD_INSTRUMENTED) if (LLVM_BUILD_INSTRUMENTED) @@ -835,6 +918,15 @@ if (LLVM_BUILD_INSTRUMENTED) CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS) endif() + # Set this to avoid running out of the value profile node section + # under clang in dynamic linking mode. + if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND + CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 11 AND + LLVM_LINK_LLVM_DYLIB) + append("-Xclang -mllvm -Xclang -vp-counters-per-site=${LLVM_VP_COUNTERS_PER_SITE}" + CMAKE_CXX_FLAGS + CMAKE_C_FLAGS) + endif() elseif(uppercase_LLVM_BUILD_INSTRUMENTED STREQUAL "CSIR") append("-fcs-profile-generate=\"${LLVM_CSPROFILE_DATA_DIR}\"" CMAKE_CXX_FLAGS @@ -856,6 +948,28 @@ if (LLVM_BUILD_INSTRUMENTED) endif() endif() +# When using clang-cl with an instrumentation-based tool, add clang's library +# resource directory to the library search path. Because cmake invokes the +# linker directly, it isn't sufficient to pass -fsanitize=* to the linker. +if (CLANG_CL AND (LLVM_BUILD_INSTRUMENTED OR LLVM_USE_SANITIZER)) + execute_process( + COMMAND ${CMAKE_CXX_COMPILER} /clang:-print-resource-dir + OUTPUT_VARIABLE clang_resource_dir + ERROR_VARIABLE clang_cl_stderr + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE clang_cl_exit_code) + if (NOT "${clang_cl_exit_code}" STREQUAL "0") + message(FATAL_ERROR + "Unable to invoke clang-cl to find resource dir: ${clang_cl_stderr}") + endif() + file(TO_CMAKE_PATH "${clang_resource_dir}" clang_resource_dir) + append("/libpath:${clang_resource_dir}/lib/windows" + CMAKE_EXE_LINKER_FLAGS + CMAKE_MODULE_LINKER_FLAGS + CMAKE_SHARED_LINKER_FLAGS) +endif() + if(LLVM_PROFDATA_FILE AND EXISTS ${LLVM_PROFDATA_FILE}) if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" ) append("-fprofile-instr-use=\"${LLVM_PROFDATA_FILE}\"" @@ -883,7 +997,7 @@ if (LLVM_BUILD_INSTRUMENTED AND LLVM_BUILD_INSTRUMENTED_COVERAGE) message(FATAL_ERROR "LLVM_BUILD_INSTRUMENTED and LLVM_BUILD_INSTRUMENTED_COVERAGE cannot both be specified") endif() -if(LLVM_ENABLE_LTO AND LLVM_ON_WIN32 AND NOT LINKER_IS_LLD_LINK) +if(LLVM_ENABLE_LTO AND LLVM_ON_WIN32 AND NOT LINKER_IS_LLD_LINK AND NOT MINGW) message(FATAL_ERROR "When compiling for Windows, LLVM_ENABLE_LTO requires using lld as the linker (point CMAKE_LINKER at lld-link.exe)") endif() if(uppercase_LLVM_ENABLE_LTO STREQUAL "THIN") @@ -898,7 +1012,7 @@ if(uppercase_LLVM_ENABLE_LTO STREQUAL "THIN") if(APPLE) append("-Wl,-cache_path_lto,${PROJECT_BINARY_DIR}/lto.cache" CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS) - elseif(UNIX AND LLVM_USE_LINKER STREQUAL "lld") + elseif((UNIX OR MINGW) AND LLVM_USE_LINKER STREQUAL "lld") append("-Wl,--thinlto-cache-dir=${PROJECT_BINARY_DIR}/lto.cache" CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS) elseif(LLVM_USE_LINKER STREQUAL "gold") @@ -920,12 +1034,23 @@ elseif(LLVM_ENABLE_LTO) endif() endif() +# Set an AIX default for LLVM_EXPORT_SYMBOLS_FOR_PLUGINS based on whether we are +# doing dynamic linking (see below). +set(LLVM_EXPORT_SYMBOLS_FOR_PLUGINS_AIX_default OFF) +if (NOT (BUILD_SHARED_LIBS OR LLVM_LINK_LLVM_DYLIB)) + set(LLVM_EXPORT_SYMBOLS_FOR_PLUGINS_AIX_default ON) +endif() + # This option makes utils/extract_symbols.py be used to determine the list of -# symbols to export from LLVM tools. This is necessary when using MSVC if you -# want to allow plugins, though note that the plugin has to explicitly link -# against (exactly one) tool so we can't unilaterally turn on +# symbols to export from LLVM tools. This is necessary when on AIX or when using +# MSVC if you want to allow plugins. On AIX we don't show this option, and we +# enable it by default except when the LLVM libraries are set up for dynamic +# linking (due to incompatibility). With MSVC, note that the plugin has to +# explicitly link against (exactly one) tool so we can't unilaterally turn on # LLVM_ENABLE_PLUGINS when it's enabled. -option(LLVM_EXPORT_SYMBOLS_FOR_PLUGINS "Export symbols from LLVM tools so that plugins can import them" OFF) +CMAKE_DEPENDENT_OPTION(LLVM_EXPORT_SYMBOLS_FOR_PLUGINS + "Export symbols from LLVM tools so that plugins can import them" OFF + "NOT ${CMAKE_SYSTEM_NAME} MATCHES AIX" ${LLVM_EXPORT_SYMBOLS_FOR_PLUGINS_AIX_default}) if(BUILD_SHARED_LIBS AND LLVM_EXPORT_SYMBOLS_FOR_PLUGINS) message(FATAL_ERROR "BUILD_SHARED_LIBS not compatible with LLVM_EXPORT_SYMBOLS_FOR_PLUGINS") endif() @@ -991,8 +1116,9 @@ if(macos_signposts_available) endif() endif() +set(LLVM_SOURCE_PREFIX "" CACHE STRING "Use prefix for sources") + option(LLVM_USE_RELATIVE_PATHS_IN_DEBUG_INFO "Use relative paths in debug info" OFF) -set(LLVM_SOURCE_PREFIX "" CACHE STRING "Use prefix for sources in debug info") if(LLVM_USE_RELATIVE_PATHS_IN_DEBUG_INFO) check_c_compiler_flag("-fdebug-prefix-map=foo=bar" SUPPORTS_FDEBUG_PREFIX_MAP) @@ -1006,3 +1132,18 @@ if(LLVM_USE_RELATIVE_PATHS_IN_DEBUG_INFO) append_if(SUPPORTS_FDEBUG_PREFIX_MAP "-fdebug-prefix-map=${source_root}/=${LLVM_SOURCE_PREFIX}" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) add_flag_if_supported("-no-canonical-prefixes" NO_CANONICAL_PREFIXES) endif() + +option(LLVM_USE_RELATIVE_PATHS_IN_FILES "Use relative paths in sources and debug info" OFF) + +if(LLVM_USE_RELATIVE_PATHS_IN_FILES) + check_c_compiler_flag("-ffile-prefix-map=foo=bar" SUPPORTS_FFILE_PREFIX_MAP) + if(LLVM_ENABLE_PROJECTS_USED) + get_filename_component(source_root "${LLVM_MAIN_SRC_DIR}/.." ABSOLUTE) + else() + set(source_root "${LLVM_MAIN_SRC_DIR}") + endif() + file(RELATIVE_PATH relative_root "${source_root}" "${CMAKE_BINARY_DIR}") + append_if(SUPPORTS_FFILE_PREFIX_MAP "-ffile-prefix-map=${CMAKE_BINARY_DIR}=${relative_root}" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) + append_if(SUPPORTS_FFILE_PREFIX_MAP "-ffile-prefix-map=${source_root}/=${LLVM_SOURCE_PREFIX}" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) + add_flag_if_supported("-no-canonical-prefixes" NO_CANONICAL_PREFIXES) +endif() diff --git a/lib/cmake/llvm/LLVM-Build.cmake b/lib/cmake/llvm/LLVM-Build.cmake new file mode 100644 index 0000000..525186c --- /dev/null +++ b/lib/cmake/llvm/LLVM-Build.cmake @@ -0,0 +1,104 @@ +# Generate C code in the file provided as OUTPUT that describes the properties +# of all components. This C code is suitable for inclusion in `llvm-config` +function(LLVMBuildGenerateCFragment) + cmake_parse_arguments(ARG "" "OUTPUT" "" ${ARGN}) + + # Write C header + ################# + get_property(llvmbuild_components GLOBAL PROPERTY LLVM_COMPONENT_LIBS) + foreach(llvmbuild_component ${llvmbuild_components}) + string(REGEX REPLACE "^LLVM" "" component_name ${llvmbuild_component}) + list(APPEND all_component_libdeps ${component_name}) + endforeach() + list(APPEND llvmbuild_components all) + foreach(llvm_component all-targets Engine Native NativeCodeGen ${LLVM_TARGETS_TO_BUILD}) + list(APPEND llvmbuild_components ${llvm_component}) + list(APPEND all_component_libdeps ${llvm_component}) + endforeach() + + list(LENGTH llvmbuild_components llvmbuild_components_size) + file(WRITE ${ARG_OUTPUT} + " + struct AvailableComponent { + /// The name of the component. + const char *Name; + + /// The name of the library for this component (or NULL). + const char *Library; + + /// Whether the component is installed. + bool IsInstalled; + + /// The list of libraries required when linking this component. + const char *RequiredLibraries[${llvmbuild_components_size}]; + } AvailableComponents[${llvmbuild_components_size}] = { + ") + + foreach(llvmbuild_component ${llvmbuild_components}) + if(llvmbuild_component STREQUAL "all") + unset(llvmbuild_libname) + set(llvmbuild_libdeps ${all_component_libdeps}) + else() + get_property(llvmbuild_libname TARGET ${llvmbuild_component} PROPERTY LLVM_COMPONENT_NAME) + get_property(llvmbuild_libdeps TARGET ${llvmbuild_component} PROPERTY LLVM_LINK_COMPONENTS) + endif() + string(TOLOWER ${llvmbuild_component} llvmbuild_componentname) + + if(NOT llvmbuild_libname) + set(llvmbuild_llvmlibname nullptr) + string(TOLOWER ${llvmbuild_component} llvmbuild_libname) + else() + set(llvmbuild_llvmlibname "\"LLVM${llvmbuild_libname}\"") + string(TOLOWER ${llvmbuild_libname} llvmbuild_libname) + endif() + + set(llvmbuild_clibdeps "") + foreach(llvmbuild_libdep ${llvmbuild_libdeps}) + get_property(llvmbuild_libdepname GLOBAL PROPERTY LLVM_COMPONENT_NAME_${llvmbuild_libdep}) + if(NOT llvmbuild_libdepname) + string(TOLOWER ${llvmbuild_libdep} llvmbuild_clibdep) + else() + string(TOLOWER ${llvmbuild_libdepname} llvmbuild_clibdep) + endif() + list(APPEND llvmbuild_clibdeps ${llvmbuild_clibdep}) + endforeach() + + list(TRANSFORM llvmbuild_clibdeps PREPEND "\"") + list(TRANSFORM llvmbuild_clibdeps APPEND "\"") + list(JOIN llvmbuild_clibdeps ", " llvmbuild_clibdeps_joint) + list(APPEND llvmbuild_centries "{ \"${llvmbuild_libname}\", ${llvmbuild_llvmlibname}, true, {${llvmbuild_clibdeps_joint}} },\n") + endforeach() + + list(SORT llvmbuild_centries) + foreach(llvmbuild_centry ${llvmbuild_centries}) + file(APPEND ${ARG_OUTPUT} "${llvmbuild_centry}") + endforeach() + file(APPEND ${ARG_OUTPUT} "};") +endfunction() + +# Resolve cross-component dependencies, for each available component. +function(LLVMBuildResolveComponentsLink) + + # the native target may not be enabled when cross compiling + if(TARGET ${LLVM_NATIVE_ARCH}) + get_property(llvm_has_jit_native TARGET ${LLVM_NATIVE_ARCH} PROPERTY LLVM_HAS_JIT) + else() + set(llvm_has_jit_native OFF) + endif() + + if(llvm_has_jit_native) + set_property(TARGET Engine APPEND PROPERTY LLVM_LINK_COMPONENTS "MCJIT" "Native") + else() + set_property(TARGET Engine APPEND PROPERTY LLVM_LINK_COMPONENTS "Interpreter") + endif() + + get_property(llvm_components GLOBAL PROPERTY LLVM_COMPONENT_LIBS) + foreach(llvm_component ${llvm_components}) + get_property(link_components TARGET ${llvm_component} PROPERTY LLVM_LINK_COMPONENTS) + llvm_map_components_to_libnames(llvm_libs ${link_components}) + if(llvm_libs) + get_property(libtype TARGET ${llvm_component} PROPERTY LLVM_LIBTYPE) + target_link_libraries(${llvm_component} ${libtype} ${llvm_libs}) + endif() + endforeach() +endfunction() diff --git a/lib/cmake/llvm/LLVM-Config.cmake b/lib/cmake/llvm/LLVM-Config.cmake index c3fa59e..5d9ec79 100644 --- a/lib/cmake/llvm/LLVM-Config.cmake +++ b/lib/cmake/llvm/LLVM-Config.cmake @@ -28,7 +28,9 @@ function(is_llvm_target_library library return_var) string(TOUPPER "${LLVM_TARGETS_TO_BUILD}" targets) elseif(ARG_OMITTED_TARGETS) set(omitted_targets ${LLVM_ALL_TARGETS}) - list(REMOVE_ITEM omitted_targets "${LLVM_TARGETS_TO_BUILD}") + if (LLVM_TARGETS_TO_BUILD) + list(REMOVE_ITEM omitted_targets ${LLVM_TARGETS_TO_BUILD}) + endif() string(TOUPPER "${omitted_targets}" targets) else() string(TOUPPER "${LLVM_ALL_TARGETS}" targets) @@ -171,13 +173,6 @@ function(llvm_expand_pseudo_components out_components) list(APPEND expanded_components "${t}CodeGen") endif() endforeach(t) - elseif( c STREQUAL "AllTargetsAsmPrinters" ) - # Link all the asm printers from all the targets - foreach(t ${LLVM_TARGETS_TO_BUILD}) - if( TARGET LLVM${t}AsmPrinter ) - list(APPEND expanded_components "${t}AsmPrinter") - endif() - endforeach(t) elseif( c STREQUAL "AllTargetsAsmParsers" ) # Link all the asm parsers from all the targets foreach(t ${LLVM_TARGETS_TO_BUILD}) @@ -260,6 +255,10 @@ function(llvm_map_components_to_libnames out_libs) # Translate symbolic component names to real libraries: llvm_expand_pseudo_components(link_components ${link_components}) foreach(c ${link_components}) + get_property(c_rename GLOBAL PROPERTY LLVM_COMPONENT_NAME_${c}) + if(c_rename) + set(c ${c_rename}) + endif() if( c STREQUAL "native" ) # already processed elseif( c STREQUAL "backend" ) @@ -305,14 +304,26 @@ function(expand_topologically name required_libs visited_libs) list(APPEND visited_libs ${name}) set(visited_libs ${visited_libs} PARENT_SCOPE) - get_property(lib_deps GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_${name}) + # + get_property(libname GLOBAL PROPERTY LLVM_COMPONENT_NAME_${name}) + if(libname) + set(cname LLVM${libname}) + elseif(TARGET ${name}) + set(cname ${name}) + elseif(TARGET LLVM${name}) + set(cname LLVM${name}) + else() + message(FATAL_ERROR "unknown component ${name}") + endif() + + get_property(lib_deps TARGET ${cname} PROPERTY LLVM_LINK_COMPONENTS) foreach( lib_dep ${lib_deps} ) expand_topologically(${lib_dep} "${required_libs}" "${visited_libs}") set(required_libs ${required_libs} PARENT_SCOPE) set(visited_libs ${visited_libs} PARENT_SCOPE) endforeach() - list(APPEND required_libs ${name}) + list(APPEND required_libs ${cname}) set(required_libs ${required_libs} PARENT_SCOPE) endif() endfunction() diff --git a/lib/cmake/llvm/LLVMConfig.cmake b/lib/cmake/llvm/LLVMConfig.cmake index ded2c52..d2638c7 100644 --- a/lib/cmake/llvm/LLVMConfig.cmake +++ b/lib/cmake/llvm/LLVMConfig.cmake @@ -7,11 +7,12 @@ get_filename_component(LLVM_INSTALL_PREFIX "${LLVM_INSTALL_PREFIX}" PATH) get_filename_component(LLVM_INSTALL_PREFIX "${LLVM_INSTALL_PREFIX}" PATH) get_filename_component(LLVM_INSTALL_PREFIX "${LLVM_INSTALL_PREFIX}" PATH) -set(LLVM_VERSION_MAJOR 11) +set(LLVM_VERSION_MAJOR 12) set(LLVM_VERSION_MINOR 0) set(LLVM_VERSION_PATCH 0) set(LLVM_VERSION_SUFFIX git) -set(LLVM_PACKAGE_VERSION 11.0.0git) +set(LLVM_PACKAGE_VERSION 12.0.0git) +set(LLVM_PACKAGE_BUGREPORT https://bugs.llvm.org/) set(LLVM_BUILD_TYPE Release) @@ -20,15 +21,17 @@ set(LLVM_USE_CRT_MINSIZEREL ) set(LLVM_USE_CRT_RELEASE ) set(LLVM_USE_CRT_RELWITHDEBINFO ) +set(LLVM_USE_SPLIT_DWARF OFF) + set(LLVM_COMMON_DEPENDS ) -set(LLVM_AVAILABLE_LIBS LLVMDemangle;LLVMSupport;LLVMTableGen;LLVMCore;LLVMFuzzMutate;LLVMIRReader;LLVMCodeGen;LLVMSelectionDAG;LLVMAsmPrinter;LLVMMIRParser;LLVMGlobalISel;LLVMBinaryFormat;LLVMBitReader;LLVMBitWriter;LLVMBitstreamReader;LLVMDWARFLinker;LLVMFrontendOpenMP;LLVMTransformUtils;LLVMInstrumentation;LLVMAggressiveInstCombine;LLVMInstCombine;LLVMScalarOpts;LLVMipo;LLVMVectorize;LLVMObjCARCOpts;LLVMCoroutines;LLVMCFGuard;LLVMLinker;LLVMAnalysis;LLVMLTO;LLVMMC;LLVMMCParser;LLVMMCDisassembler;LLVMMCA;LLVMObject;LLVMObjectYAML;LLVMOption;LLVMRemarks;LLVMDebugInfoDWARF;LLVMDebugInfoGSYM;LLVMDebugInfoMSF;LLVMDebugInfoCodeView;LLVMDebugInfoPDB;LLVMSymbolize;LLVMExecutionEngine;LLVMInterpreter;LLVMJITLink;LLVMMCJIT;LLVMOrcError;LLVMOrcJIT;LLVMRuntimeDyld;LLVMTarget;LLVMARMCodeGen;LLVMARMAsmParser;LLVMARMDisassembler;LLVMARMDesc;LLVMARMInfo;LLVMARMUtils;LLVMAArch64CodeGen;LLVMAArch64AsmParser;LLVMAArch64Disassembler;LLVMAArch64Desc;LLVMAArch64Info;LLVMAArch64Utils;LLVMX86CodeGen;LLVMX86AsmParser;LLVMX86Disassembler;LLVMX86Desc;LLVMX86Info;LLVMX86Utils;LLVMAsmParser;LLVMLineEditor;LLVMProfileData;LLVMCoverage;LLVMPasses;LLVMTextAPI;LLVMDlltoolDriver;LLVMLibDriver;LLVMXRay;LLVMWindowsManifest;LTO;Remarks;Polly) +set(LLVM_AVAILABLE_LIBS LLVMDemangle;LLVMSupport;LLVMTableGen;LLVMCore;LLVMFuzzMutate;LLVMFileCheck;LLVMInterfaceStub;LLVMIRReader;LLVMCodeGen;LLVMSelectionDAG;LLVMAsmPrinter;LLVMMIRParser;LLVMGlobalISel;LLVMBinaryFormat;LLVMBitReader;LLVMBitWriter;LLVMBitstreamReader;LLVMDWARFLinker;LLVMExtensions;LLVMFrontendOpenACC;LLVMFrontendOpenMP;LLVMTransformUtils;LLVMInstrumentation;LLVMAggressiveInstCombine;LLVMInstCombine;LLVMScalarOpts;LLVMipo;LLVMVectorize;LLVMHelloNew;LLVMObjCARCOpts;LLVMCoroutines;LLVMCFGuard;LLVMLinker;LLVMAnalysis;LLVMLTO;LLVMMC;LLVMMCParser;LLVMMCDisassembler;LLVMMCA;LLVMObject;LLVMObjectYAML;LLVMOption;LLVMRemarks;LLVMDebugInfoDWARF;LLVMDebugInfoGSYM;LLVMDebugInfoMSF;LLVMDebugInfoCodeView;LLVMDebugInfoPDB;LLVMSymbolize;LLVMExecutionEngine;LLVMInterpreter;LLVMJITLink;LLVMMCJIT;LLVMOrcJIT;LLVMOrcShared;LLVMOrcTargetProcess;LLVMRuntimeDyld;LLVMTarget;LLVMARMCodeGen;LLVMARMAsmParser;LLVMARMDisassembler;LLVMARMDesc;LLVMARMInfo;LLVMARMUtils;LLVMAArch64CodeGen;LLVMAArch64AsmParser;LLVMAArch64Disassembler;LLVMAArch64Desc;LLVMAArch64Info;LLVMAArch64Utils;LLVMX86CodeGen;LLVMX86AsmParser;LLVMX86Disassembler;LLVMX86Desc;LLVMX86Info;LLVMAsmParser;LLVMLineEditor;LLVMProfileData;LLVMCoverage;LLVMPasses;LLVMTextAPI;LLVMDlltoolDriver;LLVMLibDriver;LLVMXRay;LLVMWindowsManifest;LTO;Remarks;Polly) set(LLVM_DYLIB_COMPONENTS all) -set(LLVM_ALL_TARGETS AArch64;AMDGPU;ARM;BPF;Hexagon;Lanai;Mips;MSP430;NVPTX;PowerPC;RISCV;Sparc;SystemZ;WebAssembly;X86;XCore) +set(LLVM_ALL_TARGETS AArch64;AMDGPU;ARM;AVR;BPF;Hexagon;Lanai;Mips;MSP430;NVPTX;PowerPC;RISCV;Sparc;SystemZ;WebAssembly;X86;XCore) set(LLVM_TARGETS_TO_BUILD ARM;AArch64;X86) @@ -36,85 +39,90 @@ set(LLVM_TARGETS_WITH_JIT X86;PowerPC;AArch64;ARM;Mips;SystemZ) set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMDemangle ) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMSupport LLVMDemangle) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMTableGen LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMCore LLVMBinaryFormat;LLVMRemarks;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMFuzzMutate LLVMAnalysis;LLVMBitReader;LLVMBitWriter;LLVMCore;LLVMScalarOpts;LLVMSupport;LLVMTarget) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMIRReader LLVMAsmParser;LLVMBitReader;LLVMCore;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMCodeGen LLVMAnalysis;LLVMBitReader;LLVMBitWriter;LLVMCore;LLVMMC;LLVMProfileData;LLVMScalarOpts;LLVMSupport;LLVMTarget;LLVMTransformUtils) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMSelectionDAG LLVMAnalysis;LLVMCodeGen;LLVMCore;LLVMMC;LLVMSupport;LLVMTarget;LLVMTransformUtils) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMAsmPrinter LLVMAnalysis;LLVMBinaryFormat;LLVMCodeGen;LLVMCore;LLVMDebugInfoCodeView;LLVMDebugInfoDWARF;LLVMDebugInfoMSF;LLVMMC;LLVMMCParser;LLVMRemarks;LLVMSupport;LLVMTarget) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMMIRParser LLVMAsmParser;LLVMBinaryFormat;LLVMCodeGen;LLVMCore;LLVMMC;LLVMSupport;LLVMTarget) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMGlobalISel LLVMAnalysis;LLVMCodeGen;LLVMCore;LLVMMC;LLVMSelectionDAG;LLVMSupport;LLVMTarget;LLVMTransformUtils) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMBinaryFormat LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMBitReader LLVMBitstreamReader;LLVMCore;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMBitWriter LLVMAnalysis;LLVMCore;LLVMMC;LLVMObject;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMBitstreamReader LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMDWARFLinker LLVMAsmPrinter;LLVMCodeGen;LLVMDebugInfoDWARF;LLVMMC;LLVMObject;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMFrontendOpenMP LLVMCore;LLVMSupport;LLVMTransformUtils) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMTransformUtils LLVMAnalysis;LLVMCore;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMInstrumentation LLVMAnalysis;LLVMCore;LLVMMC;LLVMProfileData;LLVMSupport;LLVMTransformUtils) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMAggressiveInstCombine LLVMAnalysis;LLVMCore;LLVMSupport;LLVMTransformUtils) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMInstCombine LLVMAnalysis;LLVMCore;LLVMSupport;LLVMTransformUtils) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMScalarOpts LLVMAggressiveInstCombine;LLVMAnalysis;LLVMCore;LLVMInstCombine;LLVMSupport;LLVMTransformUtils) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMipo LLVMAggressiveInstCombine;LLVMAnalysis;LLVMBitReader;LLVMBitWriter;LLVMCore;LLVMIRReader;LLVMInstCombine;LLVMInstrumentation;LLVMLinker;LLVMObject;LLVMProfileData;LLVMScalarOpts;LLVMSupport;LLVMTransformUtils;LLVMVectorize) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMVectorize LLVMAnalysis;LLVMCore;LLVMSupport;LLVMTransformUtils) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMObjCARCOpts LLVMAnalysis;LLVMCore;LLVMSupport;LLVMTransformUtils) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMCoroutines LLVMAnalysis;LLVMCore;LLVMScalarOpts;LLVMSupport;LLVMTransformUtils;LLVMipo) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMCFGuard LLVMCore;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMLinker LLVMCore;LLVMSupport;LLVMTransformUtils) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMAnalysis LLVMBinaryFormat;LLVMCore;LLVMObject;LLVMProfileData;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMLTO LLVMAggressiveInstCombine;LLVMAnalysis;LLVMBitReader;LLVMBitWriter;LLVMCodeGen;LLVMCore;LLVMInstCombine;LLVMLinker;LLVMMC;LLVMObjCARCOpts;LLVMObject;LLVMPasses;LLVMRemarks;LLVMScalarOpts;LLVMSupport;LLVMTarget;LLVMTransformUtils;LLVMipo) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMMC LLVMBinaryFormat;LLVMDebugInfoCodeView;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMMCParser LLVMMC;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMMCDisassembler LLVMMC;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMMCA LLVMMC;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMObject LLVMBinaryFormat;LLVMBitReader;LLVMCore;LLVMMC;LLVMMCParser;LLVMSupport;LLVMTextAPI) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMObjectYAML LLVMDebugInfoCodeView;LLVMMC;LLVMObject;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMOption LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMRemarks LLVMBitstreamReader;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMDebugInfoDWARF LLVMBinaryFormat;LLVMMC;LLVMObject;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMDebugInfoGSYM LLVMMC;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMDebugInfoMSF LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMDebugInfoCodeView LLVMDebugInfoMSF;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMDebugInfoPDB LLVMDebugInfoCodeView;LLVMDebugInfoMSF;LLVMObject;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMSymbolize LLVMDebugInfoDWARF;LLVMDebugInfoPDB;LLVMDemangle;LLVMObject;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMExecutionEngine LLVMCore;LLVMMC;LLVMObject;LLVMRuntimeDyld;LLVMSupport;LLVMTarget) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMInterpreter LLVMCodeGen;LLVMCore;LLVMExecutionEngine;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMJITLink LLVMBinaryFormat;LLVMObject;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMMCJIT LLVMCore;LLVMExecutionEngine;LLVMObject;LLVMRuntimeDyld;LLVMSupport;LLVMTarget) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMOrcError LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMOrcJIT LLVMCore;LLVMExecutionEngine;LLVMJITLink;LLVMMC;LLVMObject;LLVMOrcError;LLVMPasses;LLVMRuntimeDyld;LLVMSupport;LLVMTarget;LLVMTransformUtils) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMRuntimeDyld LLVMMC;LLVMObject;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMTarget LLVMAnalysis;LLVMCore;LLVMMC;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMARMCodeGen LLVMARMDesc;LLVMARMInfo;LLVMARMUtils;LLVMAnalysis;LLVMAsmPrinter;LLVMCFGuard;LLVMCodeGen;LLVMCore;LLVMGlobalISel;LLVMMC;LLVMScalarOpts;LLVMSelectionDAG;LLVMSupport;LLVMTarget;LLVMTransformUtils) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMARMAsmParser LLVMARMDesc;LLVMARMInfo;LLVMARMUtils;LLVMMC;LLVMMCParser;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMARMDisassembler LLVMARMDesc;LLVMARMInfo;LLVMARMUtils;LLVMMCDisassembler;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMARMDesc LLVMARMInfo;LLVMARMUtils;LLVMMC;LLVMMCDisassembler;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMARMInfo LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMARMUtils LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMAArch64CodeGen LLVMAArch64Desc;LLVMAArch64Info;LLVMAArch64Utils;LLVMAnalysis;LLVMAsmPrinter;LLVMCFGuard;LLVMCodeGen;LLVMCore;LLVMGlobalISel;LLVMMC;LLVMScalarOpts;LLVMSelectionDAG;LLVMSupport;LLVMTarget;LLVMTransformUtils) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMAArch64AsmParser LLVMAArch64Desc;LLVMAArch64Info;LLVMAArch64Utils;LLVMMC;LLVMMCParser;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMAArch64Disassembler LLVMAArch64Desc;LLVMAArch64Info;LLVMAArch64Utils;LLVMMC;LLVMMCDisassembler;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMAArch64Desc LLVMAArch64Info;LLVMAArch64Utils;LLVMMC;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMAArch64Info LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMAArch64Utils LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMX86CodeGen LLVMAnalysis;LLVMAsmPrinter;LLVMCFGuard;LLVMCodeGen;LLVMCore;LLVMGlobalISel;LLVMMC;LLVMProfileData;LLVMSelectionDAG;LLVMSupport;LLVMTarget;LLVMX86Desc;LLVMX86Info;LLVMX86Utils) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMX86AsmParser LLVMMC;LLVMMCParser;LLVMSupport;LLVMX86Desc;LLVMX86Info) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMX86Disassembler LLVMMCDisassembler;LLVMSupport;LLVMX86Info) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMX86Desc LLVMMC;LLVMMCDisassembler;LLVMObject;LLVMSupport;LLVMX86Info;LLVMX86Utils) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMX86Info LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMX86Utils LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMAsmParser LLVMBinaryFormat;LLVMCore;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMLineEditor LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMProfileData LLVMCore;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMCoverage LLVMCore;LLVMObject;LLVMProfileData;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMPasses LLVMAggressiveInstCombine;LLVMAnalysis;LLVMCodeGen;LLVMCore;LLVMInstCombine;LLVMInstrumentation;LLVMScalarOpts;LLVMSupport;LLVMTarget;LLVMTransformUtils;LLVMVectorize;LLVMipo) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMTextAPI LLVMBinaryFormat;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMDlltoolDriver LLVMObject;LLVMOption;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMLibDriver LLVMBinaryFormat;LLVMBitReader;LLVMObject;LLVMOption;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMXRay LLVMObject;LLVMSupport) -set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMWindowsManifest LLVMSupport) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMSupport ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMTableGen ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMCore ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMFuzzMutate ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMFileCheck ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMInterfaceStub ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMIRReader ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMCodeGen ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMSelectionDAG ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMAsmPrinter ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMMIRParser ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMGlobalISel ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMBinaryFormat ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMBitReader ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMBitWriter ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMBitstreamReader ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMDWARFLinker ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMExtensions ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMFrontendOpenACC ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMFrontendOpenMP ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMTransformUtils ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMInstrumentation ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMAggressiveInstCombine ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMInstCombine ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMScalarOpts ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMipo ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMVectorize ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMHelloNew ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMObjCARCOpts ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMCoroutines ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMCFGuard ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMLinker ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMAnalysis ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMLTO ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMMC ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMMCParser ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMMCDisassembler ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMMCA ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMObject ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMObjectYAML ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMOption ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMRemarks ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMDebugInfoDWARF ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMDebugInfoGSYM ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMDebugInfoMSF ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMDebugInfoCodeView ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMDebugInfoPDB ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMSymbolize ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMExecutionEngine ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMInterpreter ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMJITLink ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMMCJIT ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMOrcJIT ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMOrcShared ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMOrcTargetProcess ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMRuntimeDyld ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMTarget ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMARMCodeGen ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMARMAsmParser ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMARMDisassembler ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMARMDesc ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMARMInfo ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMARMUtils ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMAArch64CodeGen ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMAArch64AsmParser ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMAArch64Disassembler ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMAArch64Desc ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMAArch64Info ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMAArch64Utils ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMX86CodeGen ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMX86AsmParser ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMX86Disassembler ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMX86Desc ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMX86Info ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMAsmParser ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMLineEditor ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMProfileData ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMCoverage ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMPasses ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMTextAPI ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMDlltoolDriver ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMLibDriver ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMXRay ) +set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LLVMWindowsManifest ) set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_LTO ) set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_Remarks ) set_property(GLOBAL PROPERTY LLVMBUILD_LIB_DEPS_Polly ) @@ -123,6 +131,8 @@ set(TARGET_TRIPLE "x86_64-unknown-linux-gnu") set(LLVM_ABI_BREAKING_CHECKS WITH_ASSERTS) +set(LLVM_ENABLE_WARNINGS OFF) + set(LLVM_ENABLE_EXPENSIVE_CHECKS OFF) set(LLVM_ENABLE_ASSERTIONS OFF) @@ -131,15 +141,21 @@ set(LLVM_ENABLE_EH OFF) set(LLVM_ENABLE_RTTI OFF) -set(LLVM_ENABLE_TERMINFO OFF) +set(LLVM_ENABLE_TERMINFO 0) set(LLVM_ENABLE_THREADS ON) set(LLVM_ENABLE_UNWIND_TABLES ON) -set(LLVM_ENABLE_ZLIB YES) +set(LLVM_ENABLE_ZLIB 1) +if(LLVM_ENABLE_ZLIB) + find_package(ZLIB) +endif() -set(LLVM_LIBXML2_ENABLED 0) +set(LLVM_ENABLE_LIBXML2 ) +if(LLVM_ENABLE_LIBXML2) + find_package(LibXml2) +endif() set(LLVM_WITH_Z3 ) @@ -185,18 +201,27 @@ set(LLVM_HAVE_OPT_VIEWER_MODULES 0) set(LLVM_CONFIGURATION_TYPES ) set(LLVM_ENABLE_SHARED_LIBS OFF) +set(LLVM_DEFAULT_EXTERNAL_LIT "/root/build/build/llvm/stage3/./bin/llvm-lit") +set(LLVM_LIT_ARGS "-sv") + if(NOT TARGET LLVMSupport) - set(LLVM_EXPORTED_TARGETS "LLVMDemangle;LLVMSupport;LLVMTableGen;llvm-tblgen;LLVMCore;LLVMFuzzMutate;LLVMIRReader;LLVMCodeGen;LLVMSelectionDAG;LLVMAsmPrinter;LLVMMIRParser;LLVMGlobalISel;LLVMBinaryFormat;LLVMBitReader;LLVMBitWriter;LLVMBitstreamReader;LLVMDWARFLinker;LLVMFrontendOpenMP;LLVMTransformUtils;LLVMInstrumentation;LLVMAggressiveInstCombine;LLVMInstCombine;LLVMScalarOpts;LLVMipo;LLVMVectorize;LLVMObjCARCOpts;LLVMCoroutines;LLVMCFGuard;LLVMLinker;LLVMAnalysis;LLVMLTO;LLVMMC;LLVMMCParser;LLVMMCDisassembler;LLVMMCA;LLVMObject;LLVMObjectYAML;LLVMOption;LLVMRemarks;LLVMDebugInfoDWARF;LLVMDebugInfoGSYM;LLVMDebugInfoMSF;LLVMDebugInfoCodeView;LLVMDebugInfoPDB;LLVMSymbolize;LLVMExecutionEngine;LLVMInterpreter;LLVMJITLink;LLVMMCJIT;LLVMOrcError;LLVMOrcJIT;LLVMRuntimeDyld;LLVMTarget;LLVMARMCodeGen;LLVMARMAsmParser;LLVMARMDisassembler;LLVMARMDesc;LLVMARMInfo;LLVMARMUtils;LLVMAArch64CodeGen;LLVMAArch64AsmParser;LLVMAArch64Disassembler;LLVMAArch64Desc;LLVMAArch64Info;LLVMAArch64Utils;LLVMX86CodeGen;LLVMX86AsmParser;LLVMX86Disassembler;LLVMX86Desc;LLVMX86Info;LLVMX86Utils;LLVMAsmParser;LLVMLineEditor;LLVMProfileData;LLVMCoverage;LLVMPasses;LLVMTextAPI;LLVMDlltoolDriver;LLVMLibDriver;LLVMXRay;LLVMWindowsManifest;LTO;LLVMgold;llvm-ar;llvm-config;llvm-lto;llvm-profdata;clang-tblgen;bugpoint;dsymutil;llc;lli;llvm-as;llvm-bcanalyzer;llvm-c-test;llvm-cat;llvm-cfi-verify;llvm-cov;llvm-cvtres;llvm-cxxdump;llvm-cxxfilt;llvm-cxxmap;llvm-diff;llvm-dis;llvm-dwarfdump;llvm-dwp;llvm-elfabi;llvm-exegesis;llvm-extract;llvm-ifs;llvm-jitlink;llvm-link;llvm-lipo;llvm-lto2;llvm-mc;llvm-mca;llvm-modextract;llvm-mt;llvm-nm;llvm-objcopy;llvm-objdump;llvm-opt-report;llvm-pdbutil;llvm-rc;llvm-readobj;llvm-reduce;llvm-rtdyld;llvm-size;llvm-split;llvm-stress;llvm-strings;llvm-symbolizer;llvm-undname;llvm-xray;obj2yaml;opt;Remarks;sancov;sanstats;verify-uselistorder;yaml2obj;PollyISL;PollyPPCG;Polly;LLVMPolly") + set(LLVM_EXPORTED_TARGETS "LLVMDemangle;LLVMSupport;LLVMTableGen;llvm-tblgen;LLVMCore;LLVMFuzzMutate;LLVMFileCheck;LLVMInterfaceStub;LLVMIRReader;LLVMCodeGen;LLVMSelectionDAG;LLVMAsmPrinter;LLVMMIRParser;LLVMGlobalISel;LLVMBinaryFormat;LLVMBitReader;LLVMBitWriter;LLVMBitstreamReader;LLVMDWARFLinker;LLVMExtensions;LLVMFrontendOpenACC;LLVMFrontendOpenMP;LLVMTransformUtils;LLVMInstrumentation;LLVMAggressiveInstCombine;LLVMInstCombine;LLVMScalarOpts;LLVMipo;LLVMVectorize;LLVMHelloNew;LLVMObjCARCOpts;LLVMCoroutines;LLVMCFGuard;LLVMLinker;LLVMAnalysis;LLVMLTO;LLVMMC;LLVMMCParser;LLVMMCDisassembler;LLVMMCA;LLVMObject;LLVMObjectYAML;LLVMOption;LLVMRemarks;LLVMDebugInfoDWARF;LLVMDebugInfoGSYM;LLVMDebugInfoMSF;LLVMDebugInfoCodeView;LLVMDebugInfoPDB;LLVMSymbolize;LLVMExecutionEngine;LLVMInterpreter;LLVMJITLink;LLVMMCJIT;LLVMOrcJIT;LLVMOrcShared;LLVMOrcTargetProcess;LLVMRuntimeDyld;LLVMTarget;LLVMARMCodeGen;LLVMARMAsmParser;LLVMARMDisassembler;LLVMARMDesc;LLVMARMInfo;LLVMARMUtils;LLVMAArch64CodeGen;LLVMAArch64AsmParser;LLVMAArch64Disassembler;LLVMAArch64Desc;LLVMAArch64Info;LLVMAArch64Utils;LLVMX86CodeGen;LLVMX86AsmParser;LLVMX86Disassembler;LLVMX86Desc;LLVMX86Info;LLVMAsmParser;LLVMLineEditor;LLVMProfileData;LLVMCoverage;LLVMPasses;LLVMTextAPI;LLVMDlltoolDriver;LLVMLibDriver;LLVMXRay;LLVMWindowsManifest;LTO;LLVMgold;llvm-ar;llvm-config;llvm-lto;llvm-profdata;clang-tblgen;bugpoint;dsymutil;llc;lli;llvm-as;llvm-bcanalyzer;llvm-c-test;llvm-cat;llvm-cfi-verify;llvm-cov;llvm-cvtres;llvm-cxxdump;llvm-cxxfilt;llvm-cxxmap;llvm-diff;llvm-dis;llvm-dwarfdump;llvm-dwp;llvm-elfabi;llvm-exegesis;llvm-extract;llvm-gsymutil;llvm-ifs;llvm-jitlink;llvm-libtool-darwin;llvm-link;llvm-lipo;llvm-lto2;llvm-mc;llvm-mca;llvm-ml;llvm-modextract;llvm-mt;llvm-nm;llvm-objcopy;llvm-objdump;llvm-opt-report;llvm-pdbutil;llvm-profgen;llvm-rc;llvm-readobj;llvm-reduce;llvm-rtdyld;llvm-size;llvm-split;llvm-stress;llvm-strings;llvm-symbolizer;llvm-undname;llvm-xray;opt;Remarks;sancov;sanstats;split-file;verify-uselistorder;PollyISL;PollyPPCG;Polly;LLVMPolly") include("${LLVM_CMAKE_DIR}/LLVMExports.cmake") endif() -# By creating intrinsics_gen here, subprojects that depend on LLVM's -# tablegen-generated headers can always depend on this target whether building -# in-tree with LLVM or not. +# By creating intrinsics_gen, omp_gen and acc_gen here, subprojects that depend +# on LLVM's tablegen-generated headers can always depend on this target whether +# building in-tree with LLVM or not. if(NOT TARGET intrinsics_gen) add_custom_target(intrinsics_gen) endif() +if(NOT TARGET omp_gen) + add_custom_target(omp_gen) +endif() +if(NOT TARGET acc_gen) + add_custom_target(acc_gen) +endif() set_property(GLOBAL PROPERTY LLVM_TARGETS_CONFIGURED On) include(${LLVM_CMAKE_DIR}/LLVM-Config.cmake) diff --git a/lib/cmake/llvm/LLVMConfigExtensions.cmake b/lib/cmake/llvm/LLVMConfigExtensions.cmake new file mode 100644 index 0000000..7bc4079 --- /dev/null +++ b/lib/cmake/llvm/LLVMConfigExtensions.cmake @@ -0,0 +1 @@ +set(LLVM_STATIC_EXTENSIONS Polly)
\ No newline at end of file diff --git a/lib/cmake/llvm/LLVMConfigVersion.cmake b/lib/cmake/llvm/LLVMConfigVersion.cmake index b4b4858..c6e2d2b 100644 --- a/lib/cmake/llvm/LLVMConfigVersion.cmake +++ b/lib/cmake/llvm/LLVMConfigVersion.cmake @@ -1,8 +1,8 @@ -set(PACKAGE_VERSION "11.0.0git") +set(PACKAGE_VERSION "12.0.0git") # LLVM is API-compatible only with matching major.minor versions # and patch versions not less than that requested. -if("11.0" VERSION_EQUAL +if("12.0" VERSION_EQUAL "${PACKAGE_FIND_VERSION_MAJOR}.${PACKAGE_FIND_VERSION_MINOR}" AND NOT "0" VERSION_LESS "${PACKAGE_FIND_VERSION_PATCH}") set(PACKAGE_VERSION_COMPATIBLE 1) diff --git a/lib/cmake/llvm/LLVMExports-release.cmake b/lib/cmake/llvm/LLVMExports-release.cmake index 3b542c2..5087118 100644 --- a/lib/cmake/llvm/LLVMExports-release.cmake +++ b/lib/cmake/llvm/LLVMExports-release.cmake @@ -64,6 +64,26 @@ set_target_properties(LLVMFuzzMutate PROPERTIES list(APPEND _IMPORT_CHECK_TARGETS LLVMFuzzMutate ) list(APPEND _IMPORT_CHECK_FILES_FOR_LLVMFuzzMutate "${_IMPORT_PREFIX}/lib/libLLVMFuzzMutate.a" ) +# Import target "LLVMFileCheck" for configuration "Release" +set_property(TARGET LLVMFileCheck APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(LLVMFileCheck PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libLLVMFileCheck.a" + ) + +list(APPEND _IMPORT_CHECK_TARGETS LLVMFileCheck ) +list(APPEND _IMPORT_CHECK_FILES_FOR_LLVMFileCheck "${_IMPORT_PREFIX}/lib/libLLVMFileCheck.a" ) + +# Import target "LLVMInterfaceStub" for configuration "Release" +set_property(TARGET LLVMInterfaceStub APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(LLVMInterfaceStub PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libLLVMInterfaceStub.a" + ) + +list(APPEND _IMPORT_CHECK_TARGETS LLVMInterfaceStub ) +list(APPEND _IMPORT_CHECK_FILES_FOR_LLVMInterfaceStub "${_IMPORT_PREFIX}/lib/libLLVMInterfaceStub.a" ) + # Import target "LLVMIRReader" for configuration "Release" set_property(TARGET LLVMIRReader APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) set_target_properties(LLVMIRReader PROPERTIES @@ -174,6 +194,26 @@ set_target_properties(LLVMDWARFLinker PROPERTIES list(APPEND _IMPORT_CHECK_TARGETS LLVMDWARFLinker ) list(APPEND _IMPORT_CHECK_FILES_FOR_LLVMDWARFLinker "${_IMPORT_PREFIX}/lib/libLLVMDWARFLinker.a" ) +# Import target "LLVMExtensions" for configuration "Release" +set_property(TARGET LLVMExtensions APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(LLVMExtensions PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libLLVMExtensions.a" + ) + +list(APPEND _IMPORT_CHECK_TARGETS LLVMExtensions ) +list(APPEND _IMPORT_CHECK_FILES_FOR_LLVMExtensions "${_IMPORT_PREFIX}/lib/libLLVMExtensions.a" ) + +# Import target "LLVMFrontendOpenACC" for configuration "Release" +set_property(TARGET LLVMFrontendOpenACC APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(LLVMFrontendOpenACC PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libLLVMFrontendOpenACC.a" + ) + +list(APPEND _IMPORT_CHECK_TARGETS LLVMFrontendOpenACC ) +list(APPEND _IMPORT_CHECK_FILES_FOR_LLVMFrontendOpenACC "${_IMPORT_PREFIX}/lib/libLLVMFrontendOpenACC.a" ) + # Import target "LLVMFrontendOpenMP" for configuration "Release" set_property(TARGET LLVMFrontendOpenMP APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) set_target_properties(LLVMFrontendOpenMP PROPERTIES @@ -254,6 +294,16 @@ set_target_properties(LLVMVectorize PROPERTIES list(APPEND _IMPORT_CHECK_TARGETS LLVMVectorize ) list(APPEND _IMPORT_CHECK_FILES_FOR_LLVMVectorize "${_IMPORT_PREFIX}/lib/libLLVMVectorize.a" ) +# Import target "LLVMHelloNew" for configuration "Release" +set_property(TARGET LLVMHelloNew APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(LLVMHelloNew PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libLLVMHelloNew.a" + ) + +list(APPEND _IMPORT_CHECK_TARGETS LLVMHelloNew ) +list(APPEND _IMPORT_CHECK_FILES_FOR_LLVMHelloNew "${_IMPORT_PREFIX}/lib/libLLVMHelloNew.a" ) + # Import target "LLVMObjCARCOpts" for configuration "Release" set_property(TARGET LLVMObjCARCOpts APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) set_target_properties(LLVMObjCARCOpts PROPERTIES @@ -494,16 +544,6 @@ set_target_properties(LLVMMCJIT PROPERTIES list(APPEND _IMPORT_CHECK_TARGETS LLVMMCJIT ) list(APPEND _IMPORT_CHECK_FILES_FOR_LLVMMCJIT "${_IMPORT_PREFIX}/lib/libLLVMMCJIT.a" ) -# Import target "LLVMOrcError" for configuration "Release" -set_property(TARGET LLVMOrcError APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) -set_target_properties(LLVMOrcError PROPERTIES - IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" - IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libLLVMOrcError.a" - ) - -list(APPEND _IMPORT_CHECK_TARGETS LLVMOrcError ) -list(APPEND _IMPORT_CHECK_FILES_FOR_LLVMOrcError "${_IMPORT_PREFIX}/lib/libLLVMOrcError.a" ) - # Import target "LLVMOrcJIT" for configuration "Release" set_property(TARGET LLVMOrcJIT APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) set_target_properties(LLVMOrcJIT PROPERTIES @@ -514,6 +554,26 @@ set_target_properties(LLVMOrcJIT PROPERTIES list(APPEND _IMPORT_CHECK_TARGETS LLVMOrcJIT ) list(APPEND _IMPORT_CHECK_FILES_FOR_LLVMOrcJIT "${_IMPORT_PREFIX}/lib/libLLVMOrcJIT.a" ) +# Import target "LLVMOrcShared" for configuration "Release" +set_property(TARGET LLVMOrcShared APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(LLVMOrcShared PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libLLVMOrcShared.a" + ) + +list(APPEND _IMPORT_CHECK_TARGETS LLVMOrcShared ) +list(APPEND _IMPORT_CHECK_FILES_FOR_LLVMOrcShared "${_IMPORT_PREFIX}/lib/libLLVMOrcShared.a" ) + +# Import target "LLVMOrcTargetProcess" for configuration "Release" +set_property(TARGET LLVMOrcTargetProcess APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(LLVMOrcTargetProcess PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libLLVMOrcTargetProcess.a" + ) + +list(APPEND _IMPORT_CHECK_TARGETS LLVMOrcTargetProcess ) +list(APPEND _IMPORT_CHECK_FILES_FOR_LLVMOrcTargetProcess "${_IMPORT_PREFIX}/lib/libLLVMOrcTargetProcess.a" ) + # Import target "LLVMRuntimeDyld" for configuration "Release" set_property(TARGET LLVMRuntimeDyld APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) set_target_properties(LLVMRuntimeDyld PROPERTIES @@ -704,16 +764,6 @@ set_target_properties(LLVMX86Info PROPERTIES list(APPEND _IMPORT_CHECK_TARGETS LLVMX86Info ) list(APPEND _IMPORT_CHECK_FILES_FOR_LLVMX86Info "${_IMPORT_PREFIX}/lib/libLLVMX86Info.a" ) -# Import target "LLVMX86Utils" for configuration "Release" -set_property(TARGET LLVMX86Utils APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) -set_target_properties(LLVMX86Utils PROPERTIES - IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" - IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libLLVMX86Utils.a" - ) - -list(APPEND _IMPORT_CHECK_TARGETS LLVMX86Utils ) -list(APPEND _IMPORT_CHECK_FILES_FOR_LLVMX86Utils "${_IMPORT_PREFIX}/lib/libLLVMX86Utils.a" ) - # Import target "LLVMAsmParser" for configuration "Release" set_property(TARGET LLVMAsmParser APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) set_target_properties(LLVMAsmParser PROPERTIES @@ -817,16 +867,17 @@ list(APPEND _IMPORT_CHECK_FILES_FOR_LLVMWindowsManifest "${_IMPORT_PREFIX}/lib/l # Import target "LTO" for configuration "Release" set_property(TARGET LTO APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) set_target_properties(LTO PROPERTIES - IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libLTO.so.11git" - IMPORTED_SONAME_RELEASE "libLTO.so.11git" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libLTO.so.12git" + IMPORTED_SONAME_RELEASE "libLTO.so.12git" ) list(APPEND _IMPORT_CHECK_TARGETS LTO ) -list(APPEND _IMPORT_CHECK_FILES_FOR_LTO "${_IMPORT_PREFIX}/lib/libLTO.so.11git" ) +list(APPEND _IMPORT_CHECK_FILES_FOR_LTO "${_IMPORT_PREFIX}/lib/libLTO.so.12git" ) # Import target "LLVMgold" for configuration "Release" set_property(TARGET LLVMgold APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) set_target_properties(LLVMgold PROPERTIES + IMPORTED_COMMON_LANGUAGE_RUNTIME_RELEASE "" IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/LLVMgold.so" IMPORTED_NO_SONAME_RELEASE "TRUE" ) @@ -1059,6 +1110,15 @@ set_target_properties(llvm-extract PROPERTIES list(APPEND _IMPORT_CHECK_TARGETS llvm-extract ) list(APPEND _IMPORT_CHECK_FILES_FOR_llvm-extract "${_IMPORT_PREFIX}/bin/llvm-extract" ) +# Import target "llvm-gsymutil" for configuration "Release" +set_property(TARGET llvm-gsymutil APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(llvm-gsymutil PROPERTIES + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/bin/llvm-gsymutil" + ) + +list(APPEND _IMPORT_CHECK_TARGETS llvm-gsymutil ) +list(APPEND _IMPORT_CHECK_FILES_FOR_llvm-gsymutil "${_IMPORT_PREFIX}/bin/llvm-gsymutil" ) + # Import target "llvm-ifs" for configuration "Release" set_property(TARGET llvm-ifs APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) set_target_properties(llvm-ifs PROPERTIES @@ -1077,6 +1137,15 @@ set_target_properties(llvm-jitlink PROPERTIES list(APPEND _IMPORT_CHECK_TARGETS llvm-jitlink ) list(APPEND _IMPORT_CHECK_FILES_FOR_llvm-jitlink "${_IMPORT_PREFIX}/bin/llvm-jitlink" ) +# Import target "llvm-libtool-darwin" for configuration "Release" +set_property(TARGET llvm-libtool-darwin APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(llvm-libtool-darwin PROPERTIES + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/bin/llvm-libtool-darwin" + ) + +list(APPEND _IMPORT_CHECK_TARGETS llvm-libtool-darwin ) +list(APPEND _IMPORT_CHECK_FILES_FOR_llvm-libtool-darwin "${_IMPORT_PREFIX}/bin/llvm-libtool-darwin" ) + # Import target "llvm-link" for configuration "Release" set_property(TARGET llvm-link APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) set_target_properties(llvm-link PROPERTIES @@ -1122,6 +1191,15 @@ set_target_properties(llvm-mca PROPERTIES list(APPEND _IMPORT_CHECK_TARGETS llvm-mca ) list(APPEND _IMPORT_CHECK_FILES_FOR_llvm-mca "${_IMPORT_PREFIX}/bin/llvm-mca" ) +# Import target "llvm-ml" for configuration "Release" +set_property(TARGET llvm-ml APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(llvm-ml PROPERTIES + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/bin/llvm-ml" + ) + +list(APPEND _IMPORT_CHECK_TARGETS llvm-ml ) +list(APPEND _IMPORT_CHECK_FILES_FOR_llvm-ml "${_IMPORT_PREFIX}/bin/llvm-ml" ) + # Import target "llvm-modextract" for configuration "Release" set_property(TARGET llvm-modextract APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) set_target_properties(llvm-modextract PROPERTIES @@ -1185,6 +1263,15 @@ set_target_properties(llvm-pdbutil PROPERTIES list(APPEND _IMPORT_CHECK_TARGETS llvm-pdbutil ) list(APPEND _IMPORT_CHECK_FILES_FOR_llvm-pdbutil "${_IMPORT_PREFIX}/bin/llvm-pdbutil" ) +# Import target "llvm-profgen" for configuration "Release" +set_property(TARGET llvm-profgen APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(llvm-profgen PROPERTIES + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/bin/llvm-profgen" + ) + +list(APPEND _IMPORT_CHECK_TARGETS llvm-profgen ) +list(APPEND _IMPORT_CHECK_FILES_FOR_llvm-profgen "${_IMPORT_PREFIX}/bin/llvm-profgen" ) + # Import target "llvm-rc" for configuration "Release" set_property(TARGET llvm-rc APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) set_target_properties(llvm-rc PROPERTIES @@ -1284,15 +1371,6 @@ set_target_properties(llvm-xray PROPERTIES list(APPEND _IMPORT_CHECK_TARGETS llvm-xray ) list(APPEND _IMPORT_CHECK_FILES_FOR_llvm-xray "${_IMPORT_PREFIX}/bin/llvm-xray" ) -# Import target "obj2yaml" for configuration "Release" -set_property(TARGET obj2yaml APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) -set_target_properties(obj2yaml PROPERTIES - IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/bin/obj2yaml" - ) - -list(APPEND _IMPORT_CHECK_TARGETS obj2yaml ) -list(APPEND _IMPORT_CHECK_FILES_FOR_obj2yaml "${_IMPORT_PREFIX}/bin/obj2yaml" ) - # Import target "opt" for configuration "Release" set_property(TARGET opt APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) set_target_properties(opt PROPERTIES @@ -1305,12 +1383,12 @@ list(APPEND _IMPORT_CHECK_FILES_FOR_opt "${_IMPORT_PREFIX}/bin/opt" ) # Import target "Remarks" for configuration "Release" set_property(TARGET Remarks APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) set_target_properties(Remarks PROPERTIES - IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libRemarks.so.11git" - IMPORTED_SONAME_RELEASE "libRemarks.so.11git" + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libRemarks.so.12git" + IMPORTED_SONAME_RELEASE "libRemarks.so.12git" ) list(APPEND _IMPORT_CHECK_TARGETS Remarks ) -list(APPEND _IMPORT_CHECK_FILES_FOR_Remarks "${_IMPORT_PREFIX}/lib/libRemarks.so.11git" ) +list(APPEND _IMPORT_CHECK_FILES_FOR_Remarks "${_IMPORT_PREFIX}/lib/libRemarks.so.12git" ) # Import target "sancov" for configuration "Release" set_property(TARGET sancov APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) @@ -1330,6 +1408,15 @@ set_target_properties(sanstats PROPERTIES list(APPEND _IMPORT_CHECK_TARGETS sanstats ) list(APPEND _IMPORT_CHECK_FILES_FOR_sanstats "${_IMPORT_PREFIX}/bin/sanstats" ) +# Import target "split-file" for configuration "Release" +set_property(TARGET split-file APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) +set_target_properties(split-file PROPERTIES + IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/bin/split-file" + ) + +list(APPEND _IMPORT_CHECK_TARGETS split-file ) +list(APPEND _IMPORT_CHECK_FILES_FOR_split-file "${_IMPORT_PREFIX}/bin/split-file" ) + # Import target "verify-uselistorder" for configuration "Release" set_property(TARGET verify-uselistorder APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) set_target_properties(verify-uselistorder PROPERTIES @@ -1339,15 +1426,6 @@ set_target_properties(verify-uselistorder PROPERTIES list(APPEND _IMPORT_CHECK_TARGETS verify-uselistorder ) list(APPEND _IMPORT_CHECK_FILES_FOR_verify-uselistorder "${_IMPORT_PREFIX}/bin/verify-uselistorder" ) -# Import target "yaml2obj" for configuration "Release" -set_property(TARGET yaml2obj APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) -set_target_properties(yaml2obj PROPERTIES - IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/bin/yaml2obj" - ) - -list(APPEND _IMPORT_CHECK_TARGETS yaml2obj ) -list(APPEND _IMPORT_CHECK_FILES_FOR_yaml2obj "${_IMPORT_PREFIX}/bin/yaml2obj" ) - # Import target "PollyISL" for configuration "Release" set_property(TARGET PollyISL APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) set_target_properties(PollyISL PROPERTIES @@ -1381,6 +1459,7 @@ list(APPEND _IMPORT_CHECK_FILES_FOR_Polly "${_IMPORT_PREFIX}/lib/libPolly.a" ) # Import target "LLVMPolly" for configuration "Release" set_property(TARGET LLVMPolly APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) set_target_properties(LLVMPolly PROPERTIES + IMPORTED_COMMON_LANGUAGE_RUNTIME_RELEASE "" IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/LLVMPolly.so" IMPORTED_NO_SONAME_RELEASE "TRUE" ) diff --git a/lib/cmake/llvm/LLVMExports.cmake b/lib/cmake/llvm/LLVMExports.cmake index 37dfe20..fe5f6db 100644 --- a/lib/cmake/llvm/LLVMExports.cmake +++ b/lib/cmake/llvm/LLVMExports.cmake @@ -4,7 +4,7 @@ if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.5) message(FATAL_ERROR "CMake >= 2.6.0 required") endif() cmake_policy(PUSH) -cmake_policy(VERSION 2.6) +cmake_policy(VERSION 2.6...3.17) #---------------------------------------------------------------- # Generated CMake target import file. #---------------------------------------------------------------- @@ -16,7 +16,7 @@ set(CMAKE_IMPORT_FILE_VERSION 1) set(_targetsDefined) set(_targetsNotDefined) set(_expectedTargets) -foreach(_expectedTarget LLVMDemangle LLVMSupport LLVMTableGen llvm-tblgen LLVMCore LLVMFuzzMutate LLVMIRReader LLVMCodeGen LLVMSelectionDAG LLVMAsmPrinter LLVMMIRParser LLVMGlobalISel LLVMBinaryFormat LLVMBitReader LLVMBitWriter LLVMBitstreamReader LLVMDWARFLinker LLVMFrontendOpenMP LLVMTransformUtils LLVMInstrumentation LLVMAggressiveInstCombine LLVMInstCombine LLVMScalarOpts LLVMipo LLVMVectorize LLVMObjCARCOpts LLVMCoroutines LLVMCFGuard LLVMLinker LLVMAnalysis LLVMLTO LLVMMC LLVMMCParser LLVMMCDisassembler LLVMMCA LLVMObject LLVMObjectYAML LLVMOption LLVMRemarks LLVMDebugInfoDWARF LLVMDebugInfoGSYM LLVMDebugInfoMSF LLVMDebugInfoCodeView LLVMDebugInfoPDB LLVMSymbolize LLVMExecutionEngine LLVMInterpreter LLVMJITLink LLVMMCJIT LLVMOrcError LLVMOrcJIT LLVMRuntimeDyld LLVMTarget LLVMARMCodeGen LLVMARMAsmParser LLVMARMDisassembler LLVMARMDesc LLVMARMInfo LLVMARMUtils LLVMAArch64CodeGen LLVMAArch64AsmParser LLVMAArch64Disassembler LLVMAArch64Desc LLVMAArch64Info LLVMAArch64Utils LLVMX86CodeGen LLVMX86AsmParser LLVMX86Disassembler LLVMX86Desc LLVMX86Info LLVMX86Utils LLVMAsmParser LLVMLineEditor LLVMProfileData LLVMCoverage LLVMPasses LLVMTextAPI LLVMDlltoolDriver LLVMLibDriver LLVMXRay LLVMWindowsManifest LTO LLVMgold llvm-ar llvm-config llvm-lto llvm-profdata bugpoint dsymutil llc lli llvm-as llvm-bcanalyzer llvm-c-test llvm-cat llvm-cfi-verify llvm-cov llvm-cvtres llvm-cxxdump llvm-cxxfilt llvm-cxxmap llvm-diff llvm-dis llvm-dwarfdump llvm-dwp llvm-elfabi llvm-exegesis llvm-extract llvm-ifs llvm-jitlink llvm-link llvm-lipo llvm-lto2 llvm-mc llvm-mca llvm-modextract llvm-mt llvm-nm llvm-objcopy llvm-objdump llvm-opt-report llvm-pdbutil llvm-rc llvm-readobj llvm-reduce llvm-rtdyld llvm-size llvm-split llvm-stress llvm-strings llvm-symbolizer llvm-undname llvm-xray obj2yaml opt Remarks sancov sanstats verify-uselistorder yaml2obj PollyISL PollyPPCG Polly LLVMPolly) +foreach(_expectedTarget LLVMDemangle LLVMSupport LLVMTableGen llvm-tblgen LLVMCore LLVMFuzzMutate LLVMFileCheck LLVMInterfaceStub LLVMIRReader LLVMCodeGen LLVMSelectionDAG LLVMAsmPrinter LLVMMIRParser LLVMGlobalISel LLVMBinaryFormat LLVMBitReader LLVMBitWriter LLVMBitstreamReader LLVMDWARFLinker LLVMExtensions LLVMFrontendOpenACC LLVMFrontendOpenMP LLVMTransformUtils LLVMInstrumentation LLVMAggressiveInstCombine LLVMInstCombine LLVMScalarOpts LLVMipo LLVMVectorize LLVMHelloNew LLVMObjCARCOpts LLVMCoroutines LLVMCFGuard LLVMLinker LLVMAnalysis LLVMLTO LLVMMC LLVMMCParser LLVMMCDisassembler LLVMMCA LLVMObject LLVMObjectYAML LLVMOption LLVMRemarks LLVMDebugInfoDWARF LLVMDebugInfoGSYM LLVMDebugInfoMSF LLVMDebugInfoCodeView LLVMDebugInfoPDB LLVMSymbolize LLVMExecutionEngine LLVMInterpreter LLVMJITLink LLVMMCJIT LLVMOrcJIT LLVMOrcShared LLVMOrcTargetProcess LLVMRuntimeDyld LLVMTarget LLVMARMCodeGen LLVMARMAsmParser LLVMARMDisassembler LLVMARMDesc LLVMARMInfo LLVMARMUtils LLVMAArch64CodeGen LLVMAArch64AsmParser LLVMAArch64Disassembler LLVMAArch64Desc LLVMAArch64Info LLVMAArch64Utils LLVMX86CodeGen LLVMX86AsmParser LLVMX86Disassembler LLVMX86Desc LLVMX86Info LLVMAsmParser LLVMLineEditor LLVMProfileData LLVMCoverage LLVMPasses LLVMTextAPI LLVMDlltoolDriver LLVMLibDriver LLVMXRay LLVMWindowsManifest LTO LLVMgold llvm-ar llvm-config llvm-lto llvm-profdata bugpoint dsymutil llc lli llvm-as llvm-bcanalyzer llvm-c-test llvm-cat llvm-cfi-verify llvm-cov llvm-cvtres llvm-cxxdump llvm-cxxfilt llvm-cxxmap llvm-diff llvm-dis llvm-dwarfdump llvm-dwp llvm-elfabi llvm-exegesis llvm-extract llvm-gsymutil llvm-ifs llvm-jitlink llvm-libtool-darwin llvm-link llvm-lipo llvm-lto2 llvm-mc llvm-mca llvm-ml llvm-modextract llvm-mt llvm-nm llvm-objcopy llvm-objdump llvm-opt-report llvm-pdbutil llvm-profgen llvm-rc llvm-readobj llvm-reduce llvm-rtdyld llvm-size llvm-split llvm-stress llvm-strings llvm-symbolizer llvm-undname llvm-xray opt Remarks sancov sanstats split-file verify-uselistorder PollyISL PollyPPCG Polly LLVMPolly) list(APPEND _expectedTargets ${_expectedTarget}) if(NOT TARGET ${_expectedTarget}) list(APPEND _targetsNotDefined ${_expectedTarget}) @@ -57,7 +57,7 @@ add_library(LLVMDemangle STATIC IMPORTED) add_library(LLVMSupport STATIC IMPORTED) set_target_properties(LLVMSupport PROPERTIES - INTERFACE_LINK_LIBRARIES "/usr/lib/x86_64-linux-gnu/libz.so;rt;dl;-lpthread;m;LLVMDemangle" + INTERFACE_LINK_LIBRARIES "rt;dl;-lpthread;m;ZLIB::ZLIB;LLVMDemangle" ) # Create imported target LLVMTableGen @@ -84,6 +84,20 @@ set_target_properties(LLVMFuzzMutate PROPERTIES INTERFACE_LINK_LIBRARIES "LLVMAnalysis;LLVMBitReader;LLVMBitWriter;LLVMCore;LLVMScalarOpts;LLVMSupport;LLVMTarget" ) +# Create imported target LLVMFileCheck +add_library(LLVMFileCheck STATIC IMPORTED) + +set_target_properties(LLVMFileCheck PROPERTIES + INTERFACE_LINK_LIBRARIES "LLVMSupport" +) + +# Create imported target LLVMInterfaceStub +add_library(LLVMInterfaceStub STATIC IMPORTED) + +set_target_properties(LLVMInterfaceStub PROPERTIES + INTERFACE_LINK_LIBRARIES "LLVMMC;LLVMObject;LLVMSupport" +) + # Create imported target LLVMIRReader add_library(LLVMIRReader STATIC IMPORTED) @@ -158,7 +172,21 @@ set_target_properties(LLVMBitstreamReader PROPERTIES add_library(LLVMDWARFLinker STATIC IMPORTED) set_target_properties(LLVMDWARFLinker PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMAsmPrinter;LLVMCodeGen;LLVMDebugInfoDWARF;LLVMMC;LLVMObject;LLVMSupport" + INTERFACE_LINK_LIBRARIES "LLVMBinaryFormat;LLVMDebugInfoDWARF;LLVMAsmPrinter;LLVMCodeGen;LLVMMC;LLVMObject;LLVMSupport" +) + +# Create imported target LLVMExtensions +add_library(LLVMExtensions STATIC IMPORTED) + +set_target_properties(LLVMExtensions PROPERTIES + INTERFACE_LINK_LIBRARIES "LLVMSupport;Polly" +) + +# Create imported target LLVMFrontendOpenACC +add_library(LLVMFrontendOpenACC STATIC IMPORTED) + +set_target_properties(LLVMFrontendOpenACC PROPERTIES + INTERFACE_LINK_LIBRARIES "LLVMSupport" ) # Create imported target LLVMFrontendOpenMP @@ -179,7 +207,7 @@ set_target_properties(LLVMTransformUtils PROPERTIES add_library(LLVMInstrumentation STATIC IMPORTED) set_target_properties(LLVMInstrumentation PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMAnalysis;LLVMCore;LLVMMC;LLVMProfileData;LLVMSupport;LLVMTransformUtils" + INTERFACE_LINK_LIBRARIES "LLVMAnalysis;LLVMCore;LLVMMC;LLVMSupport;LLVMTransformUtils;LLVMProfileData" ) # Create imported target LLVMAggressiveInstCombine @@ -207,7 +235,7 @@ set_target_properties(LLVMScalarOpts PROPERTIES add_library(LLVMipo STATIC IMPORTED) set_target_properties(LLVMipo PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMAggressiveInstCombine;LLVMAnalysis;LLVMBitReader;LLVMBitWriter;LLVMCore;LLVMIRReader;LLVMInstCombine;LLVMInstrumentation;LLVMLinker;LLVMObject;LLVMProfileData;LLVMScalarOpts;LLVMSupport;LLVMTransformUtils;LLVMVectorize" + INTERFACE_LINK_LIBRARIES "LLVMAggressiveInstCombine;LLVMAnalysis;LLVMBitReader;LLVMBitWriter;LLVMCore;LLVMFrontendOpenMP;LLVMInstCombine;LLVMIRReader;LLVMLinker;LLVMObject;LLVMProfileData;LLVMScalarOpts;LLVMSupport;LLVMTransformUtils;LLVMVectorize;LLVMInstrumentation" ) # Create imported target LLVMVectorize @@ -217,6 +245,13 @@ set_target_properties(LLVMVectorize PROPERTIES INTERFACE_LINK_LIBRARIES "LLVMAnalysis;LLVMCore;LLVMSupport;LLVMTransformUtils" ) +# Create imported target LLVMHelloNew +add_library(LLVMHelloNew STATIC IMPORTED) + +set_target_properties(LLVMHelloNew PROPERTIES + INTERFACE_LINK_LIBRARIES "LLVMCore;LLVMSupport" +) + # Create imported target LLVMObjCARCOpts add_library(LLVMObjCARCOpts STATIC IMPORTED) @@ -228,7 +263,7 @@ set_target_properties(LLVMObjCARCOpts PROPERTIES add_library(LLVMCoroutines STATIC IMPORTED) set_target_properties(LLVMCoroutines PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMAnalysis;LLVMCore;LLVMScalarOpts;LLVMSupport;LLVMTransformUtils;LLVMipo" + INTERFACE_LINK_LIBRARIES "LLVMAnalysis;LLVMCore;LLVMipo;LLVMScalarOpts;LLVMSupport;LLVMTransformUtils" ) # Create imported target LLVMCFGuard @@ -242,7 +277,7 @@ set_target_properties(LLVMCFGuard PROPERTIES add_library(LLVMLinker STATIC IMPORTED) set_target_properties(LLVMLinker PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMCore;LLVMSupport;LLVMTransformUtils" + INTERFACE_LINK_LIBRARIES "LLVMCore;LLVMObject;LLVMSupport;LLVMTransformUtils" ) # Create imported target LLVMAnalysis @@ -256,14 +291,14 @@ set_target_properties(LLVMAnalysis PROPERTIES add_library(LLVMLTO STATIC IMPORTED) set_target_properties(LLVMLTO PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMAggressiveInstCombine;LLVMAnalysis;LLVMBitReader;LLVMBitWriter;LLVMCodeGen;LLVMCore;LLVMInstCombine;LLVMLinker;LLVMMC;LLVMObjCARCOpts;LLVMObject;LLVMPasses;LLVMRemarks;LLVMScalarOpts;LLVMSupport;LLVMTarget;LLVMTransformUtils;LLVMipo" + INTERFACE_LINK_LIBRARIES "LLVMAggressiveInstCombine;LLVMAnalysis;LLVMBinaryFormat;LLVMBitReader;LLVMBitWriter;LLVMCodeGen;LLVMCore;LLVMExtensions;LLVMipo;LLVMInstCombine;LLVMLinker;LLVMMC;LLVMObjCARCOpts;LLVMObject;LLVMPasses;LLVMRemarks;LLVMScalarOpts;LLVMSupport;LLVMTarget;LLVMTransformUtils" ) # Create imported target LLVMMC add_library(LLVMMC STATIC IMPORTED) set_target_properties(LLVMMC PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMBinaryFormat;LLVMDebugInfoCodeView;LLVMSupport" + INTERFACE_LINK_LIBRARIES "LLVMSupport;LLVMBinaryFormat;LLVMDebugInfoCodeView" ) # Create imported target LLVMMCParser @@ -291,14 +326,14 @@ set_target_properties(LLVMMCA PROPERTIES add_library(LLVMObject STATIC IMPORTED) set_target_properties(LLVMObject PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMBinaryFormat;LLVMBitReader;LLVMCore;LLVMMC;LLVMMCParser;LLVMSupport;LLVMTextAPI" + INTERFACE_LINK_LIBRARIES "LLVMBitReader;LLVMCore;LLVMMC;LLVMBinaryFormat;LLVMMCParser;LLVMSupport;LLVMTextAPI" ) # Create imported target LLVMObjectYAML add_library(LLVMObjectYAML STATIC IMPORTED) set_target_properties(LLVMObjectYAML PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMDebugInfoCodeView;LLVMMC;LLVMObject;LLVMSupport" + INTERFACE_LINK_LIBRARIES "LLVMBinaryFormat;LLVMObject;LLVMSupport;LLVMDebugInfoCodeView;LLVMMC" ) # Create imported target LLVMOption @@ -319,14 +354,14 @@ set_target_properties(LLVMRemarks PROPERTIES add_library(LLVMDebugInfoDWARF STATIC IMPORTED) set_target_properties(LLVMDebugInfoDWARF PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMBinaryFormat;LLVMMC;LLVMObject;LLVMSupport" + INTERFACE_LINK_LIBRARIES "LLVMBinaryFormat;LLVMObject;LLVMMC;LLVMSupport" ) # Create imported target LLVMDebugInfoGSYM add_library(LLVMDebugInfoGSYM STATIC IMPORTED) set_target_properties(LLVMDebugInfoGSYM PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMMC;LLVMSupport" + INTERFACE_LINK_LIBRARIES "LLVMMC;LLVMObject;LLVMSupport;LLVMDebugInfoDWARF" ) # Create imported target LLVMDebugInfoMSF @@ -340,21 +375,21 @@ set_target_properties(LLVMDebugInfoMSF PROPERTIES add_library(LLVMDebugInfoCodeView STATIC IMPORTED) set_target_properties(LLVMDebugInfoCodeView PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMDebugInfoMSF;LLVMSupport" + INTERFACE_LINK_LIBRARIES "LLVMSupport;LLVMDebugInfoMSF" ) # Create imported target LLVMDebugInfoPDB add_library(LLVMDebugInfoPDB STATIC IMPORTED) set_target_properties(LLVMDebugInfoPDB PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMDebugInfoCodeView;LLVMDebugInfoMSF;LLVMObject;LLVMSupport" + INTERFACE_LINK_LIBRARIES "LLVMBinaryFormat;LLVMObject;LLVMSupport;LLVMDebugInfoCodeView;LLVMDebugInfoMSF" ) # Create imported target LLVMSymbolize add_library(LLVMSymbolize STATIC IMPORTED) set_target_properties(LLVMSymbolize PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMDebugInfoDWARF;LLVMDebugInfoPDB;LLVMDemangle;LLVMObject;LLVMSupport" + INTERFACE_LINK_LIBRARIES "LLVMDebugInfoDWARF;LLVMDebugInfoPDB;LLVMObject;LLVMSupport;LLVMDemangle" ) # Create imported target LLVMExecutionEngine @@ -375,7 +410,7 @@ set_target_properties(LLVMInterpreter PROPERTIES add_library(LLVMJITLink STATIC IMPORTED) set_target_properties(LLVMJITLink PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMBinaryFormat;LLVMObject;LLVMSupport" + INTERFACE_LINK_LIBRARIES "\$<LINK_ONLY:LLVMObject>;\$<LINK_ONLY:LLVMOrcTargetProcess>;\$<LINK_ONLY:LLVMSupport>;LLVMBinaryFormat;LLVMObject;LLVMOrcTargetProcess;LLVMSupport" ) # Create imported target LLVMMCJIT @@ -385,25 +420,32 @@ set_target_properties(LLVMMCJIT PROPERTIES INTERFACE_LINK_LIBRARIES "LLVMCore;LLVMExecutionEngine;LLVMObject;LLVMRuntimeDyld;LLVMSupport;LLVMTarget" ) -# Create imported target LLVMOrcError -add_library(LLVMOrcError STATIC IMPORTED) +# Create imported target LLVMOrcJIT +add_library(LLVMOrcJIT STATIC IMPORTED) + +set_target_properties(LLVMOrcJIT PROPERTIES + INTERFACE_LINK_LIBRARIES "\$<LINK_ONLY:LLVMAnalysis>;\$<LINK_ONLY:LLVMBitReader>;\$<LINK_ONLY:LLVMBitWriter>;\$<LINK_ONLY:LLVMPasses>;LLVMCore;LLVMExecutionEngine;LLVMJITLink;LLVMObject;LLVMOrcShared;LLVMOrcTargetProcess;LLVMMC;LLVMPasses;LLVMRuntimeDyld;LLVMSupport;LLVMTarget;LLVMTransformUtils" +) + +# Create imported target LLVMOrcShared +add_library(LLVMOrcShared STATIC IMPORTED) -set_target_properties(LLVMOrcError PROPERTIES +set_target_properties(LLVMOrcShared PROPERTIES INTERFACE_LINK_LIBRARIES "LLVMSupport" ) -# Create imported target LLVMOrcJIT -add_library(LLVMOrcJIT STATIC IMPORTED) +# Create imported target LLVMOrcTargetProcess +add_library(LLVMOrcTargetProcess STATIC IMPORTED) -set_target_properties(LLVMOrcJIT PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMCore;LLVMExecutionEngine;LLVMJITLink;LLVMMC;LLVMObject;LLVMOrcError;LLVMPasses;LLVMRuntimeDyld;LLVMSupport;LLVMTarget;LLVMTransformUtils;\$<LINK_ONLY:LLVMAnalysis>;\$<LINK_ONLY:LLVMBitReader>;\$<LINK_ONLY:LLVMBitWriter>;\$<LINK_ONLY:LLVMPasses>" +set_target_properties(LLVMOrcTargetProcess PROPERTIES + INTERFACE_LINK_LIBRARIES "LLVMOrcShared;LLVMSupport" ) # Create imported target LLVMRuntimeDyld add_library(LLVMRuntimeDyld STATIC IMPORTED) set_target_properties(LLVMRuntimeDyld PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMMC;LLVMObject;LLVMSupport" + INTERFACE_LINK_LIBRARIES "LLVMCore;LLVMMC;LLVMObject;LLVMSupport" ) # Create imported target LLVMTarget @@ -417,28 +459,28 @@ set_target_properties(LLVMTarget PROPERTIES add_library(LLVMARMCodeGen STATIC IMPORTED) set_target_properties(LLVMARMCodeGen PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMARMDesc;LLVMARMInfo;LLVMARMUtils;LLVMAnalysis;LLVMAsmPrinter;LLVMCFGuard;LLVMCodeGen;LLVMCore;LLVMGlobalISel;LLVMMC;LLVMScalarOpts;LLVMSelectionDAG;LLVMSupport;LLVMTarget;LLVMTransformUtils" + INTERFACE_LINK_LIBRARIES "LLVMARMDesc;LLVMARMInfo;LLVMAnalysis;LLVMAsmPrinter;LLVMCodeGen;LLVMCore;LLVMMC;LLVMScalarOpts;LLVMSelectionDAG;LLVMSupport;LLVMTarget;LLVMGlobalISel;LLVMARMUtils;LLVMTransformUtils;LLVMCFGuard" ) # Create imported target LLVMARMAsmParser add_library(LLVMARMAsmParser STATIC IMPORTED) set_target_properties(LLVMARMAsmParser PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMARMDesc;LLVMARMInfo;LLVMARMUtils;LLVMMC;LLVMMCParser;LLVMSupport" + INTERFACE_LINK_LIBRARIES "LLVMARMDesc;LLVMARMInfo;LLVMMC;LLVMMCParser;LLVMSupport;LLVMARMUtils" ) # Create imported target LLVMARMDisassembler add_library(LLVMARMDisassembler STATIC IMPORTED) set_target_properties(LLVMARMDisassembler PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMARMDesc;LLVMARMInfo;LLVMARMUtils;LLVMMCDisassembler;LLVMSupport" + INTERFACE_LINK_LIBRARIES "LLVMARMDesc;LLVMARMInfo;LLVMMCDisassembler;LLVMSupport;LLVMARMUtils" ) # Create imported target LLVMARMDesc add_library(LLVMARMDesc STATIC IMPORTED) set_target_properties(LLVMARMDesc PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMARMInfo;LLVMARMUtils;LLVMMC;LLVMMCDisassembler;LLVMSupport" + INTERFACE_LINK_LIBRARIES "LLVMARMInfo;LLVMARMUtils;LLVMMC;LLVMMCDisassembler;LLVMSupport;LLVMBinaryFormat" ) # Create imported target LLVMARMInfo @@ -459,7 +501,7 @@ set_target_properties(LLVMARMUtils PROPERTIES add_library(LLVMAArch64CodeGen STATIC IMPORTED) set_target_properties(LLVMAArch64CodeGen PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMAArch64Desc;LLVMAArch64Info;LLVMAArch64Utils;LLVMAnalysis;LLVMAsmPrinter;LLVMCFGuard;LLVMCodeGen;LLVMCore;LLVMGlobalISel;LLVMMC;LLVMScalarOpts;LLVMSelectionDAG;LLVMSupport;LLVMTarget;LLVMTransformUtils" + INTERFACE_LINK_LIBRARIES "LLVMAArch64Desc;LLVMAArch64Info;LLVMAArch64Utils;LLVMAnalysis;LLVMAsmPrinter;LLVMCodeGen;LLVMCore;LLVMMC;LLVMScalarOpts;LLVMSelectionDAG;LLVMSupport;LLVMTarget;LLVMTransformUtils;LLVMGlobalISel;LLVMCFGuard" ) # Create imported target LLVMAArch64AsmParser @@ -480,7 +522,7 @@ set_target_properties(LLVMAArch64Disassembler PROPERTIES add_library(LLVMAArch64Desc STATIC IMPORTED) set_target_properties(LLVMAArch64Desc PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMAArch64Info;LLVMAArch64Utils;LLVMMC;LLVMSupport" + INTERFACE_LINK_LIBRARIES "LLVMAArch64Info;LLVMAArch64Utils;LLVMMC;LLVMBinaryFormat;LLVMSupport" ) # Create imported target LLVMAArch64Info @@ -501,7 +543,7 @@ set_target_properties(LLVMAArch64Utils PROPERTIES add_library(LLVMX86CodeGen STATIC IMPORTED) set_target_properties(LLVMX86CodeGen PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMAnalysis;LLVMAsmPrinter;LLVMCFGuard;LLVMCodeGen;LLVMCore;LLVMGlobalISel;LLVMMC;LLVMProfileData;LLVMSelectionDAG;LLVMSupport;LLVMTarget;LLVMX86Desc;LLVMX86Info;LLVMX86Utils" + INTERFACE_LINK_LIBRARIES "LLVMAnalysis;LLVMAsmPrinter;LLVMCodeGen;LLVMCore;LLVMMC;LLVMSelectionDAG;LLVMSupport;LLVMTarget;LLVMX86Desc;LLVMX86Info;LLVMGlobalISel;LLVMProfileData;LLVMCFGuard" ) # Create imported target LLVMX86AsmParser @@ -522,7 +564,7 @@ set_target_properties(LLVMX86Disassembler PROPERTIES add_library(LLVMX86Desc STATIC IMPORTED) set_target_properties(LLVMX86Desc PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMMC;LLVMMCDisassembler;LLVMObject;LLVMSupport;LLVMX86Info;LLVMX86Utils" + INTERFACE_LINK_LIBRARIES "LLVMMC;LLVMMCDisassembler;LLVMSupport;LLVMX86Info;LLVMBinaryFormat" ) # Create imported target LLVMX86Info @@ -532,13 +574,6 @@ set_target_properties(LLVMX86Info PROPERTIES INTERFACE_LINK_LIBRARIES "LLVMSupport" ) -# Create imported target LLVMX86Utils -add_library(LLVMX86Utils STATIC IMPORTED) - -set_target_properties(LLVMX86Utils PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMSupport" -) - # Create imported target LLVMAsmParser add_library(LLVMAsmParser STATIC IMPORTED) @@ -557,7 +592,7 @@ set_target_properties(LLVMLineEditor PROPERTIES add_library(LLVMProfileData STATIC IMPORTED) set_target_properties(LLVMProfileData PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMCore;LLVMSupport" + INTERFACE_LINK_LIBRARIES "LLVMCore;LLVMSupport;LLVMDemangle" ) # Create imported target LLVMCoverage @@ -571,14 +606,14 @@ set_target_properties(LLVMCoverage PROPERTIES add_library(LLVMPasses STATIC IMPORTED) set_target_properties(LLVMPasses PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMAggressiveInstCombine;LLVMAnalysis;LLVMCodeGen;LLVMCore;LLVMInstCombine;LLVMInstrumentation;LLVMScalarOpts;LLVMSupport;LLVMTarget;LLVMTransformUtils;LLVMVectorize;LLVMipo" + INTERFACE_LINK_LIBRARIES "LLVMAggressiveInstCombine;LLVMAnalysis;LLVMCore;LLVMCoroutines;LLVMHelloNew;LLVMipo;LLVMInstCombine;LLVMObjCARCOpts;LLVMScalarOpts;LLVMSupport;LLVMTarget;LLVMTransformUtils;LLVMVectorize;LLVMInstrumentation" ) # Create imported target LLVMTextAPI add_library(LLVMTextAPI STATIC IMPORTED) set_target_properties(LLVMTextAPI PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMBinaryFormat;LLVMSupport" + INTERFACE_LINK_LIBRARIES "LLVMSupport;LLVMBinaryFormat" ) # Create imported target LLVMDlltoolDriver @@ -592,14 +627,14 @@ set_target_properties(LLVMDlltoolDriver PROPERTIES add_library(LLVMLibDriver STATIC IMPORTED) set_target_properties(LLVMLibDriver PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMBinaryFormat;LLVMBitReader;LLVMObject;LLVMOption;LLVMSupport" + INTERFACE_LINK_LIBRARIES "LLVMBinaryFormat;LLVMBitReader;LLVMObject;LLVMOption;LLVMSupport;LLVMBinaryFormat;LLVMBitReader;LLVMObject;LLVMOption;LLVMSupport" ) # Create imported target LLVMXRay add_library(LLVMXRay STATIC IMPORTED) set_target_properties(LLVMXRay PROPERTIES - INTERFACE_LINK_LIBRARIES "LLVMObject;LLVMSupport" + INTERFACE_LINK_LIBRARIES "LLVMSupport;LLVMObject" ) # Create imported target LLVMWindowsManifest @@ -693,6 +728,9 @@ add_executable(llvm-exegesis IMPORTED) # Create imported target llvm-extract add_executable(llvm-extract IMPORTED) +# Create imported target llvm-gsymutil +add_executable(llvm-gsymutil IMPORTED) + # Create imported target llvm-ifs add_executable(llvm-ifs IMPORTED) @@ -700,6 +738,9 @@ add_executable(llvm-ifs IMPORTED) add_executable(llvm-jitlink IMPORTED) set_property(TARGET llvm-jitlink PROPERTY ENABLE_EXPORTS 1) +# Create imported target llvm-libtool-darwin +add_executable(llvm-libtool-darwin IMPORTED) + # Create imported target llvm-link add_executable(llvm-link IMPORTED) @@ -708,6 +749,7 @@ add_executable(llvm-lipo IMPORTED) # Create imported target llvm-lto2 add_executable(llvm-lto2 IMPORTED) +set_property(TARGET llvm-lto2 PROPERTY ENABLE_EXPORTS 1) # Create imported target llvm-mc add_executable(llvm-mc IMPORTED) @@ -715,6 +757,9 @@ add_executable(llvm-mc IMPORTED) # Create imported target llvm-mca add_executable(llvm-mca IMPORTED) +# Create imported target llvm-ml +add_executable(llvm-ml IMPORTED) + # Create imported target llvm-modextract add_executable(llvm-modextract IMPORTED) @@ -736,6 +781,9 @@ add_executable(llvm-opt-report IMPORTED) # Create imported target llvm-pdbutil add_executable(llvm-pdbutil IMPORTED) +# Create imported target llvm-profgen +add_executable(llvm-profgen IMPORTED) + # Create imported target llvm-rc add_executable(llvm-rc IMPORTED) @@ -756,7 +804,6 @@ add_executable(llvm-split IMPORTED) # Create imported target llvm-stress add_executable(llvm-stress IMPORTED) -set_property(TARGET llvm-stress PROPERTY ENABLE_EXPORTS 1) # Create imported target llvm-strings add_executable(llvm-strings IMPORTED) @@ -770,9 +817,6 @@ add_executable(llvm-undname IMPORTED) # Create imported target llvm-xray add_executable(llvm-xray IMPORTED) -# Create imported target obj2yaml -add_executable(obj2yaml IMPORTED) - # Create imported target opt add_executable(opt IMPORTED) set_property(TARGET opt PROPERTY ENABLE_EXPORTS 1) @@ -786,12 +830,12 @@ add_executable(sancov IMPORTED) # Create imported target sanstats add_executable(sanstats IMPORTED) +# Create imported target split-file +add_executable(split-file IMPORTED) + # Create imported target verify-uselistorder add_executable(verify-uselistorder IMPORTED) -# Create imported target yaml2obj -add_executable(yaml2obj IMPORTED) - # Create imported target PollyISL add_library(PollyISL STATIC IMPORTED) @@ -806,7 +850,7 @@ set_target_properties(PollyPPCG PROPERTIES add_library(Polly STATIC IMPORTED) set_target_properties(Polly PROPERTIES - INTERFACE_LINK_LIBRARIES "PollyISL;LLVMSupport;LLVMCore;LLVMScalarOpts;LLVMInstCombine;LLVMTransformUtils;LLVMAnalysis;LLVMipo;LLVMMC;LLVMPasses;LLVMLinker;LLVMIRReader;LLVMBitReader;LLVMMCParser;LLVMObject;LLVMProfileData;LLVMTarget;LLVMVectorize" + INTERFACE_LINK_LIBRARIES "LLVMSupport;LLVMCore;LLVMScalarOpts;LLVMInstCombine;LLVMTransformUtils;LLVMAnalysis;LLVMipo;LLVMMC;LLVMPasses;LLVMLinker;LLVMIRReader;LLVMAnalysis;LLVMBitReader;LLVMMCParser;LLVMObject;LLVMProfileData;LLVMTarget;LLVMVectorize;PollyISL" ) # Create imported target LLVMPolly diff --git a/lib/cmake/llvm/LLVMExternalProjectUtils.cmake b/lib/cmake/llvm/LLVMExternalProjectUtils.cmake index 75f442b..1b4a1f3 100644 --- a/lib/cmake/llvm/LLVMExternalProjectUtils.cmake +++ b/lib/cmake/llvm/LLVMExternalProjectUtils.cmake @@ -45,16 +45,48 @@ function(llvm_ExternalProject_Add name source_dir) "CMAKE_ARGS;TOOLCHAIN_TOOLS;RUNTIME_LIBRARIES;DEPENDS;EXTRA_TARGETS;PASSTHROUGH_PREFIXES;STRIP_TOOL" ${ARGN}) canonicalize_tool_name(${name} nameCanon) + + foreach(arg ${ARG_CMAKE_ARGS}) + if(arg MATCHES "^-DCMAKE_SYSTEM_NAME=") + string(REGEX REPLACE "^-DCMAKE_SYSTEM_NAME=(.*)$" "\\1" _cmake_system_name "${arg}") + endif() + endforeach() + + # If CMAKE_SYSTEM_NAME is not set explicitly in the arguments passed to us, + # reflect CMake's own default. + if (NOT _cmake_system_name) + set(_cmake_system_name "${CMAKE_HOST_SYSTEM_NAME}") + endif() + if(NOT ARG_TOOLCHAIN_TOOLS) - set(ARG_TOOLCHAIN_TOOLS clang lld) - if(NOT APPLE AND NOT WIN32) - list(APPEND ARG_TOOLCHAIN_TOOLS llvm-ar llvm-lipo llvm-ranlib llvm-nm llvm-objcopy llvm-objdump llvm-strip) + set(ARG_TOOLCHAIN_TOOLS clang) + # AIX 64-bit XCOFF and big AR format is not yet supported in some of these tools. + if(NOT _cmake_system_name STREQUAL AIX) + list(APPEND ARG_TOOLCHAIN_TOOLS lld llvm-ar llvm-ranlib llvm-nm llvm-objdump) + if(_cmake_system_name STREQUAL Darwin) + list(APPEND ARG_TOOLCHAIN_TOOLS llvm-libtool-darwin llvm-lipo) + elseif(_cmake_system_name STREQUAL Windows) + list(APPEND ARG_TOOLCHAIN_TOOLS llvm-lib) + else() + # TODO: These tools don't fully support Mach-O format yet. + list(APPEND ARG_TOOLCHAIN_TOOLS llvm-objcopy llvm-strip) + endif() endif() endif() foreach(tool ${ARG_TOOLCHAIN_TOOLS}) if(TARGET ${tool}) list(APPEND TOOLCHAIN_TOOLS ${tool}) - list(APPEND TOOLCHAIN_BINS $<TARGET_FILE:${tool}>) + + # $<TARGET_FILE:tgt> only works on add_executable or add_library targets + # The below logic mirrors cmake's own implementation + get_target_property(target_type "${tool}" TYPE) + if(NOT target_type STREQUAL "OBJECT_LIBRARY" AND + NOT target_type STREQUAL "UTILITY" AND + NOT target_type STREQUAL "GLOBAL_TARGET" AND + NOT target_type STREQUAL "INTERFACE_LIBRARY") + list(APPEND TOOLCHAIN_BINS $<TARGET_FILE:${tool}>) + endif() + endif() endforeach() @@ -104,31 +136,34 @@ function(llvm_ExternalProject_Add name source_dir) endforeach() endforeach() - foreach(arg ${ARG_CMAKE_ARGS}) - if(arg MATCHES "^-DCMAKE_SYSTEM_NAME=") - string(REGEX REPLACE "^-DCMAKE_SYSTEM_NAME=(.*)$" "\\1" _cmake_system_name "${arg}") - endif() - endforeach() - if(ARG_USE_TOOLCHAIN AND NOT CMAKE_CROSSCOMPILING) if(CLANG_IN_TOOLCHAIN) if(_cmake_system_name STREQUAL Windows) set(compiler_args -DCMAKE_C_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang-cl${CMAKE_EXECUTABLE_SUFFIX} - -DCMAKE_CXX_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang-cl${CMAKE_EXECUTABLE_SUFFIX}) + -DCMAKE_CXX_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang-cl${CMAKE_EXECUTABLE_SUFFIX} + -DCMAKE_ASM_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang-cl${CMAKE_EXECUTABLE_SUFFIX}) else() set(compiler_args -DCMAKE_C_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang${CMAKE_EXECUTABLE_SUFFIX} - -DCMAKE_CXX_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++${CMAKE_EXECUTABLE_SUFFIX}) + -DCMAKE_CXX_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++${CMAKE_EXECUTABLE_SUFFIX} + -DCMAKE_ASM_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang${CMAKE_EXECUTABLE_SUFFIX}) endif() endif() if(lld IN_LIST TOOLCHAIN_TOOLS) if(_cmake_system_name STREQUAL Windows) list(APPEND compiler_args -DCMAKE_LINKER=${LLVM_RUNTIME_OUTPUT_INTDIR}/lld-link${CMAKE_EXECUTABLE_SUFFIX}) - else() + elseif(NOT _cmake_system_name STREQUAL Darwin) list(APPEND compiler_args -DCMAKE_LINKER=${LLVM_RUNTIME_OUTPUT_INTDIR}/ld.lld${CMAKE_EXECUTABLE_SUFFIX}) endif() endif() if(llvm-ar IN_LIST TOOLCHAIN_TOOLS) - list(APPEND compiler_args -DCMAKE_AR=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-ar${CMAKE_EXECUTABLE_SUFFIX}) + if(_cmake_system_name STREQUAL Windows) + list(APPEND compiler_args -DCMAKE_AR=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-lib${CMAKE_EXECUTABLE_SUFFIX}) + else() + list(APPEND compiler_args -DCMAKE_AR=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-ar${CMAKE_EXECUTABLE_SUFFIX}) + endif() + endif() + if(llvm-libtool-darwin IN_LIST TOOLCHAIN_TOOLS) + list(APPEND compiler_args -DCMAKE_LIBTOOL=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-libtool-darwin${CMAKE_EXECUTABLE_SUFFIX}) endif() if(llvm-lipo IN_LIST TOOLCHAIN_TOOLS) list(APPEND compiler_args -DCMAKE_LIPO=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-lipo${CMAKE_EXECUTABLE_SUFFIX}) @@ -235,6 +270,8 @@ function(llvm_ExternalProject_Add name source_dir) -DLLVM_HOST_TRIPLE=${LLVM_HOST_TRIPLE} -DLLVM_HAVE_LINK_VERSION_SCRIPT=${LLVM_HAVE_LINK_VERSION_SCRIPT} -DLLVM_USE_RELATIVE_PATHS_IN_DEBUG_INFO=${LLVM_USE_RELATIVE_PATHS_IN_DEBUG_INFO} + -DLLVM_USE_RELATIVE_PATHS_IN_FILES=${LLVM_USE_RELATIVE_PATHS_IN_FILES} + -DLLVM_LIT_ARGS=${LLVM_LIT_ARGS} -DLLVM_SOURCE_PREFIX=${LLVM_SOURCE_PREFIX} -DPACKAGE_VERSION=${PACKAGE_VERSION} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} diff --git a/lib/cmake/llvm/LLVMProcessSources.cmake b/lib/cmake/llvm/LLVMProcessSources.cmake index d0be0e8..ba8dca3 100644 --- a/lib/cmake/llvm/LLVMProcessSources.cmake +++ b/lib/cmake/llvm/LLVMProcessSources.cmake @@ -57,10 +57,12 @@ endfunction(find_all_header_files) function(llvm_process_sources OUT_VAR) - cmake_parse_arguments(ARG "" "" "ADDITIONAL_HEADERS;ADDITIONAL_HEADER_DIRS" ${ARGN}) + cmake_parse_arguments(ARG "PARTIAL_SOURCES_INTENDED" "" "ADDITIONAL_HEADERS;ADDITIONAL_HEADER_DIRS" ${ARGN}) set(sources ${ARG_UNPARSED_ARGUMENTS}) - llvm_check_source_file_list( ${sources} ) - + if (NOT ARG_PARTIAL_SOURCES_INTENDED) + llvm_check_source_file_list(${sources}) + endif() + # This adds .td and .h files to the Visual Studio solution: add_td_sources(sources) find_all_header_files(hdrs "${ARG_ADDITIONAL_HEADER_DIRS}") diff --git a/lib/cmake/llvm/TableGen.cmake b/lib/cmake/llvm/TableGen.cmake index 9d2fcd9..5f07acc 100644 --- a/lib/cmake/llvm/TableGen.cmake +++ b/lib/cmake/llvm/TableGen.cmake @@ -2,19 +2,14 @@ # Extra parameters for `tblgen' may come after `ofn' parameter. # Adds the name of the generated file to TABLEGEN_OUTPUT. -if(LLVM_MAIN_INCLUDE_DIR) - set(LLVM_TABLEGEN_FLAGS -I ${LLVM_MAIN_INCLUDE_DIR}) -endif() - function(tablegen project ofn) # Validate calling context. if(NOT ${project}_TABLEGEN_EXE) message(FATAL_ERROR "${project}_TABLEGEN_EXE not set") endif() - # Use depfile instead of globbing arbitrary *.td(s) - # DEPFILE is available for Ninja Generator with CMake>=3.7. - if(CMAKE_GENERATOR STREQUAL "Ninja" AND NOT CMAKE_VERSION VERSION_LESS 3.7) + # Use depfile instead of globbing arbitrary *.td(s) for Ninja. + if(CMAKE_GENERATOR STREQUAL "Ninja") # Make output path relative to build.ninja, assuming located on # ${CMAKE_BINARY_DIR}. # CMake emits build targets as relative paths but Ninja doesn't identify @@ -57,7 +52,24 @@ function(tablegen project ofn) list(APPEND LLVM_TABLEGEN_FLAGS "-gisel-coverage-file=${LLVM_GISEL_COV_PREFIX}all") endif() endif() + # Comments are only useful for Debug builds. Omit them if the backend + # supports it. + if (NOT (uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" OR + uppercase_CMAKE_BUILD_TYPE STREQUAL "RELWITHDEBINFO")) + list(FIND ARGN "-gen-dag-isel" idx) + if (NOT idx EQUAL -1) + list(APPEND LLVM_TABLEGEN_FLAGS "-omit-comments") + endif() + endif() + # MSVC can't support long string literals ("long" > 65534 bytes)[1], so if there's + # a possibility of generated tables being consumed by MSVC, generate arrays of + # char literals, instead. If we're cross-compiling, then conservatively assume + # that the source might be consumed by MSVC. + # [1] https://docs.microsoft.com/en-us/cpp/cpp/compiler-limits?view=vs-2017 + if (MSVC AND project STREQUAL LLVM) + list(APPEND LLVM_TABLEGEN_FLAGS "--long-string-literals=0") + endif() if (CMAKE_GENERATOR MATCHES "Visual Studio") # Visual Studio has problems with llvm-tblgen's native --write-if-changed # behavior. Since it doesn't do restat optimizations anyway, just don't @@ -76,8 +88,12 @@ function(tablegen project ofn) # dependency twice in the result file when # ("${${project}_TABLEGEN_TARGET}" STREQUAL "${${project}_TABLEGEN_EXE}") # but lets us having smaller and cleaner code here. + get_directory_property(tblgen_includes INCLUDE_DIRECTORIES) + list(TRANSFORM tblgen_includes PREPEND -I) + add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${ofn} COMMAND ${${project}_TABLEGEN_EXE} ${ARGN} -I ${CMAKE_CURRENT_SOURCE_DIR} + ${tblgen_includes} ${LLVM_TABLEGEN_FLAGS} ${LLVM_TARGET_DEFINITIONS_ABSOLUTE} ${tblgen_change_flag} @@ -117,8 +133,8 @@ macro(add_tablegen target project) set(${target}_OLD_LLVM_LINK_COMPONENTS ${LLVM_LINK_COMPONENTS}) set(LLVM_LINK_COMPONENTS ${LLVM_LINK_COMPONENTS} TableGen) - # CMake-3.9 doesn't let compilation units depend on their dependent libraries. - if(NOT (CMAKE_GENERATOR STREQUAL "Ninja" AND NOT CMAKE_VERSION VERSION_LESS 3.9) AND NOT XCODE) + # CMake doesn't let compilation units depend on their dependent libraries on some generators. + if(NOT CMAKE_GENERATOR STREQUAL "Ninja" AND NOT XCODE) # FIXME: It leaks to user, callee of add_tablegen. set(LLVM_ENABLE_OBJLIB ON) endif() diff --git a/lib/cmake/llvm/TensorFlowCompile.cmake b/lib/cmake/llvm/TensorFlowCompile.cmake new file mode 100644 index 0000000..a8ba56e --- /dev/null +++ b/lib/cmake/llvm/TensorFlowCompile.cmake @@ -0,0 +1,38 @@ +# Run the tensorflow compiler (saved_model_cli) on the saved model in the +# ${model} directory, looking for the ${tag_set} tag set, and the SignatureDef +# ${signature_def_key}. +# Produce a pair of files called ${fname}.h and ${fname}.o in the +# ${CMAKE_CURRENT_BINARY_DIR}. The generated header will define a C++ class +# called ${cpp_class} - which may be a namespace-qualified class name. +function(tfcompile model tag_set signature_def_key fname cpp_class) + if (IS_ABSOLUTE ${model}) + set(LLVM_ML_MODELS_ABSOLUTE ${model}) + else() + set(LLVM_ML_MODELS_ABSOLUTE + ${CMAKE_CURRENT_SOURCE_DIR}/${model}) + endif() + + set(prefix ${CMAKE_CURRENT_BINARY_DIR}/${fname}) + set(obj_file ${prefix}.o) + set(hdr_file ${prefix}.h) + add_custom_command(OUTPUT ${obj_file} ${hdr_file} + COMMAND "XLA_FLAGS=\"--xla_cpu_multi_thread_eigen=false\"" ${TENSORFLOW_AOT_COMPILER} aot_compile_cpu + --dir ${LLVM_ML_MODELS_ABSOLUTE} + --tag_set ${tag_set} + --signature_def_key ${signature_def_key} + --output_prefix ${prefix} + --cpp_class ${cpp_class} + --target_triple ${LLVM_HOST_TRIPLE} + ) + + # Aggregate the objects so that results of different tfcompile calls may be + # grouped into one target. + set(GENERATED_OBJS ${GENERATED_OBJS} ${obj_file} PARENT_SCOPE) + set_source_files_properties(${obj_file} PROPERTIES + GENERATED 1 EXTERNAL_OBJECT 1) + + set(GENERATED_HEADERS ${GENERATED_HEADERS} ${hdr_file} PARENT_SCOPE) + set_source_files_properties(${hdr_file} PROPERTIES + GENERATED 1) + +endfunction() diff --git a/lib/cmake/llvm/VersionFromVCS.cmake b/lib/cmake/llvm/VersionFromVCS.cmake index 1b6519b..18edbea 100644 --- a/lib/cmake/llvm/VersionFromVCS.cmake +++ b/lib/cmake/llvm/VersionFromVCS.cmake @@ -4,7 +4,7 @@ # extra argument, otherwise uses CMAKE_CURRENT_SOURCE_DIR). function(get_source_info path revision repository) - find_package(Git) + find_package(Git QUIET) if(GIT_FOUND) execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --git-dir WORKING_DIRECTORY ${path} @@ -45,5 +45,7 @@ function(get_source_info path revision repository) set(${repository} ${path} PARENT_SCOPE) endif() endif() + else() + message(WARNING "Git not found. Version cannot be determined.") endif() endfunction() diff --git a/lib/cmake/polly/PollyConfig.cmake b/lib/cmake/polly/PollyConfig.cmake index 95cd1d6..28e0e54 100644 --- a/lib/cmake/polly/PollyConfig.cmake +++ b/lib/cmake/polly/PollyConfig.cmake @@ -1,15 +1,15 @@ # This file allows users to call find_package(Polly) and pick up our targets. find_package(LLVM REQUIRED CONFIG - HINTS "/home/dragon/proton-clang-build/build/llvm/stage3/lib/cmake/llvm") + HINTS "/root/build/build/llvm/stage3/lib/cmake/llvm") set(Polly_CMAKE_DIR ${CMAKE_CURRENT_LIST_DIR}) set(Polly_BUNDLED_ISL ON) set(Polly_ENABLE_GPGPU_CODEGEN OFF) set(Polly_DEFINITIONS ${LLVM_DEFINITIONS}) -set(Polly_INCLUDE_DIRS /home/dragon/proton-clang-build/install/include;/home/dragon/proton-clang-build/install/include/polly ${LLVM_INCLUDE_DIRS}) -set(Polly_LIBRARY_DIRS /home/dragon/proton-clang-build/install/lib) +set(Polly_INCLUDE_DIRS /root/build/install/include;/root/build/install/include/polly ${LLVM_INCLUDE_DIRS}) +set(Polly_LIBRARY_DIRS /root/build/install/lib) set(Polly_EXPORTED_TARGETS Polly;PollyISL;LLVMPolly) set(Polly_LIBRARIES ${LLVM_LIBRARIES} ${Polly_EXPORTED_TARGETS}) |
