https://github.com/brad0 updated https://github.com/llvm/llvm-project/pull/67256
>From 949ffebe8d74fd5ca27551934bd7a565022ebaa7 Mon Sep 17 00:00:00 2001 From: Brad Smith <b...@comstyle.com> Date: Sun, 24 Sep 2023 02:29:27 -0400 Subject: [PATCH] [Driver] Hook up NetBSD/riscv64 support --- clang/lib/Basic/Targets.cpp | 5 +++-- clang/lib/Driver/ToolChains/NetBSD.cpp | 13 ++++++++++++- clang/test/Driver/netbsd.c | 21 +++++++++++++++++++++ clang/test/Driver/netbsd.cpp | 22 ++++++++++++++++++++++ 4 files changed, 58 insertions(+), 3 deletions(-) diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp index 69576dbc458d9a1..bd37caf8edd4131 100644 --- a/clang/lib/Basic/Targets.cpp +++ b/clang/lib/Basic/Targets.cpp @@ -429,7 +429,6 @@ std::unique_ptr<TargetInfo> AllocateTarget(const llvm::Triple &Triple, return std::make_unique<AMDGPUTargetInfo>(Triple, Opts); case llvm::Triple::riscv32: - // TODO: add cases for NetBSD, RTEMS once tested. switch (os) { case llvm::Triple::FreeBSD: return std::make_unique<FreeBSDTargetInfo<RISCV32TargetInfo>>(Triple, @@ -441,11 +440,13 @@ std::unique_ptr<TargetInfo> AllocateTarget(const llvm::Triple &Triple, } case llvm::Triple::riscv64: - // TODO: add cases for NetBSD, RTEMS once tested. switch (os) { case llvm::Triple::FreeBSD: return std::make_unique<FreeBSDTargetInfo<RISCV64TargetInfo>>(Triple, Opts); + case llvm::Triple::NetBSD: + return std::make_unique<NetBSDTargetInfo<RISCV64TargetInfo>>(Triple, + Opts); case llvm::Triple::OpenBSD: return std::make_unique<OpenBSDTargetInfo<RISCV64TargetInfo>>(Triple, Opts); diff --git a/clang/lib/Driver/ToolChains/NetBSD.cpp b/clang/lib/Driver/ToolChains/NetBSD.cpp index 88be6ea0d5e7883..50aa73d1e503365 100644 --- a/clang/lib/Driver/ToolChains/NetBSD.cpp +++ b/clang/lib/Driver/ToolChains/NetBSD.cpp @@ -216,6 +216,11 @@ void netbsd::Linker::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("elf64ppc"); break; + case llvm::Triple::riscv64: + CmdArgs.push_back("-m"); + CmdArgs.push_back("elf64lriscv"); + break; + case llvm::Triple::sparc: CmdArgs.push_back("-m"); CmdArgs.push_back("elf32_sparc"); @@ -230,6 +235,9 @@ void netbsd::Linker::ConstructJob(Compilation &C, const JobAction &JA, break; } + if (ToolChain.getArch() == llvm::Triple::riscv64) + CmdArgs.push_back("-X"); + if (Output.isFilename()) { CmdArgs.push_back("-o"); CmdArgs.push_back(Output.getFilename()); @@ -282,6 +290,7 @@ void netbsd::Linker::ConstructJob(Compilation &C, const JobAction &JA, case llvm::Triple::ppc: case llvm::Triple::ppc64: case llvm::Triple::ppc64le: + case llvm::Triple::riscv64: case llvm::Triple::sparc: case llvm::Triple::sparcv9: case llvm::Triple::x86: @@ -418,6 +427,7 @@ ToolChain::CXXStdlibType NetBSD::GetDefaultCXXStdlibType() const { case llvm::Triple::ppc: case llvm::Triple::ppc64: case llvm::Triple::ppc64le: + case llvm::Triple::riscv64: case llvm::Triple::sparc: case llvm::Triple::sparcv9: case llvm::Triple::x86: @@ -539,7 +549,8 @@ void NetBSD::addClangTargetOptions(const ArgList &DriverArgs, getTriple().getArch() == llvm::Triple::aarch64 || getTriple().getArch() == llvm::Triple::aarch64_be || getTriple().getArch() == llvm::Triple::arm || - getTriple().getArch() == llvm::Triple::armeb; + getTriple().getArch() == llvm::Triple::armeb || + getTriple().getArch() == llvm::Triple::riscv64; if (!DriverArgs.hasFlag(options::OPT_fuse_init_array, options::OPT_fno_use_init_array, UseInitArrayDefault)) diff --git a/clang/test/Driver/netbsd.c b/clang/test/Driver/netbsd.c index 67c048c6e91515f..ca895a55ef7e8cb 100644 --- a/clang/test/Driver/netbsd.c +++ b/clang/test/Driver/netbsd.c @@ -59,6 +59,9 @@ // RUN: %clang --target=arm-unknown-netbsd7.0.0-eabi \ // RUN: --sysroot=%S/Inputs/basic_netbsd_tree -### %s 2>&1 \ // RUN: | FileCheck -check-prefix=ARM-7 %s +// RUN: %clang --target=riscv64-unknown-netbsd \ +// RUN: -no-integrated-as --sysroot=%S/Inputs/basic_netbsd_tree -### %s 2>&1 \ +// RUN: | FileCheck -check-prefix=RISCV64 %s // RUN: %clang --target=sparc-unknown-netbsd \ // RUN: -no-integrated-as --sysroot=%S/Inputs/basic_netbsd_tree -### %s 2>&1 \ // RUN: | FileCheck -check-prefix=SPARC %s @@ -99,6 +102,9 @@ // RUN: %clang --target=arm-unknown-netbsd7.0.0-eabi -static \ // RUN: --sysroot=%S/Inputs/basic_netbsd_tree -### %s 2>&1 \ // RUN: | FileCheck -check-prefix=S-ARM-7 %s +// RUN: %clang --target=riscv64-unknown-netbsd7.0.0 -static \ +// RUN: --sysroot=%S/Inputs/basic_netbsd_tree -### %s 2>&1 \ +// RUN: | FileCheck -check-prefix=S-RISCV64-7 %s // RUN: %clang --target=sparc-unknown-netbsd7.0.0 -static \ // RUN: --sysroot=%S/Inputs/basic_netbsd_tree -### %s 2>&1 \ // RUN: | FileCheck -check-prefix=S-SPARC-7 %s @@ -264,6 +270,14 @@ // ARM-7: "{{.*}}/usr/lib{{/|\\\\}}crtbegin.o" "{{.*}}.o" "-lc" // ARM-7: "{{.*}}/usr/lib{{/|\\\\}}crtend.o" "{{.*}}/usr/lib{{/|\\\\}}crtn.o" +// RISCV64: "-cc1" "-triple" "riscv64-unknown-netbsd" +// RISCV64-NOT: "-fno-use-init-array" +// RISCV64: ld{{.*}}" "--eh-frame-hdr" "-dynamic-linker" "/libexec/ld.elf_so" +// RISCV64-SAME: "-m" "elf64lriscv" "-X" +// RISCV64-SAME: "-o" "a.out" "{{.*}}/usr/lib{{/|\\\\}}crt0.o" "{{.*}}/usr/lib{{/|\\\\}}crti.o" +// RSICV64-SAME: "{{.*}}/usr/lib{{/|\\\\}}crtbegin.o" "{{.*}}.o" "-lc" +// RSICV64-SAME: "{{.*}}/usr/lib{{/|\\\\}}crtend.o" "{{.*}}/usr/lib{{/|\\\\}}crtn.o" + // SPARC: "-cc1" "-triple" "sparc-unknown-netbsd" // SPARC-NOT: "-fno-use-init-array" // SPARC: as{{.*}}" "-32" "-Av8" "-o" @@ -361,6 +375,13 @@ // S-ARM-7: "{{.*}}/usr/lib{{/|\\\\}}crtbegin.o" "{{.*}}.o" "-lc" // S-ARM-7: "{{.*}}/usr/lib{{/|\\\\}}crtend.o" "{{.*}}/usr/lib{{/|\\\\}}crtn.o" +// S-RISCV64-7: "-cc1" "-triple" "riscv64-unknown-netbsd7.0.0" +// S-RISCV64-7: ld{{.*}}" "--eh-frame-hdr" "-Bstatic" +// S-RISCV64-7-SAME: "-m" "elf64lriscv" "-X" +// S-RISCV64-7-SAME: "-o" "a.out" "{{.*}}/usr/lib{{/|\\\\}}crt0.o" "{{.*}}/usr/lib{{/|\\\\}}crti.o" +// S-RISCV64-7-SAME: "{{.*}}/usr/lib{{/|\\\\}}crtbegin.o" "{{.*}}.o" "-lc" +// S-RISCV64-7-SAME: "{{.*}}/usr/lib{{/|\\\\}}crtend.o" "{{.*}}/usr/lib{{/|\\\\}}crtn.o" + // S-SPARC-7: "-cc1" "-triple" "sparc-unknown-netbsd7.0.0" // S-SPARC-7: "-fno-use-init-array" // S-SPARC-7: ld{{.*}}" "--eh-frame-hdr" "-Bstatic" diff --git a/clang/test/Driver/netbsd.cpp b/clang/test/Driver/netbsd.cpp index ab24209b4577aa2..6198b1247b46f0f 100644 --- a/clang/test/Driver/netbsd.cpp +++ b/clang/test/Driver/netbsd.cpp @@ -19,6 +19,9 @@ // RUN: %clangxx --target=aarch64_be-unknown-netbsd7.0.0 \ // RUN: -stdlib=platform --sysroot=%S/Inputs/basic_netbsd_tree -### %s 2>&1 \ // RUN: | FileCheck -check-prefix=AARCH64_BE-7 %s +// RUN: %clangxx --target=riscv64-unknown-netbsd \ +// RUN: -stdlib=platform --sysroot=%S/Inputs/basic_netbsd_tree -### %s 2>&1 \ +// RUN: | FileCheck -check-prefix=RISCV64 %s // RUN: %clangxx --target=sparc-unknown-netbsd \ // RUN: -stdlib=platform --sysroot=%S/Inputs/basic_netbsd_tree -### %s 2>&1 \ // RUN: | FileCheck -check-prefix=SPARC %s @@ -59,6 +62,9 @@ // RUN: %clangxx --target=aarch64_be-unknown-netbsd7.0.0 -static \ // RUN: -stdlib=platform --sysroot=%S/Inputs/basic_netbsd_tree -### %s 2>&1 \ // RUN: | FileCheck -check-prefix=S-AARCH64_BE-7 %s +// RUN: %clangxx --target=riscv64-unknown-netbsd -static \ +// RUN: -stdlib=platform --sysroot=%S/Inputs/basic_netbsd_tree -### %s 2>&1 \ +// RUN: | FileCheck -check-prefix=S-RISCV64 %s // RUN: %clangxx --target=sparc-unknown-netbsd -static \ // RUN: -stdlib=platform --sysroot=%S/Inputs/basic_netbsd_tree -### %s 2>&1 \ // RUN: | FileCheck -check-prefix=S-SPARC %s @@ -124,6 +130,14 @@ // AARCH64_BE-7: "-lm" "-lc" // AARCH64_BE-7: "{{.*}}/usr/lib{{/|\\\\}}crtend.o" "{{.*}}/usr/lib{{/|\\\\}}crtn.o" +// RISCV64: "-cc1" "-triple" "riscv64-unknown-netbsd" +// RISCV64: ld{{.*}}" "--eh-frame-hdr" "-dynamic-linker" "/libexec/ld.elf_so" +// RISCV64-SAME: "-X" +// RISCV64-SAME: "-o" "a.out" "{{.*}}/usr/lib{{/|\\\\}}crt0.o" "{{.*}}/usr/lib{{/|\\\\}}crti.o" +// RISCV64-SAME: "{{.*}}/usr/lib{{/|\\\\}}crtbegin.o" "{{.*}}.o" "-lc++" +// RISCV64-SAME: "-lm" "-lc" +// RISCV64-SAME: "{{.*}}/usr/lib{{/|\\\\}}crtend.o" "{{.*}}/usr/lib{{/|\\\\}}crtn.o" + // SPARC: "-cc1" "-triple" "sparc-unknown-netbsd" // SPARC: ld{{.*}}" "--eh-frame-hdr" "-dynamic-linker" "/libexec/ld.elf_so" // SPARC: "-o" "a.out" "{{.*}}/usr/lib{{/|\\\\}}crt0.o" @@ -214,6 +228,14 @@ // S-AARCH64_BE-7: "-lm" "-lc" // S-AARCH64_BE-7: "{{.*}}/usr/lib{{/|\\\\}}crtend.o" "{{.*}}/usr/lib{{/|\\\\}}crtn.o" +// S-RISCV64: "-cc1" "-triple" "riscv64-unknown-netbsd" +// S-RISCV64: ld{{.*}}" "--eh-frame-hdr" "-Bstatic" +// S-RISCV64-SAME: "-X" +// S-RISCV64-SAME: "-o" "a.out" "{{.*}}/usr/lib{{/|\\\\}}crt0.o" "{{.*}}/usr/lib{{/|\\\\}}crti.o" +// S-RISCV64-SAME: "{{.*}}/usr/lib{{/|\\\\}}crtbegin.o" "{{.*}}.o" "-lc++" +// S-RISCV64-SAME: "-lm" "-lc" +// S-RISCV64-SAME: "{{.*}}/usr/lib{{/|\\\\}}crtend.o" "{{.*}}/usr/lib{{/|\\\\}}crtn.o" + // S-SPARC: "-cc1" "-triple" "sparc-unknown-netbsd" // S-SPARC: ld{{.*}}" "--eh-frame-hdr" "-Bstatic" // S-SPARC: "-o" "a.out" "{{.*}}/usr/lib{{/|\\\\}}crt0.o" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits