https://github.com/lenary updated https://github.com/llvm/llvm-project/pull/238184
>From 32037958950dc750ac4a5662815cbd9a66ff3563 Mon Sep 17 00:00:00 2001 From: Sam Elliott <[email protected]> Date: Mon, 2 Nov 2026 17:27:17 -0800 Subject: [PATCH] [clang][nfc] Add baremetal runtime path checks Showing how the multilib configuration affects runtime include and lib paths. This change also adds comments to describe why the include paths and lib paths have slightly different handling. Assisted-by: AI --- clang/lib/Driver/ToolChain.cpp | 4 ++++ clang/lib/Driver/ToolChains/BareMetal.cpp | 2 ++ .../arm-none-eabi/thumb/v8-m.main/fp/libclang_rt.builtins.a | 1 + clang/test/Driver/baremetal-multilib.yaml | 4 +++- 4 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 clang/test/Driver/Inputs/multilib_baremetal_resource_tree/lib/thumbv8m.main-unknown-none-eabihf/arm-none-eabi/thumb/v8-m.main/fp/libclang_rt.builtins.a diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp index b3e7043a64fe56..2f52da5fc4ad03 100644 --- a/clang/lib/Driver/ToolChain.cpp +++ b/clang/lib/Driver/ToolChain.cpp @@ -179,6 +179,8 @@ bool ToolChain::loadMultilibsFromYAML(const llvm::opt::ArgList &Args, std::string(FilePath)); ++FileInsertPos; if (RuntimeDir) { + // the builtin runtime directories include the multilib path, as the + // compiler-rt library files come from a runtimes build. SmallString<128> LibPath(*RuntimeDir); llvm::sys::path::append(LibPath, M.gccSuffix()); getLibraryPaths().insert(getLibraryPaths().begin() + LibInsertPos, @@ -877,6 +879,8 @@ StringRef ToolChain::getOSLibName() const { std::string ToolChain::getCompilerRTPath() const { SmallString<128> Path(getDriver().ResourceDir); if (isBareMetal()) { + // the builtin compiler-rt directories include the multilib path, as the + // compiler-rt library files come from a runtimes build. llvm::sys::path::append(Path, "lib", getOSLibName()); if (!SelectedMultilibs.empty()) { Path += SelectedMultilibs.back().gccSuffix(); diff --git a/clang/lib/Driver/ToolChains/BareMetal.cpp b/clang/lib/Driver/ToolChains/BareMetal.cpp index 619a7fb9746159..48ccaa6325cc97 100644 --- a/clang/lib/Driver/ToolChains/BareMetal.cpp +++ b/clang/lib/Driver/ToolChains/BareMetal.cpp @@ -327,6 +327,8 @@ void BareMetal::AddClangSystemIncludeArgs(const ArgList &DriverArgs, return; if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) { + // the builtin include directory does not include any multilib path, as the + // builtin include files come from clang's build, not a runtimes build. SmallString<128> Dir(getDriver().ResourceDir); llvm::sys::path::append(Dir, "include"); addSystemInclude(DriverArgs, CC1Args, Dir.str()); diff --git a/clang/test/Driver/Inputs/multilib_baremetal_resource_tree/lib/thumbv8m.main-unknown-none-eabihf/arm-none-eabi/thumb/v8-m.main/fp/libclang_rt.builtins.a b/clang/test/Driver/Inputs/multilib_baremetal_resource_tree/lib/thumbv8m.main-unknown-none-eabihf/arm-none-eabi/thumb/v8-m.main/fp/libclang_rt.builtins.a new file mode 100644 index 00000000000000..c6237ee17ae5a4 --- /dev/null +++ b/clang/test/Driver/Inputs/multilib_baremetal_resource_tree/lib/thumbv8m.main-unknown-none-eabihf/arm-none-eabi/thumb/v8-m.main/fp/libclang_rt.builtins.a @@ -0,0 +1 @@ +This file is a fixture used to verify BareMetal multilib compiler-rt lookup. diff --git a/clang/test/Driver/baremetal-multilib.yaml b/clang/test/Driver/baremetal-multilib.yaml index 17df2972116b1c..8e1b03947a9187 100644 --- a/clang/test/Driver/baremetal-multilib.yaml +++ b/clang/test/Driver/baremetal-multilib.yaml @@ -2,15 +2,17 @@ # RUN: %clang --multi-lib-config=%s -no-canonical-prefixes -x c++ %s -### -o %t.out 2>&1 \ # RUN: --target=thumbv8m.main-none-eabihf --sysroot= \ +# RUN: -resource-dir=%S/Inputs/multilib_baremetal_resource_tree \ # RUN: | FileCheck %s # CHECK: "-cc1" "-triple" "thumbv8m.main-unknown-none-eabihf" # CHECK-SAME: "-internal-isystem" "[[SYSROOT:[^"]*]]/bin/../lib/clang-runtimes/arm-none-eabi/thumb/v8-m.main/fp/include/c++/v1" +# CHECK-SAME: "-internal-isystem" "{{.*}}/multilib_baremetal_resource_tree/include" # CHECK-SAME: "-internal-isystem" "[[SYSROOT]]/bin/../lib/clang-runtimes/arm-none-eabi/thumb/v8-m.main/fp/include" # CHECK-SAME: "-x" "c++" "{{.*}}baremetal-multilib.yaml" # CHECK-NEXT: ld{{(.exe)?}}" "-Bstatic" # CHECK-SAME: "-L[[SYSROOT]]/bin/../lib/clang-runtimes/arm-none-eabi/thumb/v8-m.main/fp/lib" # CHECK-SAME: "{{.*}}.o" -# CHECK-SAME: "{{[^"]*}}libclang_rt.builtins.a" +# CHECK-SAME: "{{.*}}/multilib_baremetal_resource_tree/lib/thumbv8m.main-unknown-none-eabihf/arm-none-eabi/thumb/v8-m.main/fp/libclang_rt.builtins.a" # CHECK-SAME: "-lc" # CHECK-SAME: "-o" "{{.*}}.tmp.out" _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
