From 97c87ceb781eee0a04bd93299a341e03cbe68ddd Mon Sep 17 00:00:00 2001 From: William Huynh Date: Wed, 25 Jun 2025 14:25:22 +0100 Subject: [PATCH 1/5] [clang] Add option for -nolibc in Driver/ToolChains/Baremetal.cpp Some tests in LLVM-libc require this flag, so compiler-rt is still linked in, but not the C library. With this change, it will not be ignored. Minor changes: clang-format --- clang/lib/Driver/ToolChains/BareMetal.cpp | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/clang/lib/Driver/ToolChains/BareMetal.cpp b/clang/lib/Driver/ToolChains/BareMetal.cpp index d8168ed15febd..b87427110d7de 100644 --- a/clang/lib/Driver/ToolChains/BareMetal.cpp +++ b/clang/lib/Driver/ToolChains/BareMetal.cpp @@ -339,15 +339,15 @@ void BareMetal::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs, }; switch (GetCXXStdlibType(DriverArgs)) { - case ToolChain::CST_Libcxx: { - SmallString<128> P(D.Dir); - llvm::sys::path::append(P, "..", "include"); - AddCXXIncludePath(P); - break; - } - case ToolChain::CST_Libstdcxx: - // We only support libc++ toolchain installation. - break; + case ToolChain::CST_Libcxx: { + SmallString<128> P(D.Dir); + llvm::sys::path::append(P, "..", "include"); + AddCXXIncludePath(P); + break; + } + case ToolChain::CST_Libstdcxx: + // We only support libc++ toolchain installation. + break; } std::string SysRoot(computeSysRoot()); @@ -498,7 +498,9 @@ void baremetal::Linker::ConstructJob(Compilation &C, const JobAction &JA, if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) { AddRunTimeLibs(TC, D, CmdArgs, Args); - CmdArgs.push_back("-lc"); + if (!Args.hasArg(options::OPT_nolibc)) { + CmdArgs.push_back("-lc"); + } } if (D.isUsingLTO()) From a433cb779d5b49baba32bae1ce63f151b5cea423 Mon Sep 17 00:00:00 2001 From: William Huynh Date: Thu, 26 Jun 2025 10:19:16 +0100 Subject: [PATCH 2/5] Add lit tests in clang/test/Driver/baremetal.cpp --- clang/test/Driver/baremetal.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/clang/test/Driver/baremetal.cpp b/clang/test/Driver/baremetal.cpp index a80aa9b437117..6dd1ec13d689b 100644 --- a/clang/test/Driver/baremetal.cpp +++ b/clang/test/Driver/baremetal.cpp @@ -143,6 +143,20 @@ // RUN: | FileCheck %s --check-prefix=CHECK-RTLIB-GCC // CHECK-RTLIB-GCC: -lgcc +// RUN: %clang -### --target=arm-none-eabi -nolibc %s 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-NOLIBC +// CHECK-NOLIBC-NOT: "-lc" +// CHECK-NOLIBC-NOT: "-lm" +// CHECK-NOLIBC-NOT: "-lc++" +// CHECK-NOLIBC: "{{[^"]*}}libclang_rt.builtins.a" + +// RUN: %clang -### --target=arm-none-eabi -nostdlib %s 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-NOSTDLIB +// CHECK-NOSTDLIB-NOT: "-lc" +// CHECK-NOSTDLIB-NOT: "-lm" +// CHECK-NOSTDLIB-NOT: "-lc++" +// CHECK-NOSTDLIB-NOT: "{{[^"]*}}libclang_rt.builtins.a" + // RUN: %clang -### --target=arm-none-eabi -v %s 2>&1 \ // RUN: | FileCheck %s --check-prefix=CHECK-SYSROOT-INC // CHECK-SYSROOT-INC-NOT: "-internal-isystem" "include" From 36f933f4b53b730afd0458d31a31eec4c3682ec1 Mon Sep 17 00:00:00 2001 From: William Huynh Date: Wed, 2 Jul 2025 11:49:22 +0100 Subject: [PATCH 3/5] Reapply suggestions from Petr --- clang/test/Driver/baremetal.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/clang/test/Driver/baremetal.cpp b/clang/test/Driver/baremetal.cpp index 471854aaa7b4b..7b78d71ad5de0 100644 --- a/clang/test/Driver/baremetal.cpp +++ b/clang/test/Driver/baremetal.cpp @@ -166,15 +166,11 @@ // RUN: %clang -### --target=arm-none-eabi -nolibc %s 2>&1 \ // RUN: | FileCheck %s --check-prefix=CHECK-NOLIBC // CHECK-NOLIBC-NOT: "-lc" -// CHECK-NOLIBC-NOT: "-lm" -// CHECK-NOLIBC-NOT: "-lc++" // CHECK-NOLIBC: "{{[^"]*}}libclang_rt.builtins.a" // RUN: %clang -### --target=arm-none-eabi -nostdlib %s 2>&1 \ // RUN: | FileCheck %s --check-prefix=CHECK-NOSTDLIB // CHECK-NOSTDLIB-NOT: "-lc" -// CHECK-NOSTDLIB-NOT: "-lm" -// CHECK-NOSTDLIB-NOT: "-lc++" // CHECK-NOSTDLIB-NOT: "{{[^"]*}}libclang_rt.builtins.a" // RUN: %clang -### --target=arm-none-eabi -v %s 2>&1 \ From f4170d8b2c0cdf8c987ff5835070fd14acecec8a Mon Sep 17 00:00:00 2001 From: William Huynh Date: Wed, 2 Jul 2025 11:50:24 +0100 Subject: [PATCH 4/5] Delete trivial brace --- clang/lib/Driver/ToolChains/BareMetal.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/clang/lib/Driver/ToolChains/BareMetal.cpp b/clang/lib/Driver/ToolChains/BareMetal.cpp index dce3248b7587e..9145e8f5d5343 100644 --- a/clang/lib/Driver/ToolChains/BareMetal.cpp +++ b/clang/lib/Driver/ToolChains/BareMetal.cpp @@ -674,9 +674,8 @@ void baremetal::Linker::ConstructJob(Compilation &C, const JobAction &JA, if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) { CmdArgs.push_back("--start-group"); AddRunTimeLibs(TC, D, CmdArgs, Args); - if (!Args.hasArg(options::OPT_nolibc)) { + if (!Args.hasArg(options::OPT_nolibc)) CmdArgs.push_back("-lc"); - } if (TC.hasValidGCCInstallation() || detectGCCToolchainAdjacent(D)) CmdArgs.push_back("-lgloss"); CmdArgs.push_back("--end-group"); From 68b2eda3762c60f1c0d2af118b2a13fae4fc951f Mon Sep 17 00:00:00 2001 From: William Huynh Date: Thu, 3 Jul 2025 10:10:13 +0100 Subject: [PATCH 5/5] Add -rtlib=compiler-rt to tests in baremetal.cpp --- clang/test/Driver/baremetal.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/clang/test/Driver/baremetal.cpp b/clang/test/Driver/baremetal.cpp index 7b78d71ad5de0..5c86cac4d3f3c 100644 --- a/clang/test/Driver/baremetal.cpp +++ b/clang/test/Driver/baremetal.cpp @@ -163,12 +163,12 @@ // RUN: | FileCheck %s --check-prefix=CHECK-RTLIB-GCC // CHECK-RTLIB-GCC: -lgcc -// RUN: %clang -### --target=arm-none-eabi -nolibc %s 2>&1 \ +// RUN: %clang -### --target=arm-none-eabi -nolibc -rtlib=compiler-rt %s 2>&1 \ // RUN: | FileCheck %s --check-prefix=CHECK-NOLIBC // CHECK-NOLIBC-NOT: "-lc" // CHECK-NOLIBC: "{{[^"]*}}libclang_rt.builtins.a" -// RUN: %clang -### --target=arm-none-eabi -nostdlib %s 2>&1 \ +// RUN: %clang -### --target=arm-none-eabi -nostdlib -rtlib=compiler-rt %s 2>&1 \ // RUN: | FileCheck %s --check-prefix=CHECK-NOSTDLIB // CHECK-NOSTDLIB-NOT: "-lc" // CHECK-NOSTDLIB-NOT: "{{[^"]*}}libclang_rt.builtins.a"