[clang] [clang] Add option for -nolibc in Driver/ToolChains/Baremetal.cpp (PR #145700)

2025-06-26 Thread William Huynh via cfe-commits

https://github.com/saturn691 ready_for_review 
https://github.com/llvm/llvm-project/pull/145700
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] Add option for -nolibc in Driver/ToolChains/Baremetal.cpp (PR #145700)

2025-06-26 Thread William Huynh via cfe-commits

https://github.com/saturn691 updated 
https://github.com/llvm/llvm-project/pull/145700

>From 97c87ceb781eee0a04bd93299a341e03cbe68ddd Mon Sep 17 00:00:00 2001
From: William Huynh 
Date: Wed, 25 Jun 2025 14:25:22 +0100
Subject: [PATCH 1/2] [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/2] 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"

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] Add option for -nolibc in Driver/ToolChains/Baremetal.cpp (PR #145700)

2025-06-26 Thread William Huynh via cfe-commits

https://github.com/saturn691 edited 
https://github.com/llvm/llvm-project/pull/145700
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] Add option for -nolibc in Driver/ToolChains/Baremetal.cpp (PR #145700)

2025-06-26 Thread William Huynh via cfe-commits

https://github.com/saturn691 edited 
https://github.com/llvm/llvm-project/pull/145700
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] Add option for -nolibc in Driver/ToolChains/Baremetal.cpp (PR #145700)

2025-06-25 Thread William Huynh via cfe-commits

https://github.com/saturn691 converted_to_draft 
https://github.com/llvm/llvm-project/pull/145700
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] Add option for -nolibc in Driver/ToolChains/Baremetal.cpp (PR #145700)

2025-06-27 Thread William Huynh via cfe-commits


@@ -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"

saturn691 wrote:

Ditto previous comment

https://github.com/llvm/llvm-project/pull/145700
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] Add option for -nolibc in Driver/ToolChains/Baremetal.cpp (PR #145700)

2025-06-27 Thread William Huynh via cfe-commits


@@ -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"

saturn691 wrote:

The thing I'm trying to test is the follows, I think it _still_ makes sense to 
test `libclang_rt.builtings.a`:

-nolibc
Do not use the C library or system libraries tightly coupled with it when 
linking. **Still link with the startup files, libgcc** or toolchain provided 
language support libraries such as libgnat, libgfortran or libstdc++ unless 
options preventing their inclusion are used as well.


-nostdlib
Do not use the standard system startup files or libraries when linking. No 
startup files and only the libraries you specify are passed to the linker, and 
options specifying linkage of the system libraries, such as -static-libgcc or 
-shared-libgcc, are ignored.

The compiler may generate calls to memcmp, memset, memcpy and memmove. These 
entries are usually resolved by entries in libc. These entry points should be 
supplied through some other mechanism when this option is specified.

**One of the standard libraries bypassed by -nostdlib and -nodefaultlibs is 
libgcc.a**, a library of internal subroutines which GCC uses to overcome 
shortcomings of particular machines, or special needs for some languages. 

https://github.com/llvm/llvm-project/pull/145700
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] Add option for -nolibc in Driver/ToolChains/Baremetal.cpp (PR #145700)

2025-06-27 Thread William Huynh via cfe-commits

https://github.com/saturn691 edited 
https://github.com/llvm/llvm-project/pull/145700
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] Add option for -nolibc in Driver/ToolChains/Baremetal.cpp (PR #145700)

2025-06-27 Thread William Huynh via cfe-commits

https://github.com/saturn691 edited 
https://github.com/llvm/llvm-project/pull/145700
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [clang] Add option for -nolibc in Driver/ToolChains/Baremetal.cpp (PR #145700)

2025-06-27 Thread William Huynh via cfe-commits

https://github.com/saturn691 updated 
https://github.com/llvm/llvm-project/pull/145700

>From 97c87ceb781eee0a04bd93299a341e03cbe68ddd Mon Sep 17 00:00:00 2001
From: William Huynh 
Date: Wed, 25 Jun 2025 14:25:22 +0100
Subject: [PATCH 1/4] [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/4] 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 840941ef8009ba40e43fb8590b5ed06c5096b2d4 Mon Sep 17 00:00:00 2001
From: William Huynh 
Date: Fri, 27 Jun 2025 09:43:27 +0100
Subject: [PATCH 3/4] Apply suggestion #1

Co-authored-by: Petr Hosek 
---
 clang/test/Driver/baremetal.cpp | 2 --
 1 file changed, 2 deletions(-)

diff --git a/clang/test/Driver/baremetal.cpp b/clang/test/Driver/baremetal.cpp
index 6dd1ec13d689b..89df2195386cb 100644
--- a/clang/test/Driver/baremetal.cpp
+++ b/clang/test/Driver/baremetal.cpp
@@ -146,8 +146,6 @@
 // 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 \

>From 1ecd485b08ca2b7a0fd85709d0676fdf2fbef52a Mon Sep 17 00:00:00 2001
From: William Huynh 
Date: Fri, 27 Jun 2025 09:52:54 +0100
Subject: [PATCH 4/4] Apply suggestion 2

Co-authored-by: Petr Hosek 
---
 clang/test/Driver/baremetal.cpp | 2 --
 1 file changed, 2 deletions(-)

diff --git a/clang/test/Driver/baremetal.cpp b/clang/test/Driver/baremetal.cpp
index 89df2195386cb..0b57c3028a1a5 100644
--- a/clang/test/Driver/baremetal.cpp
+++ b/clang/test/Driver/baremetal.cpp
@@ -151,8 +151,6 @@
 // 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 \

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm