fix(toolchain): pass -L as well as an rpath for a toolchain outside /usr
Inside the Flatpak the bundled toolchain compiled every bootstrap object, then glslang's configure failed its test link with `unable to find library -lc++`. clang searches its per-target runtime directory (lib/<triple>) and the system library paths for libc++, not <prefix>/lib, so with the classic layout a toolchain outside /usr needs the search path spelled out, just as its loader needs the rpath. LibcxxLinkFlags and build.sh now emit both, the same pair an explicit CRAFTER_BUILD_LIBCXX_DIR already got. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
a72d18eeab
commit
d22a8603df
4 changed files with 25 additions and 19 deletions
|
|
@ -51,14 +51,17 @@ std::string Toolchain::LibcxxCompileFlags() const {
|
|||
}
|
||||
|
||||
std::string Toolchain::LibcxxLinkFlags() const {
|
||||
std::string flags;
|
||||
// clang searches its per-target runtime directory and the system library
|
||||
// paths for -lc++, not <prefix>/lib, so a toolchain outside /usr with the
|
||||
// classic layout needs the search path as well as the run-time path.
|
||||
fs::path lib;
|
||||
if (!libcxxDir.empty()) {
|
||||
fs::path lib = libcxxDir / "lib";
|
||||
flags += std::format(" -L{} -Wl,-rpath,{}", lib.string(), lib.string());
|
||||
lib = libcxxDir / "lib";
|
||||
} else if (!prefix.empty() && prefix != "/usr") {
|
||||
flags += std::format(" -Wl,-rpath,{}", (prefix / "lib").string());
|
||||
lib = prefix / "lib";
|
||||
}
|
||||
return flags;
|
||||
if (lib.empty()) return {};
|
||||
return std::format(" -L{} -Wl,-rpath,{}", lib.string(), lib.string());
|
||||
}
|
||||
|
||||
std::string Toolchain::Key() const {
|
||||
|
|
|
|||
Loading…
Reference in a new issue