diff options
-rw-r--r-- | clang/CMakeLists.txt | 33 | ||||
-rw-r--r-- | llvm/cmake/modules/LLVMExternalProjectUtils.cmake | 29 |
2 files changed, 58 insertions, 4 deletions
diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt index 0a38688066a..1482b17abcc 100644 --- a/clang/CMakeLists.txt +++ b/clang/CMakeLists.txt @@ -599,8 +599,8 @@ if (CLANG_ENABLE_BOOTSTRAP) if(NOT BOOTSTRAP_LLVM_ENABLE_LLD AND LLVM_BINUTILS_INCDIR) add_dependencies(clang-bootstrap-deps LLVMgold) endif() - set(LTO_AR -DCMAKE_AR=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-ar) - set(LTO_RANLIB -DCMAKE_RANLIB=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-ranlib) + set(${CLANG_STAGE}_AR -DCMAKE_AR=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-ar) + set(${CLANG_STAGE}_RANLIB -DCMAKE_RANLIB=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-ranlib) endif() endif() @@ -666,6 +666,26 @@ if (CLANG_ENABLE_BOOTSTRAP) -DCMAKE_ASM_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/${C_COMPILER} -DCMAKE_ASM_COMPILER_ID=Clang) + if(BOOTSTRAP_CMAKE_SYSTEM_NAME) + set(${CLANG_STAGE}_CONFIG -DLLVM_CONFIG_PATH=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-config) + set(${CLANG_STAGE}_TABLEGEN + -DLLVM_TABLEGEN=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-tblgen + -DCLANG_TABLEGEN=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang-tblgen) + if(BOOTSTRAP_CMAKE_SYSTEM_NAME STREQUAL "Linux") + if(BOOTSTRAP_LLVM_ENABLE_LLD) + set(${CLANG_STAGE}_LINKER -DCMAKE_LINKER=${LLVM_RUNTIME_OUTPUT_INTDIR}/ld.lld) + endif() + if(NOT BOOTSTRAP_LLVM_ENABLE_LTO) + add_dependencies(clang-bootstrap-deps llvm-ar llvm-ranlib) + set(${CLANG_STAGE}_AR -DCMAKE_AR=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-ar) + set(${CLANG_STAGE}_RANLIB -DCMAKE_RANLIB=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-ranlib) + endif() + add_dependencies(clang-bootstrap-deps llvm-objcopy llvm-strip) + set(${CLANG_STAGE}_OBJCOPY -DCMAKE_OBJCOPY=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-objcopy) + set(${CLANG_STAGE}_STRIP -DCMAKE_STRIP=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-strip) + endif() + endif() + if(BOOTSTRAP_LLVM_BUILD_INSTRUMENTED) add_dependencies(clang-bootstrap-deps llvm-profdata) set(PGO_OPT -DLLVM_PROFDATA=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-profdata) @@ -734,7 +754,14 @@ if (CLANG_ENABLE_BOOTSTRAP) ${PASSTHROUGH_VARIABLES} -DCLANG_STAGE=${NEXT_CLANG_STAGE} ${COMPILER_OPTIONS} - ${LTO_LIBRARY} ${LTO_AR} ${LTO_RANLIB} ${verbose} ${PGO_OPT} + ${${CLANG_STAGE}_CONFIG} + ${${CLANG_STAGE}_TABLEGEN} + ${LTO_LIBRARY} ${verbose} ${PGO_OPT} + ${${CLANG_STAGE}_LINKER} + ${${CLANG_STAGE}_AR} + ${${CLANG_STAGE}_RANLIB} + ${${CLANG_STAGE}_OBJCOPY} + ${${CLANG_STAGE}_STRIP} INSTALL_COMMAND "" STEP_TARGETS configure build USES_TERMINAL_CONFIGURE 1 diff --git a/llvm/cmake/modules/LLVMExternalProjectUtils.cmake b/llvm/cmake/modules/LLVMExternalProjectUtils.cmake index f736c394784..4d26a30f97b 100644 --- a/llvm/cmake/modules/LLVMExternalProjectUtils.cmake +++ b/llvm/cmake/modules/LLVMExternalProjectUtils.cmake @@ -162,8 +162,35 @@ function(llvm_ExternalProject_Add name source_dir) -DCMAKE_OBJDUMP=${CMAKE_OBJDUMP} -DCMAKE_STRIP=${CMAKE_STRIP}) set(llvm_config_path ${LLVM_CONFIG_PATH}) + + if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") + string(REGEX MATCH "[0-9]+\\.[0-9]+(\\.[0-9]+)?" CLANG_VERSION + ${PACKAGE_VERSION}) + set(resource_dir "${LLVM_LIBRARY_DIR}/clang/${CLANG_VERSION}") + set(flag_types ASM C CXX MODULE_LINKER SHARED_LINKER EXE_LINKER) + foreach(type ${flag_types}) + set(${type}_flag -DCMAKE_${type}_FLAGS=-resource-dir=${resource_dir}) + endforeach() + string(REPLACE ";" "|" flag_string "${flag_types}") + foreach(arg ${ARG_CMAKE_ARGS}) + if(arg MATCHES "^-DCMAKE_(${flag_string})_FLAGS") + foreach(type ${flag_types}) + if(arg MATCHES "^-DCMAKE_${type}_FLAGS") + string(REGEX REPLACE "^-DCMAKE_${type}_FLAGS=(.*)$" "\\1" flag_value "${arg}") + set(${type}_flag "${${type}_flag} ${flag_value}") + endif() + endforeach() + else() + list(APPEND cmake_args ${arg}) + endif() + endforeach() + foreach(type ${flag_types}) + list(APPEND cmake_args ${${type}_flag}) + endforeach() + endif() else() set(llvm_config_path "$<TARGET_FILE:llvm-config>") + set(cmake_args ${ARG_CMAKE_ARGS}) endif() ExternalProject_Add(${name} @@ -187,7 +214,7 @@ function(llvm_ExternalProject_Add name source_dir) -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM} -DCMAKE_EXPORT_COMPILE_COMMANDS=1 - ${ARG_CMAKE_ARGS} + ${cmake_args} ${PASSTHROUGH_VARIABLES} INSTALL_COMMAND "" STEP_TARGETS configure build |