[llvm] r289491 - [CMake] Multi-target builtins build
Petr Hosek via llvm-commits
llvm-commits at lists.llvm.org
Mon Dec 12 15:15:10 PST 2016
Author: phosek
Date: Mon Dec 12 17:15:10 2016
New Revision: 289491
URL: http://llvm.org/viewvc/llvm-project?rev=289491&view=rev
Log:
[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
Modified:
llvm/trunk/cmake/modules/LLVMExternalProjectUtils.cmake
llvm/trunk/runtimes/CMakeLists.txt
Modified: llvm/trunk/cmake/modules/LLVMExternalProjectUtils.cmake
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/LLVMExternalProjectUtils.cmake?rev=289491&r1=289490&r2=289491&view=diff
==============================================================================
--- llvm/trunk/cmake/modules/LLVMExternalProjectUtils.cmake (original)
+++ llvm/trunk/cmake/modules/LLVMExternalProjectUtils.cmake Mon Dec 12 17:15:10 2016
@@ -45,6 +45,9 @@ function(llvm_ExternalProject_Add name s
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 s
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()
Modified: llvm/trunk/runtimes/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/runtimes/CMakeLists.txt?rev=289491&r1=289490&r2=289491&view=diff
==============================================================================
--- llvm/trunk/runtimes/CMakeLists.txt (original)
+++ llvm/trunk/runtimes/CMakeLists.txt Mon Dec 12 17:15:10 2016
@@ -139,12 +139,40 @@ else() # if this is included from LLVM's
# 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.
More information about the llvm-commits
mailing list