[clang] [clang] add x86_64 baremetal triple include search paths (PR #183453)
Mythreya Kuricheti via cfe-commits
cfe-commits at lists.llvm.org
Thu Mar 12 00:59:39 PDT 2026
https://github.com/MythreyaK updated https://github.com/llvm/llvm-project/pull/183453
>From 5bb31fe2ce4fff0c139f28190dc3df14b8c80ec4 Mon Sep 17 00:00:00 2001
From: Mythreya <git at mythreya.dev>
Date: Wed, 25 Feb 2026 02:21:57 -0800
Subject: [PATCH 1/5] [clang] add x86_64 baremetal triple include search paths
---
clang/lib/Driver/ToolChains/BareMetal.cpp | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/clang/lib/Driver/ToolChains/BareMetal.cpp b/clang/lib/Driver/ToolChains/BareMetal.cpp
index 5e974527774eb..18995129739ee 100644
--- a/clang/lib/Driver/ToolChains/BareMetal.cpp
+++ b/clang/lib/Driver/ToolChains/BareMetal.cpp
@@ -51,6 +51,12 @@ static bool isPPCBareMetal(const llvm::Triple &Triple) {
Triple.getEnvironment() == llvm::Triple::EABI;
}
+/// Is the triple {ix86,x86_64}-*-none-elf?
+static bool isPCBareMetal(const llvm::Triple &Triple) {
+ return Triple.isX86() && Triple.getOS() == llvm::Triple::UnknownOS &&
+ Triple.getObjectFormat() == llvm::Triple::ELF;
+}
+
static bool findRISCVMultilibs(const Driver &D,
const llvm::Triple &TargetTriple,
const ArgList &Args, DetectedMultilibs &Result) {
@@ -351,7 +357,7 @@ void BareMetal::findMultilibs(const Driver &D, const llvm::Triple &Triple,
bool BareMetal::handlesTarget(const llvm::Triple &Triple) {
return arm::isARMEABIBareMetal(Triple) ||
aarch64::isAArch64BareMetal(Triple) || isRISCVBareMetal(Triple) ||
- isPPCBareMetal(Triple);
+ isPPCBareMetal(Triple) || isPCBareMetal(Triple);
}
Tool *BareMetal::buildLinker() const {
>From 5826e2feccbce9a2bb014585092bb07e1ff350c0 Mon Sep 17 00:00:00 2001
From: Mythreya <git at mythreya.dev>
Date: Thu, 26 Feb 2026 01:54:23 -0800
Subject: [PATCH 2/5] tests updates
reorder includes a bit so that the resource dir comes last, after the triple-local directory
---
clang/lib/Driver/ToolChains/BareMetal.cpp | 14 +++++++-------
clang/test/Driver/baremetal.cpp | 14 +++++++-------
clang/test/Driver/riscv32-toolchain.c | 2 +-
clang/test/Driver/riscv64-toolchain.c | 2 +-
4 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/clang/lib/Driver/ToolChains/BareMetal.cpp b/clang/lib/Driver/ToolChains/BareMetal.cpp
index 18995129739ee..74faf5db668fe 100644
--- a/clang/lib/Driver/ToolChains/BareMetal.cpp
+++ b/clang/lib/Driver/ToolChains/BareMetal.cpp
@@ -54,7 +54,7 @@ static bool isPPCBareMetal(const llvm::Triple &Triple) {
/// Is the triple {ix86,x86_64}-*-none-elf?
static bool isPCBareMetal(const llvm::Triple &Triple) {
return Triple.isX86() && Triple.getOS() == llvm::Triple::UnknownOS &&
- Triple.getObjectFormat() == llvm::Triple::ELF;
+ Triple.getEnvironmentName() == "elf";
}
static bool findRISCVMultilibs(const Driver &D,
@@ -405,12 +405,6 @@ void BareMetal::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
if (DriverArgs.hasArg(options::OPT_nostdinc))
return;
- if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) {
- SmallString<128> Dir(getDriver().ResourceDir);
- llvm::sys::path::append(Dir, "include");
- addSystemInclude(DriverArgs, CC1Args, Dir.str());
- }
-
if (DriverArgs.hasArg(options::OPT_nostdlibinc))
return;
@@ -434,6 +428,12 @@ void BareMetal::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
addSystemInclude(DriverArgs, CC1Args, Dir.str());
}
}
+
+ if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) {
+ SmallString<128> Dir(getDriver().ResourceDir);
+ llvm::sys::path::append(Dir, "include");
+ addSystemInclude(DriverArgs, CC1Args, Dir.str());
+ }
}
void BareMetal::addClangTargetOptions(const ArgList &DriverArgs,
diff --git a/clang/test/Driver/baremetal.cpp b/clang/test/Driver/baremetal.cpp
index 1ab676fd390f3..21401547be222 100644
--- a/clang/test/Driver/baremetal.cpp
+++ b/clang/test/Driver/baremetal.cpp
@@ -244,24 +244,24 @@
// CHECK-AARCH64-NO-HOST-INC: InstalledDir: [[INSTALLEDDIR:.+]]
// CHECK-AARCH64-NO-HOST-INC: "-resource-dir" "[[RESOURCE:[^"]+]]"
// CHECK-AARCH64-NO-HOST-INC-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}include{{[/\\]+}}c++{{[/\\]+}}v1"
-// CHECK-AARCH64-NO-HOST-INC-SAME: "-internal-isystem" "[[RESOURCE]]{{[/\\]+}}include"
// CHECK-AARCH64-NO-HOST-INC-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}include"
+// CHECK-AARCH64-NO-HOST-INC-SAME: "-internal-isystem" "[[RESOURCE]]{{[/\\]+}}include"
// RUN: %clang -no-canonical-prefixes %s -### --target=riscv32-unknown-elf 2>&1 \
// RUN: | FileCheck --check-prefix=CHECK-RISCV32-NO-HOST-INC %s
// CHECK-RISCV32-NO-HOST-INC: InstalledDir: [[INSTALLEDDIR:.+]]
// CHECK-RISCV32-NO-HOST-INC: "-resource-dir" "[[RESOURCE:[^"]+]]"
// CHECK-RISCV32-NO-HOST-INC-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}include{{[/\\]+}}c++{{[/\\]+}}v1"
-// CHECK-RISCV32-NO-HOST-INC-SAME: "-internal-isystem" "[[RESOURCE]]{{[/\\]+}}include"
// CHECK-RISCV32-NO-HOST-INC-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}include"
+// CHECK-RISCV32-NO-HOST-INC-SAME: "-internal-isystem" "[[RESOURCE]]{{[/\\]+}}include"
// RUN: %clang -no-canonical-prefixes %s -### --target=riscv64-unknown-elf 2>&1 \
// RUN: | FileCheck --check-prefix=CHECK-RISCV64-NO-HOST-INC %s
// CHECK-RISCV64-NO-HOST-INC: InstalledDir: [[INSTALLEDDIR:.+]]
// CHECK-RISCV64-NO-HOST-INC: "-resource-dir" "[[RESOURCE:[^"]+]]"
// CHECK-RISCV64-NO-HOST-INC-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}include{{[/\\]+}}c++{{[/\\]+}}v1"
-// CHECK-RISCV64-NO-HOST-INC-SAME: "-internal-isystem" "[[RESOURCE]]{{[/\\]+}}include"
// CHECK-RISCV64-NO-HOST-INC-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}include"
+// CHECK-RISCV64-NO-HOST-INC-SAME: "-internal-isystem" "[[RESOURCE]]{{[/\\]+}}include"
// RUN: %clang %s -### --target=riscv64-unknown-elf -o %t.out -L some/directory/user/asked/for \
// RUN: --sysroot=%S/Inputs/basic_riscv64_tree/riscv64-unknown-elf 2>&1 \
@@ -525,8 +525,8 @@
// CHECK-PPCEABI: "-nostdsysteminc"
// CHECK-PPCEABI-SAME: "-resource-dir" "[[RESOURCE:[^"]+]]"
// CHECK-PPCEABI-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}include{{[/\\]+}}c++{{[/\\]+}}v1"
-// CHECK-PPCEABI-SAME: "-internal-isystem" "[[RESOURCE]]{{[/\\]+}}include"
// CHECK-PPCEABI-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}include"
+// CHECK-PPCEABI-SAME: "-internal-isystem" "[[RESOURCE]]{{[/\\]+}}include"
// CHECK-PPCEABI-NEXT: ld{{(.exe)?}}" "-Bstatic"
// CHECK-PPCEABI-SAME: "-L[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}lib"
// CHECK-PPCEABI-SAME:"{{.*}}.o"
@@ -540,8 +540,8 @@
// CHECK-PPC64EABI: "-nostdsysteminc"
// CHECK-PPC64EABI-SAME: "-resource-dir" "[[RESOURCE:[^"]+]]"
// CHECK-PPC64EABI-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}include{{[/\\]+}}c++{{[/\\]+}}v1"
-// CHECK-PPC64EABI-SAME: "-internal-isystem" "[[RESOURCE]]{{[/\\]+}}include"
// CHECK-PPC64EABI-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}include"
+// CHECK-PPC64EABI-SAME: "-internal-isystem" "[[RESOURCE]]{{[/\\]+}}include"
// CHECK-PPC64EABI-NEXT: ld{{(.exe)?}}" "-Bstatic"
// CHECK-PPC64EABI-SAME: "-L[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}lib"
// CHECK-PPC64EABI-SAME:"{{.*}}.o"
@@ -555,8 +555,8 @@
// CHECK-PPCLEEABI: "-nostdsysteminc"
// CHECK-PPCLEEABI-SAME: "-resource-dir" "[[RESOURCE:[^"]+]]"
// CHECK-PPCLEEABI-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}include{{[/\\]+}}c++{{[/\\]+}}v1"
-// CHECK-PPCLEEABI-SAME: "-internal-isystem" "[[RESOURCE]]{{[/\\]+}}include"
// CHECK-PPCLEEABI-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}include"
+// CHECK-PPCLEEABI-SAME: "-internal-isystem" "[[RESOURCE]]{{[/\\]+}}include"
// CHECK-PPCLEEABI-NEXT: ld{{(.exe)?}}" "-Bstatic"
// CHECK-PPCLEEABI-SAME: "-L[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}lib"
// CHECK-PPCLEEABI-SAME:"{{.*}}.o"
@@ -570,8 +570,8 @@
// CHECK-PPC64LEEABI: "-nostdsysteminc"
// CHECK-PPC64LEEABI-SAME: "-resource-dir" "[[RESOURCE:[^"]+]]"
// CHECK-PPC64LEEABI-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}include{{[/\\]+}}c++{{[/\\]+}}v1"
-// CHECK-PPC64LEEABI-SAME: "-internal-isystem" "[[RESOURCE]]{{[/\\]+}}include"
// CHECK-PPC64LEEABI-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}include"
+// CHECK-PPC64LEEABI-SAME: "-internal-isystem" "[[RESOURCE]]{{[/\\]+}}include"
// CHECK-PPC64LEEABI-NEXT: ld{{(.exe)?}}" "-Bstatic"
// CHECK-PPC64LEEABI-SAME: "-L[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}lib"
// CHECK-PPC64LEEABI-SAME:"{{.*}}.o"
diff --git a/clang/test/Driver/riscv32-toolchain.c b/clang/test/Driver/riscv32-toolchain.c
index 04acf1e7edbe0..23f41bfd4c12e 100644
--- a/clang/test/Driver/riscv32-toolchain.c
+++ b/clang/test/Driver/riscv32-toolchain.c
@@ -203,8 +203,8 @@
// RUN: --gcc-toolchain=%S/Inputs/basic_riscv32_tree --sysroot= \
// RUN: -resource-dir=%s/Inputs/resource_dir 2>&1 \
// RUN: | FileCheck -check-prefix=RESOURCE-INC %s
-// RESOURCE-INC: "-internal-isystem" "{{.*}}/Inputs/resource_dir/include"
// RESOURCE-INC: "-internal-isystem" "{{.*}}/basic_riscv32_tree{{.*}}riscv32-unknown-linux-gnu/include"
+// RESOURCE-INC: "-internal-isystem" "{{.*}}/Inputs/resource_dir/include"
// RUN: %clang -### %s --target=riscv32 \
// RUN: --gcc-toolchain=%S/Inputs/basic_riscv32_tree --sysroot= \
diff --git a/clang/test/Driver/riscv64-toolchain.c b/clang/test/Driver/riscv64-toolchain.c
index 378f3d9db7bad..9f206979b4ad7 100644
--- a/clang/test/Driver/riscv64-toolchain.c
+++ b/clang/test/Driver/riscv64-toolchain.c
@@ -159,8 +159,8 @@
// RUN: --gcc-toolchain=%S/Inputs/basic_riscv64_tree --sysroot= \
// RUN: -resource-dir=%s/Inputs/resource_dir 2>&1 \
// RUN: | FileCheck -check-prefix=RESOURCE-INC %s
-// RESOURCE-INC: "-internal-isystem" "{{.*}}/Inputs/resource_dir/include"
// RESOURCE-INC: "-internal-isystem" "{{.*}}/basic_riscv64_tree/{{.*}}riscv64-unknown-linux-gnu/include"
+// RESOURCE-INC: "-internal-isystem" "{{.*}}/Inputs/resource_dir/include"
// RUN: %clang -### %s --target=riscv64 \
// RUN: --gcc-toolchain=%S/Inputs/basic_riscv64_tree --sysroot= \
>From e94735242d3463d1db6086f62e5eb3ca56745f3b Mon Sep 17 00:00:00 2001
From: Mythreya <git at mythreya.dev>
Date: Thu, 26 Feb 2026 02:13:54 -0800
Subject: [PATCH 3/5] Add pc baremetal tests
---
clang/test/Driver/baremetal.cpp | 46 +++++++++++++++++++++++++++++++++
1 file changed, 46 insertions(+)
diff --git a/clang/test/Driver/baremetal.cpp b/clang/test/Driver/baremetal.cpp
index 21401547be222..f03f85488da88 100644
--- a/clang/test/Driver/baremetal.cpp
+++ b/clang/test/Driver/baremetal.cpp
@@ -263,6 +263,22 @@
// CHECK-RISCV64-NO-HOST-INC-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}include"
// CHECK-RISCV64-NO-HOST-INC-SAME: "-internal-isystem" "[[RESOURCE]]{{[/\\]+}}include"
+// RUN: %clang -no-canonical-prefixes %s -### --target=i386-unknown-elf 2>&1 \
+// RUN: | FileCheck --check-prefix=CHECK-PCX86-NO-HOST-INC %s
+// CHECK-PCX86-NO-HOST-INC: InstalledDir: [[INSTALLEDDIR:.+]]
+// CHECK-PCX86-NO-HOST-INC: "-resource-dir" "[[RESOURCE:[^"]+]]"
+// CHECK-PCX86-NO-HOST-INC-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}include{{[/\\]+}}c++{{[/\\]+}}v1"
+// CHECK-PCX86-NO-HOST-INC-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}include"
+// CHECK-PCX86-NO-HOST-INC-SAME: "-internal-isystem" "[[RESOURCE]]{{[/\\]+}}include"
+
+// RUN: %clang -no-canonical-prefixes %s -### --target=x86_64-unknown-elf 2>&1 \
+// RUN: | FileCheck --check-prefix=CHECK-PCX86_64-NO-HOST-INC %s
+// CHECK-PCX86_64-NO-HOST-INC: InstalledDir: [[INSTALLEDDIR:.+]]
+// CHECK-PCX86_64-NO-HOST-INC: "-resource-dir" "[[RESOURCE:[^"]+]]"
+// CHECK-PCX86_64-NO-HOST-INC-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}include{{[/\\]+}}c++{{[/\\]+}}v1"
+// CHECK-PCX86_64-NO-HOST-INC-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}include"
+// CHECK-PCX86_64-NO-HOST-INC-SAME: "-internal-isystem" "[[RESOURCE]]{{[/\\]+}}include"
+
// RUN: %clang %s -### --target=riscv64-unknown-elf -o %t.out -L some/directory/user/asked/for \
// RUN: --sysroot=%S/Inputs/basic_riscv64_tree/riscv64-unknown-elf 2>&1 \
// RUN: | FileCheck --check-prefix=CHECK-RV64 %s
@@ -579,6 +595,36 @@
// CHECK-PPC64LEEABI-SAME: "-lc"
// CHECK-PPC64LEEABI-SAME: "-o" "a.out"
+// RUN: %clang -no-canonical-prefixes %s -### --target=i386-unknown-elf 2>&1 \
+// RUN: | FileCheck --check-prefix=CHECK-PCX86ELF %s
+// CHECK-PCX86ELF: InstalledDir: [[INSTALLEDDIR:.+]]
+// CHECK-PCX86ELF: "-nostdsysteminc"
+// CHECK-PCX86ELF-SAME: "-resource-dir" "[[RESOURCE:[^"]+]]"
+// CHECK-PCX86ELF-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}include{{[/\\]+}}c++{{[/\\]+}}v1"
+// CHECK-PCX86ELF-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}include"
+// CHECK-PCX86ELF-SAME: "-internal-isystem" "[[RESOURCE]]{{[/\\]+}}include"
+// CHECK-PCX86ELF-NEXT: ld{{(.exe)?}}" "-Bstatic" "-m" "elf_i386"
+// CHECK-PCX86ELF-SAME: "-L[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}lib"
+// CHECK-PCX86ELF-SAME:"{{.*}}.o"
+// CHECK-PCX86ELF-SAME: "{{[^"]*}}libclang_rt.builtins.a"
+// CHECK-PCX86ELF-SAME: "-lc"
+// CHECK-PCX86ELF-SAME: "-o" "a.out"
+
+// RUN: %clang -no-canonical-prefixes %s -### --target=x86_64-unknown-elf 2>&1 \
+// RUN: | FileCheck --check-prefix=CHECK-PCX86_64ELF %s
+// CHECK-PCX86_64ELF: InstalledDir: [[INSTALLEDDIR:.+]]
+// CHECK-PCX86_64ELF: "-nostdsysteminc"
+// CHECK-PCX86_64ELF-SAME: "-resource-dir" "[[RESOURCE:[^"]+]]"
+// CHECK-PCX86_64ELF-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}include{{[/\\]+}}c++{{[/\\]+}}v1"
+// CHECK-PCX86_64ELF-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}include"
+// CHECK-PCX86_64ELF-SAME: "-internal-isystem" "[[RESOURCE]]{{[/\\]+}}include"
+// CHECK-PCX86_64ELF-NEXT: ld{{(.exe)?}}" "-Bstatic" "-m" "elf_x86_64"
+// CHECK-PCX86_64ELF-SAME: "-L[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}lib"
+// CHECK-PCX86_64ELF-SAME:"{{.*}}.o"
+// CHECK-PCX86_64ELF-SAME: "{{[^"]*}}libclang_rt.builtins.a"
+// CHECK-PCX86_64ELF-SAME: "-lc"
+// CHECK-PCX86_64ELF-SAME: "-o" "a.out"
+
// Check that compiler-rt library without the arch filename suffix will
// be used if present.
// RUN: rm -rf %t.dir/baremetal_clang_rt_noarch
>From bff85a076ca3f55e18fd61962ad14d25eb3dbdcd Mon Sep 17 00:00:00 2001
From: Mythreya <git at mythreya.dev>
Date: Thu, 26 Feb 2026 02:44:26 -0800
Subject: [PATCH 4/5] cleanup
---
clang/lib/Driver/ToolChains/BareMetal.cpp | 35 +++++++++++------------
1 file changed, 17 insertions(+), 18 deletions(-)
diff --git a/clang/lib/Driver/ToolChains/BareMetal.cpp b/clang/lib/Driver/ToolChains/BareMetal.cpp
index 74faf5db668fe..cacc268d73821 100644
--- a/clang/lib/Driver/ToolChains/BareMetal.cpp
+++ b/clang/lib/Driver/ToolChains/BareMetal.cpp
@@ -405,27 +405,26 @@ void BareMetal::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
if (DriverArgs.hasArg(options::OPT_nostdinc))
return;
- if (DriverArgs.hasArg(options::OPT_nostdlibinc))
- return;
-
- const Driver &D = getDriver();
+ if (!DriverArgs.hasArg(options::OPT_nostdlibinc)) {
+ const Driver &D = getDriver();
- if (std::optional<std::string> Path = getStdlibIncludePath())
- addSystemInclude(DriverArgs, CC1Args, *Path);
+ if (std::optional<std::string> Path = getStdlibIncludePath())
+ addSystemInclude(DriverArgs, CC1Args, *Path);
- const SmallString<128> SysRootDir(computeSysRoot());
- if (!SysRootDir.empty()) {
- for (const Multilib &M : getOrderedMultilibs()) {
+ const SmallString<128> SysRootDir(computeSysRoot());
+ if (!SysRootDir.empty()) {
+ for (const Multilib &M : getOrderedMultilibs()) {
+ SmallString<128> Dir(SysRootDir);
+ llvm::sys::path::append(Dir, M.includeSuffix());
+ llvm::sys::path::append(Dir, "include");
+ addSystemInclude(DriverArgs, CC1Args, Dir.str());
+ }
SmallString<128> Dir(SysRootDir);
- llvm::sys::path::append(Dir, M.includeSuffix());
- llvm::sys::path::append(Dir, "include");
- addSystemInclude(DriverArgs, CC1Args, Dir.str());
- }
- SmallString<128> Dir(SysRootDir);
- llvm::sys::path::append(Dir, getTripleString());
- if (D.getVFS().exists(Dir)) {
- llvm::sys::path::append(Dir, "include");
- addSystemInclude(DriverArgs, CC1Args, Dir.str());
+ llvm::sys::path::append(Dir, getTripleString());
+ if (D.getVFS().exists(Dir)) {
+ llvm::sys::path::append(Dir, "include");
+ addSystemInclude(DriverArgs, CC1Args, Dir.str());
+ }
}
}
>From 3c288259b25236b1d67daaf09abbcc79d1973cb8 Mon Sep 17 00:00:00 2001
From: Mythreya <git at mythreya.dev>
Date: Fri, 27 Feb 2026 00:21:25 -0800
Subject: [PATCH 5/5] code review
---
clang/lib/Driver/ToolChains/BareMetal.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/clang/lib/Driver/ToolChains/BareMetal.cpp b/clang/lib/Driver/ToolChains/BareMetal.cpp
index cacc268d73821..abdf161b872ad 100644
--- a/clang/lib/Driver/ToolChains/BareMetal.cpp
+++ b/clang/lib/Driver/ToolChains/BareMetal.cpp
@@ -52,7 +52,7 @@ static bool isPPCBareMetal(const llvm::Triple &Triple) {
}
/// Is the triple {ix86,x86_64}-*-none-elf?
-static bool isPCBareMetal(const llvm::Triple &Triple) {
+static bool isX86BareMetal(const llvm::Triple &Triple) {
return Triple.isX86() && Triple.getOS() == llvm::Triple::UnknownOS &&
Triple.getEnvironmentName() == "elf";
}
@@ -357,7 +357,7 @@ void BareMetal::findMultilibs(const Driver &D, const llvm::Triple &Triple,
bool BareMetal::handlesTarget(const llvm::Triple &Triple) {
return arm::isARMEABIBareMetal(Triple) ||
aarch64::isAArch64BareMetal(Triple) || isRISCVBareMetal(Triple) ||
- isPPCBareMetal(Triple) || isPCBareMetal(Triple);
+ isPPCBareMetal(Triple) || isX86BareMetal(Triple);
}
Tool *BareMetal::buildLinker() const {
More information about the cfe-commits
mailing list