[PATCH] D118964: Fix broken 2-stage build when -tblgen tools may depend on runpath that is not yet built

Arcadiy Ivanov via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Feb 3 20:16:40 PST 2022


arcivanov created this revision.
arcivanov added reviewers: LLVM, clang.
arcivanov added projects: clang, LLVM.
Herald added a subscriber: mgorny.
arcivanov requested review of this revision.
Herald added a subscriber: cfe-commits.

In my case `-tblgen` tools in the **second stage** end up being built depending on `libc++.so`. 
While the the dependency is correct and the tools are built successfully, `-tblgen` tools would not function until `libc++.so` is built in the `$ORIGIN/../lib`. 
But `libc++.so` of the second stage cannot be built without second stage `llvm-tblgen` and `clang-tblgen` functioning.

This patch makes sure that in a bootstrapped build `llvm-tblgen`and `clang-tblgen` are always used from the bootstrap //even when not crosscompiling//.

See https://github.com/llvm/llvm-project/issues/53561 for extensive logs, printouts and cmake caches.

If accepted please also send to 13.x and 14.x.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D118964

Files:
  clang/CMakeLists.txt


Index: clang/CMakeLists.txt
===================================================================
--- clang/CMakeLists.txt
+++ clang/CMakeLists.txt
@@ -747,6 +747,13 @@
     -DCMAKE_ASM_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/${C_COMPILER}
     -DCMAKE_ASM_COMPILER_ID=Clang)
 
+  # If -tblgen is linked to libc++.so and it's not available in the system, the tool can't run
+  # since the runpath doesn't yet contain libc++.so, which can't be built without -tblgen
+  # See https://github.com/llvm/llvm-project/issues/53561
+  set(${CLANG_STAGE}_TABLEGEN
+    -DLLVM_TABLEGEN=${LLVM_RUNTIME_OUTPUT_INTDIR}/llvm-tblgen
+    -DCLANG_TABLEGEN=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang-tblgen)
+
   # cmake requires CMAKE_LINKER to be specified if the compiler is MSVC-like,
   # otherwise it defaults the linker to be link.exe.
   if(BOOTSTRAP_LLVM_ENABLE_LLD)
@@ -757,9 +764,6 @@
 
   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)


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D118964.405862.patch
Type: text/x-patch
Size: 1344 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220204/d8387670/attachment.bin>


More information about the cfe-commits mailing list