ro created this revision.
ro added a reviewer: MaskRay.
ro added a project: clang.
Herald added subscribers: StephenFan, abidh, jrtc27, fedor.sergeev, 
kristof.beyls, jyknight.
Herald added a project: All.
ro requested review of this revision.

This is the companion patch to D133406 <https://reviews.llvm.org/D133406>, 
intended to get the ideas of `clang` of `compiler-rt` where runtime libs are 
located with `-DLLVM_ENABLE_RUNTIMES` in sync.  Both patches were necessary to 
run the release builds/tests for Solaris/amd64 and Linux/sparc64.

Tested on `amd64-pc-solaris2.11` and `sparc64-unknown-linux-gnu`.

This patch is **not** ready for prime time: right now it causes two regressions:

  Clang :: Driver/baremetal.cpp
  Clang :: Driver/print-libgcc-file-name-clangrt.c

where the patched driver uses `-triple thumbv7m-vendor-none-eabi` instead of 
the expected `armv7m-vendor-none-eabi`.  I have not yet tried to investigate 
this in detail, just wanted to get the patch out for reference.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D133407

Files:
  clang/lib/Driver/ToolChain.cpp
  clang/test/Driver/Inputs/debian_sparc64_tree/lib/sparc64-linux-gnu/Scrt1.o
  clang/test/Driver/Inputs/debian_sparc64_tree/lib/sparc64-linux-gnu/crti.o
  clang/test/Driver/Inputs/debian_sparc64_tree/lib/sparc64-linux-gnu/crtn.o
  
clang/test/Driver/Inputs/debian_sparc64_tree/usr/lib/gcc/sparc64-linux-gnu/12/crtbeginS.o
  
clang/test/Driver/Inputs/debian_sparc64_tree/usr/lib/gcc/sparc64-linux-gnu/12/crtendS.o
  
clang/test/Driver/Inputs/debian_sparc64_tree/usr/lib/gcc/sparc64-linux-gnu/12/libgcc.a
  
clang/test/Driver/Inputs/debian_sparc64_tree/usr/lib/gcc/sparc64-linux-gnu/12/libgcc_s.so
  clang/test/Driver/Inputs/debian_sparc64_tree/usr/lib/sparc64-linux-gnu/libc.so
  
clang/test/Driver/Inputs/debian_sparc64_tree/usr/lib/sparc64-linux-gnu/libdl.so
  clang/test/Driver/Inputs/debian_sparc64_tree/usr/lib/sparc64-linux-gnu/libm.so
  
clang/test/Driver/Inputs/debian_sparc64_tree/usr/lib/sparc64-linux-gnu/libpthread.so
  
clang/test/Driver/Inputs/debian_sparc64_tree/usr/lib/sparc64-linux-gnu/libresolv.so
  
clang/test/Driver/Inputs/debian_sparc64_tree/usr/lib/sparc64-linux-gnu/librt.so
  
clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/sparcv9-unknown-linux-gnu/libclang_rt.ubsan_standalone.a
  
clang/test/Driver/Inputs/resource_dir_with_per_target_subdir/lib/x86_64-pc-solaris2.11/libclang_rt.ubsan_standalone.a
  clang/test/Driver/noncanon-per-target-runtime-dir.c
  clang/test/Driver/runtime-layout.c

Index: clang/test/Driver/runtime-layout.c
===================================================================
--- /dev/null
+++ clang/test/Driver/runtime-layout.c
@@ -0,0 +1,56 @@
+/// Check that clang's idea of runtime dir layout matches e.g. compiler-rt's.
+
+/// Classical runtime layout.
+// RUN: mkdir -p %t-classic/lib/sunos
+
+/// Canonical triple, 64-bit.
+// RUN: %clang -print-runtime-dir --target=x86_64-pc-solaris2.11 \
+// RUN:   -resource-dir=%t-classic \
+// RUN:   | FileCheck --check-prefix=RUNTIME-DIR-CLASSIC %s
+
+/// Non-canonical triple, 64-bit.
+// RUN: %clang -print-runtime-dir --target=amd64-pc-solaris2.11 \
+// RUN:   -resource-dir=%t-classic \
+// RUN:   | FileCheck --check-prefix=RUNTIME-DIR-CLASSIC %s
+
+/// Canonical triple, 32-bit.
+// RUN: %clang -print-runtime-dir --target=i386-pc-solaris2.11 \
+// RUN:   -resource-dir=%t-classic \
+// RUN:   | FileCheck --check-prefix=RUNTIME-DIR-CLASSIC %s
+
+/// Non-canonical triple, 32-bit.
+// RUN: %clang -print-runtime-dir --target=i686-pc-solaris2.11 \
+// RUN:   -resource-dir=%t-classic \
+// RUN:   | FileCheck --check-prefix=RUNTIME-DIR-CLASSIC %s
+
+// RUNTIME-DIR-CLASSIC: {{.*}}/lib/sunos
+
+/// New runtime layout.
+
+// RUN: mkdir -p %t-runtime/lib/x86_64-pc-solaris2.11
+
+/// Canonical triple, 64-bit.
+// RUN: %clang -print-runtime-dir --target=x86_64-pc-solaris2.11 \
+// RUN:   -resource-dir=%t-runtime \
+// RUN:   | FileCheck --check-prefix=RUNTIME-DIR-X86_64 %s
+
+/// Non-canonical triple, 64-bit.
+// RUN: %clang -print-runtime-dir --target=amd64-pc-solaris2.11 \
+// RUN:   -resource-dir=%t-runtime \
+// RUN:   | FileCheck --check-prefix=RUNTIME-DIR-X86_64 %s
+
+// RUNTIME-DIR-X86_64: {{.*}}/lib/x86_64-pc-solaris2.11
+
+// RUN: mkdir -p %t-runtime/lib/i386-pc-solaris2.11
+
+/// Canonical triple, 32-bit.
+// RUN: %clang -print-runtime-dir --target=i386-pc-solaris2.11 \
+// RUN:   -resource-dir=%t-runtime \
+// RUN:   | FileCheck --check-prefix=RUNTIME-DIR-I386 %s
+
+/// Non-canonical triple, 32-bit.
+// RUN: %clang -print-runtime-dir --target=i686-pc-solaris2.11 \
+// RUN:   -resource-dir=%t-runtime \
+// RUN:   | FileCheck --check-prefix=RUNTIME-DIR-I386 %s
+
+// RUNTIME-DIR-I386: {{.*}}/lib/i386-pc-solaris2.11
Index: clang/test/Driver/noncanon-per-target-runtime-dir.c
===================================================================
--- /dev/null
+++ clang/test/Driver/noncanon-per-target-runtime-dir.c
@@ -0,0 +1,20 @@
+/// Check that clang's and compiler-rt's ideas of per-target runtime dirs match.
+
+// RUN: %clang -### %s 2>&1 \
+// RUN:     --target=amd64-pc-solaris2.11 -fsanitize=undefined \
+// RUN:     -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
+// RUN:     --sysroot=%S/Inputs/solaris_x86_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-SOLARIS-AMD64 %s
+
+// CHECK-SOLARIS-AMD64: x86_64-pc-solaris2.11/libclang_rt.ubsan_standalone.a
+// CHECK-SOLARIS-AMD64-NOT: lib/sunos/libclang_rt.ubsan_standalone-x86_64.a"
+
+// RUN: %clang -### %s 2>&1 \
+// RUN:     --target=sparc64-unknown-linux-gnu -fsanitize=undefined \
+// RUN:     -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
+// RUN:     --sysroot=%S/Inputs/debian_sparc64_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-DEBIAN-SPARC64 %s
+
+// CHECK-DEBIAN-SPARC64: sparcv9-unknown-linux-gnu/libclang_rt.ubsan_standalone.a
+// CHECK-DEBIAN-SPARC64-NOT: lib/linux/libclang_rt.ubsan_standalone-sparcv9.a"
+
Index: clang/lib/Driver/ToolChain.cpp
===================================================================
--- clang/lib/Driver/ToolChain.cpp
+++ clang/lib/Driver/ToolChain.cpp
@@ -537,7 +537,17 @@
   path_list Paths;
   auto addPathForTriple = [this, &Paths](const llvm::Triple &Triple) {
     SmallString<128> P(D.ResourceDir);
-    llvm::sys::path::append(P, "lib", Triple.str());
+    llvm::Triple CanonicalTriple;
+    if (Triple.hasEnvironment())
+      CanonicalTriple =
+          llvm::Triple(llvm::Triple::getArchTypeName(Triple.getArch()),
+                       Triple.getVendorName(), Triple.getOSName(),
+                       Triple.getEnvironmentName());
+    else
+      CanonicalTriple =
+          llvm::Triple(llvm::Triple::getArchTypeName(Triple.getArch()),
+                       Triple.getVendorName(), Triple.getOSName());
+    llvm::sys::path::append(P, "lib", CanonicalTriple.str());
     Paths.push_back(std::string(P.str()));
   };
 
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to