[llvm-branch-commits] [compiler-rt] Allow running tests without installing first (PR #83088)

Dan Liew via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Tue Feb 27 00:43:56 PST 2024


================
@@ -172,6 +172,20 @@ def push_dynamic_library_lookup_path(config, new_path):
 # doesn't match config.compiler_rt_libdir then it means we might be testing the
 # compiler's own runtime libraries rather than the ones we just built.
 # Warn about about this and handle appropriately.
+if config.test_standalone_build_libs:
+    if config.compiler_id == "Clang":
+        # Ensure that we use the just-built libraries when linking by overriding
+        # the Clang resource directory. However, this also means that we can no
+        # longer find the builtin headers from that path, so we explicitly add
+        # the builtin headers as an include path.
+        resource_dir, _ = get_path_from_clang(
+            shlex.split(config.target_cflags) + ["-print-resource-dir"], allow_failure=False
+        )
+        config.target_cflags += f" -nobuiltininc"
+        config.target_cflags += f" -I{config.compiler_rt_src_root}/include"
+        config.target_cflags += f" -idirafter {resource_dir}/include"
+        config.target_cflags += f" -resource-dir={config.compiler_rt_obj_root}"
+        config.target_cflags += f" -Wl,--rpath={config.compiler_rt_libdir}"
----------------
delcypher wrote:

The flags below create kind of a odd mix

* Some external clang that has its own independent resource directory.
* The external clang is being forced to use a different resource directory than what it was shipped with
* The external clang is being forced to use a different set of headers than what it was shipped with

I'm not sure that combination is guaranteed to work given that compiler-rt can be tightly coupled with clang.

If I've read this code correctly the change you've made is on the common path (because `COMPILER_RT_TEST_STANDALONE_BUILD_LIBS` is `ON` by default) but AFAIK your change was never needed before because normally you would build compiler-rt with a just built clang which I think should mean there's no difference between what `-print-resource-dir` reports and `config.compiler_rt_obj_root`. Or have I misunderstood something?

https://github.com/llvm/llvm-project/pull/83088


More information about the llvm-branch-commits mailing list