[clang] [RFC] [clang][Toolchain] Treat "pc"/"unknown" vendor interchangeable (PR #97802)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Jul 5 02:26:38 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang-driver
Author: Azat Khuzhin (azat)
<details>
<summary>Changes</summary>
Right now if you have runtime libraries under
lib/x86_64-unknown-linux-gnu you should use --target x86_64-unknown-linux-gnu, x86_64-pc-linux-gnu will not work.
Treat the interchangeable so that you can use any.
The initial reason for this patch is that debian packages uses x86_64-pc-linux-gnu, and after they enabled
LLVM_ENABLE_PER_TARGET_RUNTIME_DIR [1], clang cannot find runtime libraries for sanitizers.
[1]: https://salsa.debian.org/pkg-llvm-team/llvm-toolchain/-/commit/9ca35f30383d89e4fdd45d15e0eb82c832df4b8c
Fixes: https://github.com/llvm/llvm-project/issues/95792
---
Full diff: https://github.com/llvm/llvm-project/pull/97802.diff
2 Files Affected:
- (modified) clang/lib/Driver/ToolChain.cpp (+21)
- (added) clang/test/Driver/pc-unknown-toolchain.c (+4)
``````````diff
diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index 977e08390800d7..716cbfb43232b6 100644
--- a/clang/lib/Driver/ToolChain.cpp
+++ b/clang/lib/Driver/ToolChain.cpp
@@ -765,6 +765,27 @@ ToolChain::getTargetSubDirPath(StringRef BaseDir) const {
if (auto Path = getPathForTriple(getTriple()))
return *Path;
+ // Treat "pc" and "unknown" vendors interchangeable
+ switch (getTriple().getVendor())
+ {
+ case Triple::UnknownVendor: {
+ llvm::Triple TripleFallback = Triple;
+ TripleFallback.setVendor(Triple::PC);
+ if (auto Path = getPathForTriple(TripleFallback))
+ return *Path;
+ break;
+ }
+ case Triple::PC: {
+ llvm::Triple TripleFallback = Triple;
+ TripleFallback.setVendor(Triple::UnknownVendor);
+ if (auto Path = getPathForTriple(TripleFallback))
+ return *Path;
+ break;
+ }
+ default:
+ break;
+ }
+
// When building with per target runtime directories, various ways of naming
// the Arm architecture may have been normalised to simply "arm".
// For example "armv8l" (Armv8 AArch32 little endian) is replaced with "arm".
diff --git a/clang/test/Driver/pc-unknown-toolchain.c b/clang/test/Driver/pc-unknown-toolchain.c
new file mode 100644
index 00000000000000..a7e9bb80b0f2d6
--- /dev/null
+++ b/clang/test/Driver/pc-unknown-toolchain.c
@@ -0,0 +1,4 @@
+// RUN: %clang -### %s -fsanitize=address --target=x86_64-pc-linux-gnu 2>&1 | FileCheck -check-prefix=CHECK-ASAN-PC %s
+// CHECK-ASAN-PC: x86_64-unknown-linux-gnu/libclang_rt.asan_static.a
+// RUN: %clang -### %s -fsanitize=address --target=x86_64-unknown-linux-gnu 2>&1 | FileCheck -check-prefix=CHECK-ASAN-UNKNOWN %s
+// CHECK-ASAN-UNKNOWN: x86_64-unknown-linux-gnu/libclang_rt.asan_static.a
``````````
</details>
https://github.com/llvm/llvm-project/pull/97802
More information about the cfe-commits
mailing list