llvmorg-github-actions[bot] wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: quic-k

<details>
<summary>Changes</summary>

For the non-Picolibc Hexagon ELF toolchain, variant libraries are organized in 
a nested directory hierarchy:
  lib/&lt;cpu&gt;/G0/pic/
For Picolibc, switch to a flat parallel layout where the CPU version, G0, and 
pic qualifiers are encoded as a single hyphen-separated directory name:
  lib/&lt;cpu&gt;-G0-pic/   (PIC + G0)
  lib/&lt;cpu&gt;-G0/       (G0 only)
  lib/&lt;cpu&gt;/          (base)
This applies to both the library search paths (-L flags, via
getHexagonLibraryPaths) and the start-file directory (crt0 lookup,
via getLibraryDir). The non-Picolibc toolchain is unaffected.
The flat layout is easier to package (no deeply nested install trees),
self-documenting, and closer to how other embedded toolchains
expose multilib variants as parallel directories.
Update hexagon-toolchain-picolibc.c to reflect the new paths, and add
--sysroot tests that verify include paths, library search paths, and
start-file selection for the base, G0, and G0-pic variants.

---
Full diff: https://github.com/llvm/llvm-project/pull/201326.diff


2 Files Affected:

- (modified) clang/lib/Driver/ToolChains/Hexagon.cpp (+37-10) 
- (modified) clang/test/Driver/hexagon-toolchain-picolibc.c (+78-15) 


``````````diff
diff --git a/clang/lib/Driver/ToolChains/Hexagon.cpp 
b/clang/lib/Driver/ToolChains/Hexagon.cpp
index 41f03e01b69c1..4409313633f2a 100644
--- a/clang/lib/Driver/ToolChains/Hexagon.cpp
+++ b/clang/lib/Driver/ToolChains/Hexagon.cpp
@@ -584,14 +584,30 @@ void HexagonToolChain::getLibraryDir(const ArgList &Args,
     llvm::sys::path::append(Dir, "lib");
   }
   std::string CpuVer = GetTargetCPUVersion(Args).str();
-  llvm::sys::path::append(Dir, CpuVer);
-  if (auto G = toolchains::HexagonToolChain::getSmallDataThreshold(Args))
-    if (*G == 0)
-      llvm::sys::path::append(Dir, "G0");
+  bool IsPicolibc = GetCStdlibType(Args) == ToolChain::CST_Picolibc;
+  bool IsG0 =
+      toolchains::HexagonToolChain::getSmallDataThreshold(Args).value_or(1) ==
+      0;
   bool IsStatic = Args.hasArg(options::OPT_static);
   bool IsShared = Args.hasArg(options::OPT_shared);
-  if (IsShared && !IsStatic)
-    llvm::sys::path::append(Dir, "pic");
+  bool IsPic = (IsShared && !IsStatic) ||
+               Args.hasArg(options::OPT_fpic, options::OPT_fPIC);
+  if (IsPicolibc) {
+    // Flat layout: lib/v68-G0-pic, lib/v68-G0, lib/v68
+    std::string Variant = CpuVer;
+    if (IsG0)
+      Variant += "-G0";
+    if (IsPic)
+      Variant += "-pic";
+    llvm::sys::path::append(Dir, Variant);
+  } else {
+    // Nested layout (non-Picolibc): lib/v68/G0/pic
+    llvm::sys::path::append(Dir, CpuVer);
+    if (IsG0)
+      llvm::sys::path::append(Dir, "G0");
+    if (IsPic)
+      llvm::sys::path::append(Dir, "pic");
+  }
 }
 
 void HexagonToolChain::getBaseIncludeDir(const ArgList &Args,
@@ -661,14 +677,25 @@ void HexagonToolChain::getHexagonLibraryPaths(const 
ArgList &Args,
   if (auto G = getSmallDataThreshold(Args))
     HasG0 = *G == 0;
 
+  bool IsPicolibc = GetCStdlibType(Args) == ToolChain::CST_Picolibc;
   const std::string CpuVer = GetTargetCPUVersion(Args).str();
   for (auto &Dir : RootDirs) {
     std::string LibDir = Dir + "/lib";
     std::string LibDirCpu = LibDir + '/' + CpuVer;
-    if (HasG0) {
-      if (HasPIC)
-        LibPaths.push_back(LibDirCpu + "/G0/pic");
-      LibPaths.push_back(LibDirCpu + "/G0");
+    if (IsPicolibc) {
+      // Flat layout: lib/v68-G0-pic, lib/v68-G0, lib/v68
+      if (HasG0) {
+        if (HasPIC)
+          LibPaths.push_back(LibDir + "/" + CpuVer + "-G0-pic");
+        LibPaths.push_back(LibDir + "/" + CpuVer + "-G0");
+      }
+    } else {
+      // Nested layout (non-Picolibc): lib/v68/G0/pic, lib/v68/G0
+      if (HasG0) {
+        if (HasPIC)
+          LibPaths.push_back(LibDirCpu + "/G0/pic");
+        LibPaths.push_back(LibDirCpu + "/G0");
+      }
     }
     LibPaths.push_back(LibDirCpu);
     LibPaths.push_back(LibDir);
diff --git a/clang/test/Driver/hexagon-toolchain-picolibc.c 
b/clang/test/Driver/hexagon-toolchain-picolibc.c
index 8282a4da81636..17c391ee2290d 100644
--- a/clang/test/Driver/hexagon-toolchain-picolibc.c
+++ b/clang/test/Driver/hexagon-toolchain-picolibc.c
@@ -16,11 +16,18 @@
 // 
-----------------------------------------------------------------------------
 // Passing start files for Picolibc
 // 
-----------------------------------------------------------------------------
-// RUN: %clang --target=hexagon-none-elf --cstdlib=picolibc -### %s 2>&1 | 
FileCheck %s --check-prefix=CHECK-STARTUP
-// CHECK-STARTUP: "{{.*}}crt0-semihost.o"
+// RUN: %clang --target=hexagon-none-elf --cstdlib=picolibc \
+// RUN:   -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin -mcpu=hexagonv68 \
+// RUN:   -### %s 2>&1 | FileCheck %s --check-prefix=CHECK-STARTUP
+// CHECK-STARTUP: 
"{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-none-elf{{/|\\\\}}lib{{/|\\\\}}v68{{/|\\\\}}crt0-semihost.o"
 //
 // RUN: %clang --target=hexagon-none-elf --cstdlib=picolibc -nostartfiles -### 
%s 2>&1 | FileCheck %s --check-prefix=CHECK-NOSTART
 // CHECK-NOSTART-NOT: "{{.*}}crt0-semihost.o"
+//
+// RUN: %clang --target=hexagon-none-elf --cstdlib=picolibc \
+// RUN:   -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin -mcpu=hexagonv68 
-G0 \
+// RUN:   -### %s 2>&1 | FileCheck %s --check-prefix=CHECK-STARTUP-G0
+// CHECK-STARTUP-G0: 
"{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-none-elf{{/|\\\\}}lib{{/|\\\\}}v68-G0{{/|\\\\}}crt0-semihost.o"
 // 
-----------------------------------------------------------------------------
 // Passing  -nostdlib, -nostartfiles, -nodefaultlibs, -nolibc
 // 
-----------------------------------------------------------------------------
@@ -54,7 +61,7 @@
 // RUN:   -nodefaultlibs %s 2>&1 | FileCheck -check-prefix=CHECK-NODEFAULTLIBS 
%s
 // CHECK-NODEFAULTLIBS: "-cc1"
 // CHECK-NODEFAULTLIBS: {{hexagon-link|ld}}
-// CHECK-NODEFAULTLIBS: "{{.*}}crt0-semihost.o"
+// CHECK-NODEFAULTLIBS: 
"{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-none-elf{{/|\\\\}}lib{{/|\\\\}}v60{{/|\\\\}}crt0-semihost.o"
 // CHECK-NODEFAULTLIBS-NOT: "-lc++"
 // CHECK-NODEFAULTLIBS-NOT: "-lm"
 // CHECK-NODEFAULTLIBS-NOT: "--start-group"
@@ -68,7 +75,7 @@
 // RUN:   -nolibc %s 2>&1 | FileCheck -check-prefix=CHECK-NOLIBC %s
 // CHECK-NOLIBC: "-cc1"
 // CHECK-NOLIBC: {{hexagon-link|ld}}
-// CHECK-NOLIBC: "{{.*}}crt0-semihost.o"
+// CHECK-NOLIBC: 
"{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-none-elf{{/|\\\\}}lib{{/|\\\\}}v60{{/|\\\\}}crt0-semihost.o"
 // CHECK-NOLIBC-SAME: "-lc++"
 // CHECK-NOLIBC-SAME: "-lm"
 // CHECK-NOLIBC-SAME: "--start-group"
@@ -104,19 +111,20 @@
 // RUN:   -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \
 // RUN:   -mcpu=hexagonv68 -### %s 2>&1 | FileCheck 
-check-prefix=CHECK-LIBPATHS %s
 // CHECK-LIBPATHS: 
"-L{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-none-elf{{/|\\\\}}lib{{/|\\\\}}v68"
-// CHECK-LIBPATHS-NOT: 
"-L{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-none-elf{{/|\\\\}}lib{{/|\\\\}}v68{{/|\\\\}}G0"
+// CHECK-LIBPATHS-NOT: 
"-L{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-none-elf{{/|\\\\}}lib{{/|\\\\}}v68-G0"
 
 // RUN: %clang --target=hexagon-none-elf --cstdlib=picolibc \
 // RUN:   -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \
 // RUN:   -mcpu=hexagonv68 -G0 -### %s 2>&1 | FileCheck 
-check-prefix=CHECK-LIBPATHS-G0 %s
-// CHECK-LIBPATHS-G0: 
"-L{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-none-elf{{/|\\\\}}lib{{/|\\\\}}v68{{/|\\\\}}G0"
+// CHECK-LIBPATHS-G0: 
"-L{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-none-elf{{/|\\\\}}lib{{/|\\\\}}v68-G0"
 // CHECK-LIBPATHS-G0: 
"-L{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-none-elf{{/|\\\\}}lib{{/|\\\\}}v68"
 
 // RUN: %clang --target=hexagon-none-elf --cstdlib=picolibc \
 // RUN:   -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \
 // RUN:   -mcpu=hexagonv68 -fpic -### %s 2>&1 | FileCheck 
-check-prefix=CHECK-LIBPATHS-PIC %s
-// CHECK-LIBPATHS-PIC: 
"-L{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-none-elf{{/|\\\\}}lib{{/|\\\\}}v68{{/|\\\\}}G0{{/|\\\\}}pic"
-// CHECK-LIBPATHS-PIC: 
"-L{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-none-elf{{/|\\\\}}lib{{/|\\\\}}v68{{/|\\\\}}G0"
+// CHECK-LIBPATHS-PIC: 
"{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-none-elf{{/|\\\\}}lib{{/|\\\\}}v68-G0-pic{{/|\\\\}}crt0-semihost.o"
+// CHECK-LIBPATHS-PIC: 
"-L{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-none-elf{{/|\\\\}}lib{{/|\\\\}}v68-G0-pic"
+// CHECK-LIBPATHS-PIC: 
"-L{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-none-elf{{/|\\\\}}lib{{/|\\\\}}v68-G0"
 // CHECK-LIBPATHS-PIC: 
"-L{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-none-elf{{/|\\\\}}lib{{/|\\\\}}v68"
 
 // 
=============================================================================
@@ -141,12 +149,19 @@
 // 
-----------------------------------------------------------------------------
 // H2 start files: crt0-noflash-hosted.o (not crt0-semihost.o)
 // 
-----------------------------------------------------------------------------
-// RUN: %clang --target=hexagon-h2-elf --cstdlib=picolibc -### %s 2>&1 | 
FileCheck %s --check-prefix=CHECK-H2-STARTUP
-// CHECK-H2-STARTUP: "{{.*}}crt0-noflash-hosted.o"
+// RUN: %clang --target=hexagon-h2-elf --cstdlib=picolibc \
+// RUN:   -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin -mcpu=hexagonv68 \
+// RUN:   -### %s 2>&1 | FileCheck %s --check-prefix=CHECK-H2-STARTUP
+// CHECK-H2-STARTUP: 
"{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-h2-elf{{/|\\\\}}lib{{/|\\\\}}v68{{/|\\\\}}crt0-noflash-hosted.o"
 // CHECK-H2-STARTUP-NOT: "{{.*}}crt0-semihost.o"
 
 // RUN: %clang --target=hexagon-h2-elf --cstdlib=picolibc -nostartfiles -### 
%s 2>&1 | FileCheck %s --check-prefix=CHECK-H2-NOSTART
 // CHECK-H2-NOSTART-NOT: "{{.*}}crt0-noflash-hosted.o"
+//
+// RUN: %clang --target=hexagon-h2-elf --cstdlib=picolibc \
+// RUN:   -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin -mcpu=hexagonv68 
-G0 \
+// RUN:   -### %s 2>&1 | FileCheck %s --check-prefix=CHECK-H2-STARTUP-G0
+// CHECK-H2-STARTUP-G0: 
"{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-h2-elf{{/|\\\\}}lib{{/|\\\\}}v68-G0{{/|\\\\}}crt0-noflash-hosted.o"
 
 // 
-----------------------------------------------------------------------------
 // H2: -nostdlib, -nostartfiles, -nodefaultlibs, -nolibc
@@ -182,7 +197,7 @@
 // RUN:   -nodefaultlibs %s 2>&1 | FileCheck 
-check-prefix=CHECK-H2-NODEFAULTLIBS %s
 // CHECK-H2-NODEFAULTLIBS: "-cc1"
 // CHECK-H2-NODEFAULTLIBS: {{hexagon-link|ld}}
-// CHECK-H2-NODEFAULTLIBS: "{{.*}}crt0-noflash-hosted.o"
+// CHECK-H2-NODEFAULTLIBS: 
"{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-h2-elf{{/|\\\\}}lib{{/|\\\\}}v68{{/|\\\\}}crt0-noflash-hosted.o"
 // CHECK-H2-NODEFAULTLIBS-NOT: "-lc++"
 // CHECK-H2-NODEFAULTLIBS-NOT: "-lm"
 // CHECK-H2-NODEFAULTLIBS-NOT: "--start-group"
@@ -198,7 +213,7 @@
 // RUN:   -nolibc %s 2>&1 | FileCheck -check-prefix=CHECK-H2-NOLIBC %s
 // CHECK-H2-NOLIBC: "-cc1"
 // CHECK-H2-NOLIBC: {{hexagon-link|ld}}
-// CHECK-H2-NOLIBC: "{{.*}}crt0-noflash-hosted.o"
+// CHECK-H2-NOLIBC: 
"{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-h2-elf{{/|\\\\}}lib{{/|\\\\}}v68{{/|\\\\}}crt0-noflash-hosted.o"
 // CHECK-H2-NOLIBC-SAME: "-lc++"
 // CHECK-H2-NOLIBC-SAME: "-lm"
 // CHECK-H2-NOLIBC-SAME: "--start-group"
@@ -217,7 +232,7 @@
 // CHECK-H2-RTLIB-NOT: "-lgcc"
 
 // 
-----------------------------------------------------------------------------
-// H2: libunwind linked for C++ but not C
+// H2: libunwind linked for C++ by default
 // 
-----------------------------------------------------------------------------
 // RUN: %clangxx --target=hexagon-h2-elf --cstdlib=picolibc -### %s 2>&1 | 
FileCheck %s --check-prefix=CHECK-H2-CXX-UNWIND
 // CHECK-H2-CXX-UNWIND: "-lunwind"
@@ -229,10 +244,58 @@
 // RUN:   -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \
 // RUN:   -mcpu=hexagonv68 -### %s 2>&1 | FileCheck 
-check-prefix=CHECK-H2-LIBPATHS %s
 // CHECK-H2-LIBPATHS: 
"-L{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-h2-elf{{/|\\\\}}lib{{/|\\\\}}v68"
-// CHECK-H2-LIBPATHS-NOT: 
"-L{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-h2-elf{{/|\\\\}}lib{{/|\\\\}}v68{{/|\\\\}}G0"
+// CHECK-H2-LIBPATHS-NOT: 
"-L{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-h2-elf{{/|\\\\}}lib{{/|\\\\}}v68-G0"
 
 // RUN: %clang --target=hexagon-h2-elf --cstdlib=picolibc \
 // RUN:   -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \
 // RUN:   -mcpu=hexagonv68 -G0 -### %s 2>&1 | FileCheck 
-check-prefix=CHECK-H2-LIBPATHS-G0 %s
-// CHECK-H2-LIBPATHS-G0: 
"-L{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-h2-elf{{/|\\\\}}lib{{/|\\\\}}v68{{/|\\\\}}G0"
+// CHECK-H2-LIBPATHS-G0: 
"-L{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-h2-elf{{/|\\\\}}lib{{/|\\\\}}v68-G0"
 // CHECK-H2-LIBPATHS-G0: 
"-L{{.*}}{{/|\\\\}}Inputs{{/|\\\\}}hexagon_tree{{/|\\\\}}Tools{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}target{{/|\\\\}}picolibc{{/|\\\\}}hexagon-unknown-h2-elf{{/|\\\\}}lib{{/|\\\\}}v68"
+
+// 
=============================================================================
+// --sysroot tests: verify includes, library paths, and start files when an
+// explicit sysroot is provided together with --cstdlib=picolibc.
+// The sysroot path is synthetic (/my/picolibc/sysroot); no real directory is
+// needed because the driver emits the paths unconditionally.
+// 
=============================================================================
+
+// 
-----------------------------------------------------------------------------
+// Base (no G0 / no pic): include paths (C and C++), lib/v68, crt0-semihost.o
+// Use the existing Inputs sysroot so that include/c++/v1 exists on disk and
+// the driver emits the C++ include path.
+// 
-----------------------------------------------------------------------------
+// RUN: %clangxx --target=hexagon-none-elf --cstdlib=picolibc \
+// RUN:   
--sysroot=%S/Inputs/hexagon_tree/Tools/target/picolibc/hexagon-unknown-none-elf 
\
+// RUN:   -mcpu=hexagonv68 -### %s 2>&1 | FileCheck 
-check-prefix=CHECK-SYSROOT %s
+// CHECK-SYSROOT: "-isysroot" "{{.*}}{{/|\\\\}}hexagon-unknown-none-elf"
+// CHECK-SYSROOT: "-internal-isystem" 
"{{.*}}{{/|\\\\}}hexagon-unknown-none-elf{{/|\\\\}}include{{/|\\\\}}c++{{/|\\\\}}v1"
+// CHECK-SYSROOT: "-internal-externc-isystem" 
"{{.*}}{{/|\\\\}}hexagon-unknown-none-elf{{/|\\\\}}include"
+// CHECK-SYSROOT: 
"{{.*}}{{/|\\\\}}hexagon-unknown-none-elf{{/|\\\\}}lib{{/|\\\\}}v68{{/|\\\\}}crt0-semihost.o"
+// CHECK-SYSROOT: 
"-L{{.*}}{{/|\\\\}}hexagon-unknown-none-elf{{/|\\\\}}lib{{/|\\\\}}v68"
+// CHECK-SYSROOT: "-L{{.*}}{{/|\\\\}}hexagon-unknown-none-elf{{/|\\\\}}lib"
+// CHECK-SYSROOT-NOT: 
"-L{{.*}}{{/|\\\\}}hexagon-unknown-none-elf{{/|\\\\}}lib{{/|\\\\}}v68-G0"
+
+// 
-----------------------------------------------------------------------------
+// G0: crt0-semihost.o from lib/v68-G0, search paths lib/v68-G0 then lib/v68
+// 
-----------------------------------------------------------------------------
+// RUN: %clang --target=hexagon-none-elf --cstdlib=picolibc \
+// RUN:   --sysroot=/my/picolibc/sysroot \
+// RUN:   -mcpu=hexagonv68 -G0 -### %s 2>&1 | FileCheck 
-check-prefix=CHECK-SYSROOT-G0 %s
+// CHECK-SYSROOT-G0: 
"/my/picolibc/sysroot{{/|\\\\}}lib{{/|\\\\}}v68-G0{{/|\\\\}}crt0-semihost.o"
+// CHECK-SYSROOT-G0: "-L/my/picolibc/sysroot{{/|\\\\}}lib{{/|\\\\}}v68-G0"
+// CHECK-SYSROOT-G0: "-L/my/picolibc/sysroot{{/|\\\\}}lib{{/|\\\\}}v68"
+// CHECK-SYSROOT-G0: "-L/my/picolibc/sysroot{{/|\\\\}}lib"
+// CHECK-SYSROOT-G0-NOT: 
"-L/my/picolibc/sysroot{{/|\\\\}}lib{{/|\\\\}}v68-G0-pic"
+
+// 
-----------------------------------------------------------------------------
+// G0-pic (-fpic): search paths lib/v68-G0-pic, lib/v68-G0, lib/v68
+// -fpic implies both G0 and pic, so crt0 comes from lib/v68-G0-pic
+// 
-----------------------------------------------------------------------------
+// RUN: %clang --target=hexagon-none-elf --cstdlib=picolibc \
+// RUN:   --sysroot=/my/picolibc/sysroot \
+// RUN:   -mcpu=hexagonv68 -fpic -### %s 2>&1 | FileCheck 
-check-prefix=CHECK-SYSROOT-PIC %s
+// CHECK-SYSROOT-PIC: 
"/my/picolibc/sysroot{{/|\\\\}}lib{{/|\\\\}}v68-G0-pic{{/|\\\\}}crt0-semihost.o"
+// CHECK-SYSROOT-PIC: "-L/my/picolibc/sysroot{{/|\\\\}}lib{{/|\\\\}}v68-G0-pic"
+// CHECK-SYSROOT-PIC: "-L/my/picolibc/sysroot{{/|\\\\}}lib{{/|\\\\}}v68-G0"
+// CHECK-SYSROOT-PIC: "-L/my/picolibc/sysroot{{/|\\\\}}lib{{/|\\\\}}v68"
+// CHECK-SYSROOT-PIC: "-L/my/picolibc/sysroot{{/|\\\\}}lib"

``````````

</details>


https://github.com/llvm/llvm-project/pull/201326
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to