Skip to content

Commit 62ffbe0

Browse files
authored
[Driver] Hook up NetBSD/riscv support (#67256)
1 parent d2abe8d commit 62ffbe0

File tree

4 files changed

+112
-3
lines changed

4 files changed

+112
-3
lines changed

clang/lib/Basic/Targets.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -429,23 +429,27 @@ std::unique_ptr<TargetInfo> AllocateTarget(const llvm::Triple &Triple,
429429
return std::make_unique<AMDGPUTargetInfo>(Triple, Opts);
430430

431431
case llvm::Triple::riscv32:
432-
// TODO: add cases for NetBSD, RTEMS once tested.
433432
switch (os) {
434433
case llvm::Triple::FreeBSD:
435434
return std::make_unique<FreeBSDTargetInfo<RISCV32TargetInfo>>(Triple,
436435
Opts);
436+
case llvm::Triple::NetBSD:
437+
return std::make_unique<NetBSDTargetInfo<RISCV32TargetInfo>>(Triple,
438+
Opts);
437439
case llvm::Triple::Linux:
438440
return std::make_unique<LinuxTargetInfo<RISCV32TargetInfo>>(Triple, Opts);
439441
default:
440442
return std::make_unique<RISCV32TargetInfo>(Triple, Opts);
441443
}
442444

443445
case llvm::Triple::riscv64:
444-
// TODO: add cases for NetBSD, RTEMS once tested.
445446
switch (os) {
446447
case llvm::Triple::FreeBSD:
447448
return std::make_unique<FreeBSDTargetInfo<RISCV64TargetInfo>>(Triple,
448449
Opts);
450+
case llvm::Triple::NetBSD:
451+
return std::make_unique<NetBSDTargetInfo<RISCV64TargetInfo>>(Triple,
452+
Opts);
449453
case llvm::Triple::OpenBSD:
450454
return std::make_unique<OpenBSDTargetInfo<RISCV64TargetInfo>>(Triple,
451455
Opts);

clang/lib/Driver/ToolChains/NetBSD.cpp

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,16 @@ void netbsd::Linker::ConstructJob(Compilation &C, const JobAction &JA,
216216
CmdArgs.push_back("elf64ppc");
217217
break;
218218

219+
case llvm::Triple::riscv32:
220+
CmdArgs.push_back("-m");
221+
CmdArgs.push_back("elf32lriscv");
222+
break;
223+
224+
case llvm::Triple::riscv64:
225+
CmdArgs.push_back("-m");
226+
CmdArgs.push_back("elf64lriscv");
227+
break;
228+
219229
case llvm::Triple::sparc:
220230
CmdArgs.push_back("-m");
221231
CmdArgs.push_back("elf32_sparc");
@@ -230,6 +240,9 @@ void netbsd::Linker::ConstructJob(Compilation &C, const JobAction &JA,
230240
break;
231241
}
232242

243+
if (Triple.isRISCV())
244+
CmdArgs.push_back("-X");
245+
233246
if (Output.isFilename()) {
234247
CmdArgs.push_back("-o");
235248
CmdArgs.push_back(Output.getFilename());
@@ -282,6 +295,8 @@ void netbsd::Linker::ConstructJob(Compilation &C, const JobAction &JA,
282295
case llvm::Triple::ppc:
283296
case llvm::Triple::ppc64:
284297
case llvm::Triple::ppc64le:
298+
case llvm::Triple::riscv32:
299+
case llvm::Triple::riscv64:
285300
case llvm::Triple::sparc:
286301
case llvm::Triple::sparcv9:
287302
case llvm::Triple::x86:
@@ -418,6 +433,8 @@ ToolChain::CXXStdlibType NetBSD::GetDefaultCXXStdlibType() const {
418433
case llvm::Triple::ppc:
419434
case llvm::Triple::ppc64:
420435
case llvm::Triple::ppc64le:
436+
case llvm::Triple::riscv32:
437+
case llvm::Triple::riscv64:
421438
case llvm::Triple::sparc:
422439
case llvm::Triple::sparcv9:
423440
case llvm::Triple::x86:
@@ -539,7 +556,9 @@ void NetBSD::addClangTargetOptions(const ArgList &DriverArgs,
539556
getTriple().getArch() == llvm::Triple::aarch64 ||
540557
getTriple().getArch() == llvm::Triple::aarch64_be ||
541558
getTriple().getArch() == llvm::Triple::arm ||
542-
getTriple().getArch() == llvm::Triple::armeb;
559+
getTriple().getArch() == llvm::Triple::armeb ||
560+
getTriple().getArch() == llvm::Triple::riscv32 ||
561+
getTriple().getArch() == llvm::Triple::riscv64;
543562

544563
if (!DriverArgs.hasFlag(options::OPT_fuse_init_array,
545564
options::OPT_fno_use_init_array, UseInitArrayDefault))

clang/test/Driver/netbsd.c

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,12 @@
5959
// RUN: %clang --target=arm-unknown-netbsd7.0.0-eabi \
6060
// RUN: --sysroot=%S/Inputs/basic_netbsd_tree -### %s 2>&1 \
6161
// RUN: | FileCheck -check-prefix=ARM-7 %s
62+
// RUN: %clang --target=riscv32-unknown-netbsd \
63+
// RUN: -no-integrated-as --sysroot=%S/Inputs/basic_netbsd_tree -### %s 2>&1 \
64+
// RUN: | FileCheck -check-prefix=RISCV32 %s
65+
// RUN: %clang --target=riscv64-unknown-netbsd \
66+
// RUN: -no-integrated-as --sysroot=%S/Inputs/basic_netbsd_tree -### %s 2>&1 \
67+
// RUN: | FileCheck -check-prefix=RISCV64 %s
6268
// RUN: %clang --target=sparc-unknown-netbsd \
6369
// RUN: -no-integrated-as --sysroot=%S/Inputs/basic_netbsd_tree -### %s 2>&1 \
6470
// RUN: | FileCheck -check-prefix=SPARC %s
@@ -99,6 +105,12 @@
99105
// RUN: %clang --target=arm-unknown-netbsd7.0.0-eabi -static \
100106
// RUN: --sysroot=%S/Inputs/basic_netbsd_tree -### %s 2>&1 \
101107
// RUN: | FileCheck -check-prefix=S-ARM-7 %s
108+
// RUN: %clang --target=riscv32-unknown-netbsd7.0.0 -static \
109+
// RUN: --sysroot=%S/Inputs/basic_netbsd_tree -### %s 2>&1 \
110+
// RUN: | FileCheck -check-prefix=S-RISCV32-7 %s
111+
// RUN: %clang --target=riscv64-unknown-netbsd7.0.0 -static \
112+
// RUN: --sysroot=%S/Inputs/basic_netbsd_tree -### %s 2>&1 \
113+
// RUN: | FileCheck -check-prefix=S-RISCV64-7 %s
102114
// RUN: %clang --target=sparc-unknown-netbsd7.0.0 -static \
103115
// RUN: --sysroot=%S/Inputs/basic_netbsd_tree -### %s 2>&1 \
104116
// RUN: | FileCheck -check-prefix=S-SPARC-7 %s
@@ -264,6 +276,22 @@
264276
// ARM-7: "{{.*}}/usr/lib{{/|\\\\}}crtbegin.o" "{{.*}}.o" "-lc"
265277
// ARM-7: "{{.*}}/usr/lib{{/|\\\\}}crtend.o" "{{.*}}/usr/lib{{/|\\\\}}crtn.o"
266278

279+
// RISCV32: "-cc1" "-triple" "riscv32-unknown-netbsd"
280+
// RISCV32-NOT: "-fno-use-init-array"
281+
// RISCV32: ld{{.*}}" "--eh-frame-hdr" "-dynamic-linker" "/libexec/ld.elf_so"
282+
// RISCV32-SAME: "-m" "elf32lriscv" "-X"
283+
// RISCV32-SAME: "-o" "a.out" "{{.*}}/usr/lib{{/|\\\\}}crt0.o" "{{.*}}/usr/lib{{/|\\\\}}crti.o"
284+
// RISCV32-SAME: "{{.*}}/usr/lib{{/|\\\\}}crtbegin.o" "{{.*}}.o" "-lc"
285+
// RISCV32-SAME: "{{.*}}/usr/lib{{/|\\\\}}crtend.o" "{{.*}}/usr/lib{{/|\\\\}}crtn.o"
286+
287+
// RISCV64: "-cc1" "-triple" "riscv64-unknown-netbsd"
288+
// RISCV64-NOT: "-fno-use-init-array"
289+
// RISCV64: ld{{.*}}" "--eh-frame-hdr" "-dynamic-linker" "/libexec/ld.elf_so"
290+
// RISCV64-SAME: "-m" "elf64lriscv" "-X"
291+
// RISCV64-SAME: "-o" "a.out" "{{.*}}/usr/lib{{/|\\\\}}crt0.o" "{{.*}}/usr/lib{{/|\\\\}}crti.o"
292+
// RISCV64-SAME: "{{.*}}/usr/lib{{/|\\\\}}crtbegin.o" "{{.*}}.o" "-lc"
293+
// RISCV64-SAME: "{{.*}}/usr/lib{{/|\\\\}}crtend.o" "{{.*}}/usr/lib{{/|\\\\}}crtn.o"
294+
267295
// SPARC: "-cc1" "-triple" "sparc-unknown-netbsd"
268296
// SPARC-NOT: "-fno-use-init-array"
269297
// SPARC: as{{.*}}" "-32" "-Av8" "-o"
@@ -361,6 +389,20 @@
361389
// S-ARM-7: "{{.*}}/usr/lib{{/|\\\\}}crtbegin.o" "{{.*}}.o" "-lc"
362390
// S-ARM-7: "{{.*}}/usr/lib{{/|\\\\}}crtend.o" "{{.*}}/usr/lib{{/|\\\\}}crtn.o"
363391

392+
// S-RISCV32-7: "-cc1" "-triple" "riscv32-unknown-netbsd7.0.0"
393+
// S-RISCV32-7: ld{{.*}}" "--eh-frame-hdr" "-Bstatic"
394+
// S-RISCV32-7-SAME: "-m" "elf32lriscv" "-X"
395+
// S-RISCV32-7-SAME: "-o" "a.out" "{{.*}}/usr/lib{{/|\\\\}}crt0.o" "{{.*}}/usr/lib{{/|\\\\}}crti.o"
396+
// S-RISCV32-7-SAME: "{{.*}}/usr/lib{{/|\\\\}}crtbegin.o" "{{.*}}.o" "-lc"
397+
// S-RISCV32-7-SAME: "{{.*}}/usr/lib{{/|\\\\}}crtend.o" "{{.*}}/usr/lib{{/|\\\\}}crtn.o"
398+
399+
// S-RISCV64-7: "-cc1" "-triple" "riscv64-unknown-netbsd7.0.0"
400+
// S-RISCV64-7: ld{{.*}}" "--eh-frame-hdr" "-Bstatic"
401+
// S-RISCV64-7-SAME: "-m" "elf64lriscv" "-X"
402+
// S-RISCV64-7-SAME: "-o" "a.out" "{{.*}}/usr/lib{{/|\\\\}}crt0.o" "{{.*}}/usr/lib{{/|\\\\}}crti.o"
403+
// S-RISCV64-7-SAME: "{{.*}}/usr/lib{{/|\\\\}}crtbegin.o" "{{.*}}.o" "-lc"
404+
// S-RISCV64-7-SAME: "{{.*}}/usr/lib{{/|\\\\}}crtend.o" "{{.*}}/usr/lib{{/|\\\\}}crtn.o"
405+
364406
// S-SPARC-7: "-cc1" "-triple" "sparc-unknown-netbsd7.0.0"
365407
// S-SPARC-7: "-fno-use-init-array"
366408
// S-SPARC-7: ld{{.*}}" "--eh-frame-hdr" "-Bstatic"

clang/test/Driver/netbsd.cpp

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@
1919
// RUN: %clangxx --target=aarch64_be-unknown-netbsd7.0.0 \
2020
// RUN: -stdlib=platform --sysroot=%S/Inputs/basic_netbsd_tree -### %s 2>&1 \
2121
// RUN: | FileCheck -check-prefix=AARCH64_BE-7 %s
22+
// RUN: %clangxx --target=riscv32-unknown-netbsd \
23+
// RUN: -stdlib=platform --sysroot=%S/Inputs/basic_netbsd_tree -### %s 2>&1 \
24+
// RUN: | FileCheck -check-prefix=RISCV32 %s
25+
// RUN: %clangxx --target=riscv64-unknown-netbsd \
26+
// RUN: -stdlib=platform --sysroot=%S/Inputs/basic_netbsd_tree -### %s 2>&1 \
27+
// RUN: | FileCheck -check-prefix=RISCV64 %s
2228
// RUN: %clangxx --target=sparc-unknown-netbsd \
2329
// RUN: -stdlib=platform --sysroot=%S/Inputs/basic_netbsd_tree -### %s 2>&1 \
2430
// RUN: | FileCheck -check-prefix=SPARC %s
@@ -59,6 +65,12 @@
5965
// RUN: %clangxx --target=aarch64_be-unknown-netbsd7.0.0 -static \
6066
// RUN: -stdlib=platform --sysroot=%S/Inputs/basic_netbsd_tree -### %s 2>&1 \
6167
// RUN: | FileCheck -check-prefix=S-AARCH64_BE-7 %s
68+
// RUN: %clangxx --target=riscv32-unknown-netbsd -static \
69+
// RUN: -stdlib=platform --sysroot=%S/Inputs/basic_netbsd_tree -### %s 2>&1 \
70+
// RUN: | FileCheck -check-prefix=S-RISCV32 %s
71+
// RUN: %clangxx --target=riscv64-unknown-netbsd -static \
72+
// RUN: -stdlib=platform --sysroot=%S/Inputs/basic_netbsd_tree -### %s 2>&1 \
73+
// RUN: | FileCheck -check-prefix=S-RISCV64 %s
6274
// RUN: %clangxx --target=sparc-unknown-netbsd -static \
6375
// RUN: -stdlib=platform --sysroot=%S/Inputs/basic_netbsd_tree -### %s 2>&1 \
6476
// RUN: | FileCheck -check-prefix=S-SPARC %s
@@ -124,6 +136,22 @@
124136
// AARCH64_BE-7: "-lm" "-lc"
125137
// AARCH64_BE-7: "{{.*}}/usr/lib{{/|\\\\}}crtend.o" "{{.*}}/usr/lib{{/|\\\\}}crtn.o"
126138

139+
// RISCV32: "-cc1" "-triple" "riscv32-unknown-netbsd"
140+
// RISCV32: ld{{.*}}" "--eh-frame-hdr" "-dynamic-linker" "/libexec/ld.elf_so"
141+
// RISCV32-SAME: "-X"
142+
// RISCV32-SAME: "-o" "a.out" "{{.*}}/usr/lib{{/|\\\\}}crt0.o" "{{.*}}/usr/lib{{/|\\\\}}crti.o"
143+
// RISCV32-SAME: "{{.*}}/usr/lib{{/|\\\\}}crtbegin.o" "{{.*}}.o" "-lc++"
144+
// RISCV32-SAME: "-lm" "-lc"
145+
// RISCV32-SAME: "{{.*}}/usr/lib{{/|\\\\}}crtend.o" "{{.*}}/usr/lib{{/|\\\\}}crtn.o"
146+
147+
// RISCV64: "-cc1" "-triple" "riscv64-unknown-netbsd"
148+
// RISCV64: ld{{.*}}" "--eh-frame-hdr" "-dynamic-linker" "/libexec/ld.elf_so"
149+
// RISCV64-SAME: "-X"
150+
// RISCV64-SAME: "-o" "a.out" "{{.*}}/usr/lib{{/|\\\\}}crt0.o" "{{.*}}/usr/lib{{/|\\\\}}crti.o"
151+
// RISCV64-SAME: "{{.*}}/usr/lib{{/|\\\\}}crtbegin.o" "{{.*}}.o" "-lc++"
152+
// RISCV64-SAME: "-lm" "-lc"
153+
// RISCV64-SAME: "{{.*}}/usr/lib{{/|\\\\}}crtend.o" "{{.*}}/usr/lib{{/|\\\\}}crtn.o"
154+
127155
// SPARC: "-cc1" "-triple" "sparc-unknown-netbsd"
128156
// SPARC: ld{{.*}}" "--eh-frame-hdr" "-dynamic-linker" "/libexec/ld.elf_so"
129157
// SPARC: "-o" "a.out" "{{.*}}/usr/lib{{/|\\\\}}crt0.o"
@@ -214,6 +242,22 @@
214242
// S-AARCH64_BE-7: "-lm" "-lc"
215243
// S-AARCH64_BE-7: "{{.*}}/usr/lib{{/|\\\\}}crtend.o" "{{.*}}/usr/lib{{/|\\\\}}crtn.o"
216244

245+
// S-RISCV32: "-cc1" "-triple" "riscv32-unknown-netbsd"
246+
// S-RISCV32: ld{{.*}}" "--eh-frame-hdr" "-Bstatic"
247+
// S-RISCV32-SAME: "-X"
248+
// S-RISCV32-SAME: "-o" "a.out" "{{.*}}/usr/lib{{/|\\\\}}crt0.o" "{{.*}}/usr/lib{{/|\\\\}}crti.o"
249+
// S-RISCV32-SAME: "{{.*}}/usr/lib{{/|\\\\}}crtbegin.o" "{{.*}}.o" "-lc++"
250+
// S-RISCV32-SAME: "-lm" "-lc"
251+
// S-RISCV32-SAME: "{{.*}}/usr/lib{{/|\\\\}}crtend.o" "{{.*}}/usr/lib{{/|\\\\}}crtn.o"
252+
253+
// S-RISCV64: "-cc1" "-triple" "riscv64-unknown-netbsd"
254+
// S-RISCV64: ld{{.*}}" "--eh-frame-hdr" "-Bstatic"
255+
// S-RISCV64-SAME: "-X"
256+
// S-RISCV64-SAME: "-o" "a.out" "{{.*}}/usr/lib{{/|\\\\}}crt0.o" "{{.*}}/usr/lib{{/|\\\\}}crti.o"
257+
// S-RISCV64-SAME: "{{.*}}/usr/lib{{/|\\\\}}crtbegin.o" "{{.*}}.o" "-lc++"
258+
// S-RISCV64-SAME: "-lm" "-lc"
259+
// S-RISCV64-SAME: "{{.*}}/usr/lib{{/|\\\\}}crtend.o" "{{.*}}/usr/lib{{/|\\\\}}crtn.o"
260+
217261
// S-SPARC: "-cc1" "-triple" "sparc-unknown-netbsd"
218262
// S-SPARC: ld{{.*}}" "--eh-frame-hdr" "-Bstatic"
219263
// S-SPARC: "-o" "a.out" "{{.*}}/usr/lib{{/|\\\\}}crt0.o"

0 commit comments

Comments
 (0)