https://github.com/MythreyaK created 
https://github.com/llvm/llvm-project/pull/227965

Clang does not auto-detect `multilib.yaml` in the triple dirs correctly because 
baremetal targets use `SYSROOT` as a fallback dir, unlike the linux 
`multilib.yaml` discovery, which correctly searches the triple-specific dirs 
first (`FallbackDir` dir is unset).

`findMultilibsYAML` treats `FallbackDir` and `getStdlibPath()` as 
mutually-exclusive settings. Because baremetal uses a fallback path 
`SYSROOT/multilib.yaml`, `getStdlibPath()` is never searched 
(`SYSROOT/usr/lib/<triple>/multilib.yaml`).

With this change to shared `Toolchain.cpp`, baremetal targets look for a 
`multilib.yaml` in the triple-specific dirs first, before attempting to locate 
it in SYSROOT. Attempt triple-specific dirs first if present, `FallbackDir` 
otherwise.

Follow-up to llvm/llvm-project#183453

>From 4a448aa18c39b5654b5f6ffd079fbd1a7c54e5d5 Mon Sep 17 00:00:00 2001
From: Mythreya Kuricheti <[email protected]>
Date: Thu, 1 Oct 2026 05:43:57 +0000
Subject: [PATCH] [clang]: baremetal `multilib.yaml` discovery

Clang does not auto-detect `multilib.yaml` in the triple dirs
correctly because baremetal targets use `SYSROOT` as a fallback
dir, unlike the linux `multilib.yaml` discovery, which correctly
searches the triple-specific dirs first (`FallbackDir` dir is
unset).

`findMultilibsYAML` treats `FallbackDir` and `getStdlibPath()`
as mutually-exclusive settings. Because baremetal uses a fallback
path `SYSROOT/multilib.yaml`, `getStdlibPath()` is never searched
(`SYSROOT/usr/lib/<triple>/multilib.yaml`).

With this change to shared `Toolchain.cpp`, baremetal targets
look for a `multilib.yaml` in the triple-specific dirs first,
before attempting to locate it in SYSROOT. Attempt triple-specific
dirs first if present, `FallbackDir` otherwise.
---
 clang/lib/Driver/ToolChain.cpp | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index 4b194b5b70534..838dbadb482af 100644
--- a/clang/lib/Driver/ToolChain.cpp
+++ b/clang/lib/Driver/ToolChain.cpp
@@ -202,10 +202,10 @@ ToolChain::findMultilibsYAML(const llvm::opt::ArgList 
&Args, const Driver &D,
   }
 
   SmallString<128> MultilibPath;
-  if (!FallbackDir.empty())
-    MultilibPath = FallbackDir;
-  else if (std::optional<std::string> StdlibDir = getStdlibPath())
+  if (std::optional<std::string> StdlibDir = getStdlibPath())
     MultilibPath = *StdlibDir;
+  else if (!FallbackDir.empty())
+    MultilibPath = FallbackDir;
   else
     return std::nullopt;
   llvm::sys::path::append(MultilibPath, "multilib.yaml");

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

Reply via email to