haowei created this revision. haowei added a reviewer: phosek. Herald added a subscriber: kristof.beyls. Herald added a project: All. haowei requested review of this revision. Herald added projects: clang, LLVM. Herald added subscribers: llvm-commits, cfe-commits.
This is a working in progress patch, and it needs clean up and refactor. It is mainly for understanding what are needed to build windows runtime when the LLVM is being cross compiled for a different architecture. And to discuss the direction of refactoring the cmake configurations for the clang bootstrap build as well as LLVM runtimes build. The use case is to include the Windows runtime build when cross compiling LLVM for an arch different from the host (e.g. building aarch64 on an x64 machine). This will be needed in the future when cross compile LLVM Windows toolchain for aarch64 on an x64 machine. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D144595 Files: clang/CMakeLists.txt llvm/cmake/modules/LLVMExternalProjectUtils.cmake llvm/runtimes/CMakeLists.txt
Index: llvm/runtimes/CMakeLists.txt =================================================================== --- llvm/runtimes/CMakeLists.txt +++ llvm/runtimes/CMakeLists.txt @@ -77,6 +77,12 @@ set_enable_per_target_runtime_dir() + message(NOTICE "builtin target for default") + #message(NOTICE "cmake args ${CMAKE_ARGS}") + message(NOTICE "cmake common args ${COMMON_CMAKE_ARGS}") + message(NOTICE "extra args:") + message(NOTICE ${BUILTINS_CMAKE_ARGS}) + llvm_ExternalProject_Add(builtins ${compiler_rt_path}/lib/builtins DEPENDS ${ARG_DEPENDS} @@ -111,6 +117,12 @@ endif() endforeach() + message(NOTICE "builtin target for ${target}") + #message(NOTICE "cmake args ${CMAKE_ARGS}") + message(NOTICE "cmake common args ${COMMON_CMAKE_ARGS}") + message(NOTICE "extra args:") + message(NOTICE ${${target}_extra_args}) + llvm_ExternalProject_Add(builtins-${target} ${compiler_rt_path}/lib/builtins DEPENDS ${ARG_DEPENDS} @@ -221,6 +233,13 @@ set_enable_per_target_runtime_dir() + message(NOTICE "runtime target for default") + #message(NOTICE "cmake args ${CMAKE_ARGS}") + message(NOTICE "cmake common args ${COMMON_CMAKE_ARGS}") + message(NOTICE "extra args:") + message(NOTICE ${RUNTIMES_CMAKE_ARGS}) + message(NOTICE ${ARG_CMAKE_ARGS}) + llvm_ExternalProject_Add(runtimes ${CMAKE_CURRENT_SOURCE_DIR}/../../runtimes DEPENDS ${ARG_DEPENDS} @@ -349,6 +368,12 @@ set_enable_per_target_runtime_dir() + message(NOTICE "runtime target for ${target}") + #message(NOTICE "cmake args ${CMAKE_ARGS}") + message(NOTICE "cmake common args ${COMMON_CMAKE_ARGS}") + message(NOTICE "extra args:") + message(NOTICE ${${name}_extra_args}) + llvm_ExternalProject_Add(runtimes-${name} ${CMAKE_CURRENT_SOURCE_DIR}/../../runtimes DEPENDS ${${name}_deps} Index: llvm/cmake/modules/LLVMExternalProjectUtils.cmake =================================================================== --- llvm/cmake/modules/LLVMExternalProjectUtils.cmake +++ llvm/cmake/modules/LLVMExternalProjectUtils.cmake @@ -165,6 +165,9 @@ endforeach() endforeach() + message(NOTICE "extproj ARG_USE_TOOLCHAIN is ${ARG_USE_TOOLCHAIN}") + message(NOTICE "extproj CMAKE_CROSSCOMPILING is ${CMAKE_CROSSCOMPILING}") + message(NOTICE "extproj CLANG_IN_TOOLCHAIN is ${CLANG_IN_TOOLCHAIN}") if(ARG_USE_TOOLCHAIN AND NOT CMAKE_CROSSCOMPILING) if(CLANG_IN_TOOLCHAIN) if(is_msvc_target) @@ -249,18 +252,40 @@ endif() if(CMAKE_CROSSCOMPILING OR _cmake_system_name STREQUAL AIX) - set(compiler_args -DCMAKE_ASM_COMPILER=${CMAKE_ASM_COMPILER} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - -DCMAKE_LINKER=${CMAKE_LINKER} - -DCMAKE_AR=${CMAKE_AR} - -DCMAKE_RANLIB=${CMAKE_RANLIB} - -DCMAKE_NM=${CMAKE_NM} - -DCMAKE_OBJCOPY=${CMAKE_OBJCOPY} - -DCMAKE_OBJDUMP=${CMAKE_OBJDUMP} - -DCMAKE_STRIP=${CMAKE_STRIP} - -DCMAKE_READELF=${CMAKE_READELF}) + if (ARG_USE_TOOLCHAIN AND CLANG_IN_TOOLCHAIN AND is_msvc_target) + get_filename_component(HOST_TOOLCHAIN_DIR ${CMAKE_C_COMPILER} DIRECTORY) + set(compiler_args -DCMAKE_C_COMPILER=${HOST_TOOLCHAIN_DIR}/clang-cl${CMAKE_EXECUTABLE_SUFFIX} + -DCMAKE_CXX_COMPILER=${HOST_TOOLCHAIN_DIR}/clang-cl${CMAKE_EXECUTABLE_SUFFIX} + -DCMAKE_ASM_COMPILER=${HOST_TOOLCHAIN_DIR}/clang-cl${CMAKE_EXECUTABLE_SUFFIX}) + if(lld IN_LIST TOOLCHAIN_TOOLS) + list(APPEND compiler_args -DCMAKE_LINKER=${HOST_TOOLCHAIN_DIR}/lld-link${CMAKE_EXECUTABLE_SUFFIX}) + endif() + if(llvm-ar IN_LIST TOOLCHAIN_TOOLS) + list(APPEND compiler_args -DCMAKE_AR=${HOST_TOOLCHAIN_DIR}/llvm-lib${CMAKE_EXECUTABLE_SUFFIX}) + endif() + if(llvm-mt IN_LIST TOOLCHAIN_TOOLS) + list(APPEND compiler_args -DCMAKE_MT=${HOST_TOOLCHAIN_DIR}/llvm-mt${CMAKE_EXECUTABLE_SUFFIX}) + endif() + if(llvm-rc IN_LIST TOOLCHAIN_TOOLS) + list(APPEND compiler_args -DCMAKE_RC_COMPILER=${HOST_TOOLCHAIN_DIR}/llvm-rc${CMAKE_EXECUTABLE_SUFFIX}) + endif() + else() + set(compiler_args -DCMAKE_ASM_COMPILER=${CMAKE_ASM_COMPILER} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_LINKER=${CMAKE_LINKER} + -DCMAKE_AR=${CMAKE_AR} + -DCMAKE_RANLIB=${CMAKE_RANLIB} + -DCMAKE_NM=${CMAKE_NM} + -DCMAKE_OBJCOPY=${CMAKE_OBJCOPY} + -DCMAKE_OBJDUMP=${CMAKE_OBJDUMP} + -DCMAKE_STRIP=${CMAKE_STRIP} + -DCMAKE_READELF=${CMAKE_READELF} + -DCMAKE_RC_COMPILER=${CMAKE_RC_COMPILER} + -DCMAKE_MT=${CMAKE_MT}) + endif() endif() + message(NOTICE "extproj compiler_args is ${compiler_args}") if(CMAKE_CROSSCOMPILING) set(llvm_config_path ${LLVM_CONFIG_PATH}) Index: clang/CMakeLists.txt =================================================================== --- clang/CMakeLists.txt +++ clang/CMakeLists.txt @@ -556,6 +556,7 @@ message(STATUS "Setting current clang stage to: ${CLANG_STAGE}") endif() +message(NOTICE "CLANG_ENABLE_BOOTSTRAP is ${CLANG_ENABLE_BOOTSTRAP}") if (CLANG_ENABLE_BOOTSTRAP) include(ExternalProject) @@ -595,13 +596,14 @@ add_dependencies(clang-bootstrap-deps lld) endif() - if (WIN32) + # message(NOTICE "CMAKE_CROSSCOMPILING is ${CMAKE_CROSSCOMPILING}") + # if (WIN32 OR CMAKE_CROSSCOMPILING) # Build llvm-rc and llvm-mt which are needed by the Windows build. - add_dependencies(clang-bootstrap-deps llvm-rc) - if(LLVM_ENABLE_LIBXML2) - add_dependencies(clang-bootstrap-deps llvm-mt) - endif() + add_dependencies(clang-bootstrap-deps llvm-rc llvm-lib) + if(LLVM_ENABLE_LIBXML2) + add_dependencies(clang-bootstrap-deps llvm-mt) endif() + # endif() # If the next stage is LTO we need to depend on LTO and possibly lld or LLVMgold if(BOOTSTRAP_LLVM_ENABLE_LTO OR LLVM_ENABLE_LTO AND NOT LLVM_BUILD_INSTRUMENTED)
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits