diff options
author | Sam Elliott <selliott@lowrisc.org> | 2019-08-01 13:14:30 +0000 |
---|---|---|
committer | Sam Elliott <selliott@lowrisc.org> | 2019-08-01 13:14:30 +0000 |
commit | eead42b6e77e95eb8dc6e80559f4868c81f0bd8f (patch) | |
tree | a20f0f7ad2547ffd6ddd634b24c3d91593867e6c | |
parent | 923a4782f130f6a36cabcda2b0a1b08c4237aa47 (diff) | |
download | clang-eead42b6e77e95eb8dc6e80559f4868c81f0bd8f.tar.gz |
[RISCV] Add FreeBSD targets
Reviewers: asb
Reviewed By: asb
Subscribers: simoncook, s.egerton, lenary, psnobl, benna, mhorne, emaste, kito-cheng, shiva0217, rogfer01, rkruppe, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D57795
Patch by James Clarke (jrtc27)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@367557 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Basic/Targets.cpp | 23 | ||||
-rw-r--r-- | lib/Driver/ToolChains/FreeBSD.cpp | 8 | ||||
-rw-r--r-- | test/Driver/freebsd.c | 9 |
3 files changed, 34 insertions, 6 deletions
diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index a08e399e72..63a64ed293 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -363,15 +363,26 @@ TargetInfo *AllocateTarget(const llvm::Triple &Triple, return new AMDGPUTargetInfo(Triple, Opts); case llvm::Triple::riscv32: - // TODO: add cases for FreeBSD, NetBSD, RTEMS once tested. - if (os == llvm::Triple::Linux) + // TODO: add cases for NetBSD, RTEMS once tested. + switch (os) { + case llvm::Triple::FreeBSD: + return new FreeBSDTargetInfo<RISCV32TargetInfo>(Triple, Opts); + case llvm::Triple::Linux: return new LinuxTargetInfo<RISCV32TargetInfo>(Triple, Opts); - return new RISCV32TargetInfo(Triple, Opts); + default: + return new RISCV32TargetInfo(Triple, Opts); + } + case llvm::Triple::riscv64: - // TODO: add cases for FreeBSD, NetBSD, RTEMS once tested. - if (os == llvm::Triple::Linux) + // TODO: add cases for NetBSD, RTEMS once tested. + switch (os) { + case llvm::Triple::FreeBSD: + return new FreeBSDTargetInfo<RISCV64TargetInfo>(Triple, Opts); + case llvm::Triple::Linux: return new LinuxTargetInfo<RISCV64TargetInfo>(Triple, Opts); - return new RISCV64TargetInfo(Triple, Opts); + default: + return new RISCV64TargetInfo(Triple, Opts); + } case llvm::Triple::sparc: switch (os) { diff --git a/lib/Driver/ToolChains/FreeBSD.cpp b/lib/Driver/ToolChains/FreeBSD.cpp index 3a0bab8d07..e5542738d4 100644 --- a/lib/Driver/ToolChains/FreeBSD.cpp +++ b/lib/Driver/ToolChains/FreeBSD.cpp @@ -197,6 +197,14 @@ void freebsd::Linker::ConstructJob(Compilation &C, const JobAction &JA, else CmdArgs.push_back("elf64ltsmip_fbsd"); break; + case llvm::Triple::riscv32: + CmdArgs.push_back("-m"); + CmdArgs.push_back("elf32lriscv"); + break; + case llvm::Triple::riscv64: + CmdArgs.push_back("-m"); + CmdArgs.push_back("elf64lriscv"); + break; default: break; } diff --git a/test/Driver/freebsd.c b/test/Driver/freebsd.c index c772101233..4a0a6bf5f3 100644 --- a/test/Driver/freebsd.c +++ b/test/Driver/freebsd.c @@ -63,6 +63,15 @@ // RUN: | FileCheck --check-prefix=CHECK-MIPSN32EL-LD %s // CHECK-MIPSN32EL-LD: ld{{.*}}" {{.*}} "-m" "elf32ltsmipn32_fbsd" // +// Check that RISC-V passes the correct linker emulation. +// +// RUN: %clang -target riscv32-freebsd %s -### %s 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-RV32I-LD %s +// CHECK-RV32I-LD: ld{{.*}}" {{.*}} "-m" "elf32lriscv" +// RUN: %clang -target riscv64-freebsd %s -### %s 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-RV64I-LD %s +// CHECK-RV64I-LD: ld{{.*}}" {{.*}} "-m" "elf64lriscv" +// // Check that the new linker flags are passed to FreeBSD // RUN: %clang -no-canonical-prefixes -target x86_64-pc-freebsd8 -m32 %s \ // RUN: --sysroot=%S/Inputs/multiarch_freebsd64_tree -### 2>&1 \ |