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

Reply via email to