Skip to content

Commit f9e1150

Browse files
authored
[Driver] Normalize the baremetal handling of libc++ and runtimes (llvm#101259)
The handling of libc++ and other runtime libraries in the baremetal driver is different from other targets for no particular reason. This change removes the custom in the baremetal driver logic and replaces it with the generic logic to improve consistency and reduce maintenance overhead while also handling additional flags the current logic doesn't.
1 parent 376dad7 commit f9e1150

File tree

5 files changed

+81
-72
lines changed

5 files changed

+81
-72
lines changed

clang/lib/Driver/ToolChains/BareMetal.cpp

Lines changed: 11 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -393,38 +393,6 @@ void BareMetal::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs,
393393
}
394394
}
395395

396-
void BareMetal::AddCXXStdlibLibArgs(const ArgList &Args,
397-
ArgStringList &CmdArgs) const {
398-
switch (GetCXXStdlibType(Args)) {
399-
case ToolChain::CST_Libcxx:
400-
CmdArgs.push_back("-lc++");
401-
if (Args.hasArg(options::OPT_fexperimental_library))
402-
CmdArgs.push_back("-lc++experimental");
403-
CmdArgs.push_back("-lc++abi");
404-
break;
405-
case ToolChain::CST_Libstdcxx:
406-
CmdArgs.push_back("-lstdc++");
407-
CmdArgs.push_back("-lsupc++");
408-
break;
409-
}
410-
CmdArgs.push_back("-lunwind");
411-
}
412-
413-
void BareMetal::AddLinkRuntimeLib(const ArgList &Args,
414-
ArgStringList &CmdArgs) const {
415-
ToolChain::RuntimeLibType RLT = GetRuntimeLibType(Args);
416-
switch (RLT) {
417-
case ToolChain::RLT_CompilerRT: {
418-
CmdArgs.push_back(getCompilerRTArgString(Args, "builtins"));
419-
return;
420-
}
421-
case ToolChain::RLT_Libgcc:
422-
CmdArgs.push_back("-lgcc");
423-
return;
424-
}
425-
llvm_unreachable("Unhandled RuntimeLibType.");
426-
}
427-
428396
void baremetal::StaticLibTool::ConstructJob(Compilation &C, const JobAction &JA,
429397
const InputInfo &Output,
430398
const InputInfoList &Inputs,
@@ -511,14 +479,21 @@ void baremetal::Linker::ConstructJob(Compilation &C, const JobAction &JA,
511479
for (const auto &LibPath : TC.getLibraryPaths())
512480
CmdArgs.push_back(Args.MakeArgString(llvm::Twine("-L", LibPath)));
513481

514-
if (TC.ShouldLinkCXXStdlib(Args))
482+
if (TC.ShouldLinkCXXStdlib(Args)) {
483+
bool OnlyLibstdcxxStatic = Args.hasArg(options::OPT_static_libstdcxx) &&
484+
!Args.hasArg(options::OPT_static);
485+
if (OnlyLibstdcxxStatic)
486+
CmdArgs.push_back("-Bstatic");
515487
TC.AddCXXStdlibLibArgs(Args, CmdArgs);
488+
if (OnlyLibstdcxxStatic)
489+
CmdArgs.push_back("-Bdynamic");
490+
CmdArgs.push_back("-lm");
491+
}
516492

517493
if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) {
518-
CmdArgs.push_back("-lc");
519-
CmdArgs.push_back("-lm");
494+
AddRunTimeLibs(TC, D, CmdArgs, Args);
520495

521-
TC.AddLinkRuntimeLib(Args, CmdArgs);
496+
CmdArgs.push_back("-lc");
522497
}
523498

524499
if (D.isUsingLTO()) {

clang/lib/Driver/ToolChains/BareMetal.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,6 @@ class LLVM_LIBRARY_VISIBILITY BareMetal : public ToolChain {
6767
void AddClangCXXStdlibIncludeArgs(
6868
const llvm::opt::ArgList &DriverArgs,
6969
llvm::opt::ArgStringList &CC1Args) const override;
70-
void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args,
71-
llvm::opt::ArgStringList &CmdArgs) const override;
72-
void AddLinkRuntimeLib(const llvm::opt::ArgList &Args,
73-
llvm::opt::ArgStringList &CmdArgs) const;
7470
std::string computeSysRoot() const override;
7571
SanitizerMask getSupportedSanitizers() const override;
7672

clang/test/Driver/baremetal-multilib.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
# CHECK-SAME: "-x" "c++" "{{.*}}baremetal-multilib.yaml"
1111
# CHECK-NEXT: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic"
1212
# CHECK-SAME: "-L[[SYSROOT]]/bin/../lib/clang-runtimes/arm-none-eabi/thumb/v8-m.main/fp/lib"
13-
# CHECK-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a"
13+
# CHECK-SAME: "{{[^"]*}}libclang_rt.builtins.a"
14+
# CHECK-SAME: "-lc"
1415
# CHECK-SAME: "-o" "{{.*}}.tmp.out"
1516

1617
# RUN: %clang --multi-lib-config=%s -no-canonical-prefixes -x c++ %s -### -o %t.out 2>&1 \

clang/test/Driver/baremetal-sysroot.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,6 @@
1818
// CHECK-V6M-C-SAME: "-x" "c++" "{{.*}}baremetal-sysroot.cpp"
1919
// CHECK-V6M-C-NEXT: "{{[^"]*}}ld{{(\.(lld|bfd|gold))?}}{{(\.exe)?}}" "{{.*}}.o" "-Bstatic"
2020
// CHECK-V6M-C-SAME: "-L{{.*}}/baremetal_default_sysroot{{[/\\]+}}bin{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+}}armv6m-none-eabi{{[/\\]+}}lib"
21-
// CHECK-V6M-C-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a"
21+
// CHECK-V6M-C-SAME: "{{[^"]*}}libclang_rt.builtins.a"
22+
// CHECK-V6M-C-SAME: "-lc"
2223
// CHECK-V6M-C-SAME: "-o" "{{.*}}.o"

clang/test/Driver/baremetal.cpp

Lines changed: 66 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
// CHECK-V6M-C-SAME: "[[SYSROOT:[^"]+]]{{[/\\]+}}lib{{[/\\]+}}crt0.o"
2020
// CHECK-V6M-C-SAME: "-T" "semihosted.lds" "-Lsome{{[/\\]+}}directory{{[/\\]+}}user{{[/\\]+}}asked{{[/\\]+}}for"
2121
// CHECK-V6M-C-SAME: "-L[[SYSROOT:[^"]+]]{{[/\\]+}}lib"
22-
// CHECK-V6M-C-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "--target2=rel" "-o" "{{.*}}.tmp.out"
22+
// CHECK-V6M-C-SAME: "{{[^"]*}}libclang_rt.builtins.a"
23+
// CHECK-V6M-C-SAME: "-lc"
24+
// CHECK-V6M-C-SAME: "--target2=rel" "-o" "{{.*}}.tmp.out"
2325

2426
// RUN: %clang %s -### --target=armv6m-none-eabi -nostdlibinc -nobuiltininc 2>&1 \
2527
// RUN: --sysroot=%S/Inputs/baremetal_arm | FileCheck --check-prefix=CHECK-V6M-LIBINC %s
@@ -40,7 +42,9 @@
4042
// CHECK-V6M-TREE-NEXT: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic" "-EL"
4143
// CHECK-V6M-TREE-SAME: "[[INSTALLED_DIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}armv6m-unknown-none-eabi{{[/\\]+}}crt0.o"
4244
// CHECK-V6M-TREE-SAME: "-L[[INSTALLED_DIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}armv6m-unknown-none-eabi"
43-
// CHECK-V6M-TREE-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "--target2=rel" "-o" "{{.*}}.tmp.out"
45+
// CHECK-V6M-TREE-SAME: "{{[^"]*}}libclang_rt.builtins.a"
46+
// CHECK-V6M-TREE-SAME: "-lc"
47+
// CHECK-V6M-TREE-SAME: "--target2=rel" "-o" "{{.*}}.tmp.out"
4448

4549
// RUN: %clang %s -### --target=armv7m-vendor-none-eabi -rtlib=compiler-rt 2>&1 \
4650
// RUN: --sysroot=%S/Inputs/baremetal_arm \
@@ -53,16 +57,20 @@
5357
// CHECK-ARMV7M-PER_TARGET: "[[SYSROOT:[^"]+]]{{[/\\]+}}lib{{[/\\]+}}crt0.o"
5458
// CHECK-ARMV7M-PER-TARGET: "-L[[SYSROOT:[^"]+]]{{[/\\]+}}lib"
5559
// CHECK-ARMV7M-PER-TARGET: "-L[[RESOURCE_DIR:[^"]+]]{{[/\\]+}}lib{{[/\\]+}}armv7m-vendor-none-eabi
56-
// CHECK-ARMV7M-PER-TARGET: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a"
60+
// CHECK-ARMV7M-PER-TARGET: "{{[^"]*}}libclang_rt.builtins.a"
61+
// CHECK-ARMV7M-PER-TARGET: "-lc"
5762

5863
// RUN: %clangxx %s -### --target=armv6m-none-eabi 2>&1 \
5964
// RUN: --sysroot=%S/Inputs/baremetal_arm | FileCheck --check-prefix=CHECK-V6M-DEFAULTCXX %s
6065
// CHECK-V6M-DEFAULTCXX: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
6166
// CHECK-V6M-DEFAULTCXX: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic" "-EL"
6267
// CHECK-V6M-DEFAULTCXX-SAME: "[[SYSROOT:[^"]+]]{{[/\\]+}}lib{{[/\\]+}}crt0.o"
6368
// CHECK-V6M-DEFAULTCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}baremetal_arm{{[/\\]+}}lib"
64-
// CHECK-V6M-DEFAULTCXX-SAME: "-lc++" "-lc++abi" "-lunwind"
65-
// CHECK-V6M-DEFAULTCXX-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "--target2=rel" "-o" "a.out"
69+
// CHECK-V6M-DEFAULTCXX-SAME: "-lc++"
70+
// CHECK-V6M-DEFAULTCXX-SAME: "-lm"
71+
// CHECK-V6M-DEFAULTCXX-SAME: "{{[^"]*}}libclang_rt.builtins.a"
72+
// CHECK-V6M-DEFAULTCXX-SAME: "-lc"
73+
// CHECK-V6M-DEFAULTCXX-SAME: "--target2=rel" "-o" "a.out"
6674

6775
// RUN: %clangxx %s -### --target=armv6m-none-eabi -stdlib=libc++ 2>&1 \
6876
// RUN: --sysroot=%S/Inputs/baremetal_arm | FileCheck --check-prefix=CHECK-V6M-LIBCXX %s
@@ -71,8 +79,11 @@
7179
// CHECK-V6M-LIBCXX-SAME: "-internal-isystem" "{{[^"]+}}{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1"
7280
// CHECK-V6M-LIBCXX: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic" "-EL"
7381
// CHECK-V6M-LIBCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}baremetal_arm{{[/\\]+}}lib"
74-
// CHECK-V6M-LIBCXX-SAME: "-lc++" "-lc++abi" "-lunwind"
75-
// CHECK-V6M-LIBCXX-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "--target2=rel" "-o" "a.out"
82+
// CHECK-V6M-LIBCXX-SAME: "-lc++"
83+
// CHECK-V6M-LIBCXX-SAME: "-lm"
84+
// CHECK-V6M-LIBCXX-SAME: "{{[^"]*}}libclang_rt.builtins.a"
85+
// CHECK-V6M-LIBCXX-SAME: "-lc"
86+
// CHECK-V6M-LIBCXX-SAME: "--target2=rel" "-o" "a.out"
7687

7788
// RUN: %clangxx %s -### --target=armv6m-none-eabi 2>&1 \
7889
// RUN: --sysroot=%S/Inputs/baremetal_arm \
@@ -83,8 +94,10 @@
8394
// CHECK-V6M-LIBSTDCXX-SAME: "-internal-isystem" "{{[^"]+}}{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}6.0.0"
8495
// CHECK-V6M-LIBSTDCXX: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic" "-EL"
8596
// CHECK-V6M-LIBSTDCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}baremetal_arm{{[/\\]+}}lib"
86-
// CHECK-V6M-LIBSTDCXX-SAME: "-lstdc++" "-lsupc++" "-lunwind"
87-
// CHECK-V6M-LIBSTDCXX-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "--target2=rel" "-o" "a.out"
97+
// CHECK-V6M-LIBSTDCXX-SAME: "-lstdc++" "-lm"
98+
// CHECK-V6M-LIBSTDCXX-SAME: "{{[^"]*}}libclang_rt.builtins.a"
99+
// CHECK-V6M-LIBSTDCXX-SAME: "-lc"
100+
// CHECK-V6M-LIBSTDCXX-SAME: "--target2=rel" "-o" "a.out"
88101

89102
// RUN: %clangxx %s -### --target=armv6m-none-eabi 2>&1 \
90103
// RUN: --sysroot=%S/Inputs/baremetal_arm \
@@ -106,8 +119,9 @@
106119
// CHECK-V6M-LIBCXX-USR-SAME: "-internal-isystem" "{{[^"]+}}baremetal_cxx_sysroot{{[/\\]+}}usr{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1"
107120
// CHECK-V6M-LIBCXX-USR: "{{[^"]*}}-Bstatic"
108121
// CHECK-V6M-LIBCXX-USR-SAME: "-L{{[^"]*}}{{[/\\]+}}baremetal_cxx_sysroot{{[/\\]+}}lib"
109-
// CHECK-V6M-LIBCXX-USR-SAME: "-lc++" "-lc++abi" "-lunwind"
110-
// CHECK-V6M-LIBCXX-USR-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a"
122+
// CHECK-V6M-LIBCXX-USR-SAME: "-lc++" "-lm"
123+
// CHECK-V6M-LIBCXX-USR-SAME: "{{[^"]*}}libclang_rt.builtins.a"
124+
// CHECK-V6M-LIBCXX-USR-SAME: "-lc"
111125

112126
// RUN: %clangxx --target=arm-none-eabi -v 2>&1 \
113127
// RUN: | FileCheck %s --check-prefix=CHECK-THREAD-MODEL
@@ -125,7 +139,7 @@
125139
// RUN: | FileCheck %s --check-prefix=CHECK-NOSTARTFILES
126140
// CHECK-NOSTARTFILES-NOT: "crt0.o"
127141

128-
// RUN: %clang -### --target=arm-none-eabi -rtlib=libgcc -v %s 2>&1 \
142+
// RUN: %clang -### --target=arm-none-eabi -rtlib=libgcc --unwindlib=libgcc -v %s 2>&1 \
129143
// RUN: | FileCheck %s --check-prefix=CHECK-RTLIB-GCC
130144
// CHECK-RTLIB-GCC: -lgcc
131145

@@ -194,16 +208,20 @@
194208
// CHECK-RV64-NEXT: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic"
195209
// CHECK-RV64-SAME: "-Lsome{{[/\\]+}}directory{{[/\\]+}}user{{[/\\]+}}asked{{[/\\]+}}for"
196210
// CHECK-RV64-SAME: "-L[[SYSROOT:[^"]+]]{{[/\\]+}}lib"
197-
// CHECK-RV64-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "-X" "-o" "{{.*}}.tmp.out"
211+
// CHECK-RV64-SAME: "{{[^"]*}}libclang_rt.builtins.a"
212+
// CHECK-RV64-SAME: "-lc"
213+
// CHECK-RV64-SAME: "-X" "-o" "{{.*}}.tmp.out"
198214

199215
// RUN: %clangxx %s -### --target=riscv64-unknown-elf 2>&1 \
200216
// RUN: --sysroot=%S/Inputs/basic_riscv64_tree/riscv64-unknown-elf \
201217
// RUN: | FileCheck --check-prefix=CHECK-RV64-DEFAULTCXX %s
202218
// CHECK-RV64-DEFAULTCXX: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
203219
// CHECK-RV64-DEFAULTCXX: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic"
204220
// CHECK-RV64-DEFAULTCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv64_tree{{[/\\]+}}riscv64-unknown-elf{{[/\\]+}}lib"
205-
// CHECK-RV64-DEFAULTCXX-SAME: "-lc++" "-lc++abi" "-lunwind"
206-
// CHECK-RV64-DEFAULTCXX-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "-X" "-o" "a.out"
221+
// CHECK-RV64-DEFAULTCXX-SAME: "-lc++" "-lm"
222+
// CHECK-RV64-DEFAULTCXX-SAME: "{{[^"]*}}libclang_rt.builtins.a"
223+
// CHECK-RV64-DEFAULTCXX-SAME: "-lc"
224+
// CHECK-RV64-DEFAULTCXX-SAME: "-X" "-o" "a.out"
207225

208226
// RUN: %clangxx %s -### --target=riscv64-unknown-elf 2>&1 \
209227
// RUN: --sysroot=%S/Inputs/basic_riscv64_tree/riscv64-unknown-elf \
@@ -214,8 +232,10 @@
214232
// CHECK-RV64-LIBCXX-SAME: "-internal-isystem" "{{[^"]+}}{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1"
215233
// CHECK-RV64-LIBCXX: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic"
216234
// CHECK-RV64-LIBCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv64_tree{{[/\\]+}}riscv64-unknown-elf{{[/\\]+}}lib"
217-
// CHECK-RV64-LIBCXX-SAME: "-lc++" "-lc++abi" "-lunwind"
218-
// CHECK-RV64-LIBCXX-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "-X" "-o" "a.out"
235+
// CHECK-RV64-LIBCXX-SAME: "-lc++" "-lm"
236+
// CHECK-RV64-LIBCXX-SAME: "{{[^"]*}}libclang_rt.builtins.a"
237+
// CHECK-RV64-LIBCXX-SAME: "-lc"
238+
// CHECK-RV64-LIBCXX-SAME: "-X" "-o" "a.out"
219239

220240
// RUN: %clangxx %s -### 2>&1 --target=riscv64-unknown-elf \
221241
// RUN: --sysroot=%S/Inputs/basic_riscv64_tree/riscv64-unknown-elf \
@@ -226,8 +246,10 @@
226246
// CHECK-RV64-LIBSTDCXX-SAME: "-internal-isystem" "{{[^"]+}}{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}8.0.1"
227247
// CHECK-RV64-LIBSTDCXX: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic"
228248
// CHECK-RV64-LIBSTDCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv64_tree{{[/\\]+}}riscv64-unknown-elf{{[/\\]+}}lib"
229-
// CHECK-RV64-LIBSTDCXX-SAME: "-lstdc++" "-lsupc++" "-lunwind"
230-
// CHECK-RV64-LIBSTDCXX-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "-X" "-o" "a.out"
249+
// CHECK-RV64-LIBSTDCXX-SAME: "-lstdc++" "-lm"
250+
// CHECK-RV64-LIBSTDCXX-SAME: "{{[^"]*}}libclang_rt.builtins.a"
251+
// CHECK-RV64-LIBSTDCXX-SAME: "-lc"
252+
// CHECK-RV64-LIBSTDCXX-SAME: "-X" "-o" "a.out"
231253

232254
// RUN: %clang %s -### 2>&1 --target=riscv32-unknown-elf \
233255
// RUN: -L some/directory/user/asked/for \
@@ -242,16 +264,20 @@
242264
// CHECK-RV32-NEXT: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic"
243265
// CHECK-RV32-SAME: "-Lsome{{[/\\]+}}directory{{[/\\]+}}user{{[/\\]+}}asked{{[/\\]+}}for"
244266
// CHECK-RV32-SAME: "-L[[SYSROOT:[^"]+]]{{[/\\]+}}lib"
245-
// CHECK-RV32-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "-X" "-o" "a.out"
267+
// CHECK-RV32-SAME: "{{[^"]*}}libclang_rt.builtins.a"
268+
// CHECK-RV32-SAME: "-lc"
269+
// CHECK-RV32-SAME: "-X" "-o" "a.out"
246270

247271
// RUN: %clangxx %s -### 2>&1 --target=riscv32-unknown-elf \
248272
// RUN: --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf \
249273
// RUN: | FileCheck --check-prefix=CHECK-RV32-DEFAULTCXX %s
250274
// CHECK-RV32-DEFAULTCXX: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
251275
// CHECK-RV32-DEFAULTCXX: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic"
252276
// CHECK-RV32-DEFAULTCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv32_tree{{[/\\]+}}riscv32-unknown-elf{{[/\\]+}}lib"
253-
// CHECK-RV32-DEFAULTCXX-SAME: "-lc++" "-lc++abi" "-lunwind"
254-
// CHECK-RV32-DEFAULTCXX-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "-X" "-o" "a.out"
277+
// CHECK-RV32-DEFAULTCXX-SAME: "-lc++" "-lm"
278+
// CHECK-RV32-DEFAULTCXX-SAME: "{{[^"]*}}libclang_rt.builtins.a"
279+
// CHECK-RV32-DEFAULTCXX-SAME: "-lc"
280+
// CHECK-RV32-DEFAULTCXX-SAME: "-X" "-o" "a.out"
255281

256282
// RUN: %clangxx %s -### 2>&1 --target=riscv32-unknown-elf \
257283
// RUN: --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf \
@@ -262,8 +288,9 @@
262288
// CHECK-RV32-LIBCXX-SAME: "-internal-isystem" "{{[^"]+}}{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}v1"
263289
// CHECK-RV32-LIBCXX: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic"
264290
// CHECK-RV32-LIBCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv32_tree{{[/\\]+}}riscv32-unknown-elf{{[/\\]+}}lib"
265-
// CHECK-RV32-LIBCXX-SAME: "-lc++" "-lc++abi" "-lunwind"
266-
// CHECK-RV32-LIBCXX-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "-X" "-o" "a.out"
291+
// CHECK-RV32-LIBCXX-SAME: "-lc++" "-lm"
292+
// CHECK-RV32-LIBCXX-SAME: "{{[^"]*}}libclang_rt.builtins.a"
293+
// CHECK-RV32-LIBCXX-SAME: "-X" "-o" "a.out"
267294

268295
// RUN: %clangxx %s -### 2>&1 --target=riscv32-unknown-elf \
269296
// RUN: --sysroot=%S/Inputs/basic_riscv32_tree/riscv32-unknown-elf \
@@ -274,8 +301,9 @@
274301
// CHECK-RV32-LIBSTDCXX-SAME: "-internal-isystem" "{{[^"]+}}{{[/\\]+}}include{{[/\\]+}}c++{{[/\\]+}}8.0.1"
275302
// CHECK-RV32-LIBSTDCXX: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic"
276303
// CHECK-RV32-LIBSTDCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}basic_riscv32_tree{{[/\\]+}}riscv32-unknown-elf{{[/\\]+}}lib"
277-
// CHECK-RV32-LIBSTDCXX-SAME: "-lstdc++" "-lsupc++" "-lunwind"
278-
// CHECK-RV32-LIBSTDCXX-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "-X" "-o" "a.out"
304+
// CHECK-RV32-LIBSTDCXX-SAME: "-lstdc++" "-lm"
305+
// CHECK-RV32-LIBSTDCXX-SAME: "{{[^"]*}}libclang_rt.builtins.a"
306+
// CHECK-RV32-LIBSTDCXX-SAME: "-lc" "-X" "-o" "a.out"
279307

280308
// RUN: %clang %s -### 2>&1 --target=riscv64-unknown-elf \
281309
// RUN: -nostdlibinc -nobuiltininc \
@@ -397,7 +425,9 @@
397425
// CHECK-PPCEABI-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}include"
398426
// CHECK-PPCEABI-NEXT: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic"
399427
// CHECK-PPCEABI-SAME: "-L[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}lib"
400-
// CHECK-PPCEABI-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "-o" "a.out"
428+
// CHECK-PPCEABI-SAME: "{{[^"]*}}libclang_rt.builtins.a"
429+
// CHECK-PPCEABI-SAME: "-lc"
430+
// CHECK-PPCEABI-SAME: "-o" "a.out"
401431

402432
// RUN: %clang -no-canonical-prefixes %s -### --target=powerpc64-unknown-eabi 2>&1 \
403433
// RUN: | FileCheck --check-prefix=CHECK-PPC64EABI %s
@@ -409,7 +439,9 @@
409439
// CHECK-PPC64EABI-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}include"
410440
// CHECK-PPC64EABI-NEXT: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic"
411441
// CHECK-PPC64EABI-SAME: "-L[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}lib"
412-
// CHECK-PPC64EABI-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "-o" "a.out"
442+
// CHECK-PPC64EABI-SAME: "{{[^"]*}}libclang_rt.builtins.a"
443+
// CHECK-PPC64EABI-SAME: "-lc"
444+
// CHECK-PPC64EABI-SAME: "-o" "a.out"
413445

414446
// RUN: %clang -no-canonical-prefixes %s -### --target=powerpcle-unknown-eabi 2>&1 \
415447
// RUN: | FileCheck --check-prefix=CHECK-PPCLEEABI %s
@@ -421,7 +453,9 @@
421453
// CHECK-PPCLEEABI-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}include"
422454
// CHECK-PPCLEEABI-NEXT: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic"
423455
// CHECK-PPCLEEABI-SAME: "-L[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}lib"
424-
// CHECK-PPCLEEABI-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "-o" "a.out"
456+
// CHECK-PPCLEEABI-SAME: "{{[^"]*}}libclang_rt.builtins.a"
457+
// CHECK-PPCLEEABI-SAME: "-lc"
458+
// CHECK-PPCLEEABI-SAME: "-o" "a.out"
425459

426460
// RUN: %clang -no-canonical-prefixes %s -### --target=powerpc64le-unknown-eabi 2>&1 \
427461
// RUN: | FileCheck --check-prefix=CHECK-PPC64LEEABI %s
@@ -433,7 +467,9 @@
433467
// CHECK-PPC64LEEABI-SAME: "-internal-isystem" "[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}include"
434468
// CHECK-PPC64LEEABI-NEXT: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic"
435469
// CHECK-PPC64LEEABI-SAME: "-L[[INSTALLEDDIR]]{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+[^"]*}}lib"
436-
// CHECK-PPC64LEEABI-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" "-o" "a.out"
470+
// CHECK-PPC64LEEABI-SAME: "{{[^"]*}}libclang_rt.builtins.a"
471+
// CHECK-PPC64LEEABI-SAME: "-lc"
472+
// CHECK-PPC64LEEABI-SAME: "-o" "a.out"
437473

438474
// Check that compiler-rt library without the arch filename suffix will
439475
// be used if present.

0 commit comments

Comments
 (0)