diff options
| author | Petr Hosek <phosek@chromium.org> | 2016-12-12 23:15:10 +0000 |
|---|---|---|
| committer | Petr Hosek <phosek@chromium.org> | 2016-12-12 23:15:10 +0000 |
| commit | 024a17b06dadf94ebac3624891154eab3bf3eb6f (patch) | |
| tree | 3ac4a21ae44f27ee5d57765341133529a812319e | |
| parent | 1a5e67869e5458065f6ecf500f22ee6024d95d28 (diff) | |
| download | bcm5719-llvm-024a17b06dadf94ebac3624891154eab3bf3eb6f.tar.gz bcm5719-llvm-024a17b06dadf94ebac3624891154eab3bf3eb6f.zip | |
[CMake] Multi-target builtins build
This change enables building builtins for multiple different targets
using LLVM runtimes directory.
To specify the builtin targets to be built, use the LLVM_BUILTIN_TARGETS
variable, where the value is the list of targets. To pass a per target
variable to the builtin build, you can set BUILTINS_<target>_<variable>
where <variable> will be passed to the builtin build for <target>.
Differential Revision: https://reviews.llvm.org/D26652
llvm-svn: 289491
| -rw-r--r-- | llvm/cmake/modules/LLVMExternalProjectUtils.cmake | 9 | ||||
| -rw-r--r-- | llvm/runtimes/CMakeLists.txt | 40 |
2 files changed, 43 insertions, 6 deletions
diff --git a/llvm/cmake/modules/LLVMExternalProjectUtils.cmake b/llvm/cmake/modules/LLVMExternalProjectUtils.cmake index f7020fbc166..d457389f3ca 100644 --- a/llvm/cmake/modules/LLVMExternalProjectUtils.cmake +++ b/llvm/cmake/modules/LLVMExternalProjectUtils.cmake @@ -45,6 +45,9 @@ function(llvm_ExternalProject_Add name source_dir) canonicalize_tool_name(${name} nameCanon) 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-ranlib) + endif() endif() foreach(tool ${ARG_TOOLCHAIN_TOOLS}) if(TARGET ${tool}) @@ -104,6 +107,12 @@ function(llvm_ExternalProject_Add name source_dir) set(compiler_args -DCMAKE_C_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang -DCMAKE_CXX_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++) endif() + if(llvm-ar IN_LIST TOOLCHAIN_TOOLS) + list(APPEND compiler_args -DCMAKE_AR=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-ar) + endif() + if(llvm-ranlib IN_LIST TOOLCHAIN_TOOLS) + list(APPEND compiler_args -DCMAKE_RANLIB=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-ranlib) + endif() list(APPEND ARG_DEPENDS ${TOOLCHAIN_TOOLS}) endif() diff --git a/llvm/runtimes/CMakeLists.txt b/llvm/runtimes/CMakeLists.txt index 3b059062c17..b1a47b55cfc 100644 --- a/llvm/runtimes/CMakeLists.txt +++ b/llvm/runtimes/CMakeLists.txt @@ -139,12 +139,40 @@ else() # if this is included from LLVM's CMake # is required because the other runtimes need the builtin libraries present # before the just-built compiler can pass the configuration tests. if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/compiler-rt) - llvm_ExternalProject_Add(builtins - ${CMAKE_CURRENT_SOURCE_DIR}/compiler-rt/lib/builtins - CMAKE_ARGS -DLLVM_LIBRARY_OUTPUT_INTDIR=${LLVM_LIBRARY_DIR} - -DLLVM_RUNTIME_OUTPUT_INTDIR=${LLVM_TOOLS_BINARY_DIR} - PASSTHROUGH_PREFIXES COMPILER_RT - USE_TOOLCHAIN) + if(APPLE OR NOT LLVM_BUILTIN_TARGETS) + llvm_ExternalProject_Add(builtins + ${CMAKE_CURRENT_SOURCE_DIR}/compiler-rt/lib/builtins + CMAKE_ARGS -DLLVM_LIBRARY_OUTPUT_INTDIR=${LLVM_LIBRARY_DIR} + -DLLVM_RUNTIME_OUTPUT_INTDIR=${LLVM_TOOLS_BINARY_DIR} + -DCMAKE_C_COMPILER_TARGET=${TARGET_TRIPLE} + -DCMAKE_ASM_COMPILER_TARGET=${TARGET_TRIPLE} + PASSTHROUGH_PREFIXES COMPILER_RT + USE_TOOLCHAIN) + else() + get_cmake_property(variableNames VARIABLES) + add_custom_target(builtins) + foreach(target ${LLVM_BUILTIN_TARGETS}) + foreach(variableName ${variableNames}) + if(variableName MATCHES "^BUILTINS_${target}") + string(REPLACE "BUILTINS_${target}_" "" new_name ${variableName}) + list(APPEND ${target}_extra_args "-D${new_name}=${${variableName}}") + endif() + endforeach() + llvm_ExternalProject_Add(builtins-${target} + ${CMAKE_CURRENT_SOURCE_DIR}/compiler-rt/lib/builtins + CMAKE_ARGS -DLLVM_LIBRARY_OUTPUT_INTDIR=${LLVM_LIBRARY_DIR} + -DLLVM_RUNTIME_OUTPUT_INTDIR=${LLVM_TOOLS_BINARY_DIR} + -DCMAKE_C_COMPILER_TARGET=${target} + -DCMAKE_ASM_COMPILER_TARGET=${target} + -DCMAKE_C_COMPILER_WORKS=On + -DCMAKE_ASM_COMPILER_WORKS=On + -DCOMPILER_RT_DEFAULT_TARGET_ONLY=On + ${${target}_extra_args} + PASSTHROUGH_PREFIXES COMPILER_RT + USE_TOOLCHAIN) + add_dependencies(builtins builtins-${target}) + endforeach() + endif() set(deps builtins) # We don't need to depend on the builtins if we're building instrumented # because the next stage will use the same compiler used to build this stage. |

