Skip to content

Commit d2ec1a6

Browse files
author
Garvit Gupta
committed
[RISCV] Integrate RISCV target in baremetal toolchain object and deprecate
RISCVToolchain object This patch: - Adds CXXStdlib, runtimelib and unwindlib defaults for riscv target to BareMetal toolchain object. - Add riscv 32 and 64-bit emulation flags to linker job of BareMetal toolchain. - Removes call to RISCVToolChain object from llvm. This PR is last patch in the series of patches of merging RISCVToolchain object into BareMetal toolchain object. RFC: https://discourse.llvm.org/t/merging-riscvtoolchain-and-baremetal-toolchains/75524 Change-Id: I2877ac328f55a7638cc185d6034866cbd2ac4203
1 parent c74186f commit d2ec1a6

File tree

12 files changed

+91
-381
lines changed

12 files changed

+91
-381
lines changed

clang/lib/Driver/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ add_clang_library(clangDriver
7474
ToolChains/OHOS.cpp
7575
ToolChains/OpenBSD.cpp
7676
ToolChains/PS4CPU.cpp
77-
ToolChains/RISCVToolchain.cpp
7877
ToolChains/Solaris.cpp
7978
ToolChains/SPIRV.cpp
8079
ToolChains/SPIRVOpenMP.cpp

clang/lib/Driver/Driver.cpp

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@
4141
#include "ToolChains/PPCFreeBSD.h"
4242
#include "ToolChains/PPCLinux.h"
4343
#include "ToolChains/PS4CPU.h"
44-
#include "ToolChains/RISCVToolchain.h"
4544
#include "ToolChains/SPIRV.h"
4645
#include "ToolChains/SPIRVOpenMP.h"
4746
#include "ToolChains/SYCL.h"
@@ -6886,16 +6885,11 @@ const ToolChain &Driver::getToolChain(const ArgList &Args,
68866885
TC = std::make_unique<toolchains::AVRToolChain>(*this, Target, Args);
68876886
break;
68886887
case llvm::Triple::msp430:
6889-
TC =
6890-
std::make_unique<toolchains::MSP430ToolChain>(*this, Target, Args);
6888+
TC = std::make_unique<toolchains::MSP430ToolChain>(*this, Target, Args);
68916889
break;
68926890
case llvm::Triple::riscv32:
68936891
case llvm::Triple::riscv64:
6894-
if (toolchains::RISCVToolChain::hasGCCToolchain(*this, Args))
6895-
TC =
6896-
std::make_unique<toolchains::RISCVToolChain>(*this, Target, Args);
6897-
else
6898-
TC = std::make_unique<toolchains::BareMetal>(*this, Target, Args);
6892+
TC = std::make_unique<toolchains::BareMetal>(*this, Target, Args);
68996893
break;
69006894
case llvm::Triple::ve:
69016895
TC = std::make_unique<toolchains::VEToolChain>(*this, Target, Args);

clang/lib/Driver/ToolChains/BareMetal.cpp

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,26 @@ BareMetal::OrderedMultilibs BareMetal::getOrderedMultilibs() const {
336336
return llvm::reverse(Default);
337337
}
338338

339+
ToolChain::CXXStdlibType BareMetal::GetDefaultCXXStdlibType() const {
340+
if (getTriple().isRISCV() && GCCInstallation.isValid())
341+
return ToolChain::CST_Libstdcxx;
342+
return ToolChain::CST_Libcxx;
343+
}
344+
345+
ToolChain::RuntimeLibType BareMetal::GetDefaultRuntimeLibType() const {
346+
if (getTriple().isRISCV() && GCCInstallation.isValid())
347+
return ToolChain::RLT_Libgcc;
348+
return ToolChain::RLT_CompilerRT;
349+
}
350+
351+
ToolChain::UnwindLibType
352+
BareMetal::GetUnwindLibType(const llvm::opt::ArgList &Args) const {
353+
if (getTriple().isRISCV())
354+
return ToolChain::UNW_None;
355+
356+
return ToolChain::GetUnwindLibType(Args);
357+
}
358+
339359
void BareMetal::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
340360
ArgStringList &CC1Args) const {
341361
if (DriverArgs.hasArg(options::OPT_nostdinc))
@@ -534,8 +554,14 @@ void baremetal::Linker::ConstructJob(Compilation &C, const JobAction &JA,
534554

535555
CmdArgs.push_back("-Bstatic");
536556

537-
if (TC.getTriple().isRISCV() && Args.hasArg(options::OPT_mno_relax))
538-
CmdArgs.push_back("--no-relax");
557+
if (Triple.isRISCV()) {
558+
if (Args.hasArg(options::OPT_mno_relax))
559+
CmdArgs.push_back("--no-relax");
560+
CmdArgs.push_back("-m");
561+
CmdArgs.push_back(Arch == llvm::Triple::riscv64 ? "elf64lriscv"
562+
: "elf32lriscv");
563+
CmdArgs.push_back("-X");
564+
}
539565

540566
if (Triple.isARM() || Triple.isThumb()) {
541567
bool IsBigEndian = arm::isARMBigEndian(Triple, Args);
@@ -622,9 +648,6 @@ void baremetal::Linker::ConstructJob(Compilation &C, const JobAction &JA,
622648
NeedCRTs)
623649
CmdArgs.push_back(Args.MakeArgString(TC.GetFilePath(CRTEnd)));
624650

625-
if (TC.getTriple().isRISCV())
626-
CmdArgs.push_back("-X");
627-
628651
// The R_ARM_TARGET2 relocation must be treated as R_ARM_REL32 on arm*-*-elf
629652
// and arm*-*-eabi (the default is R_ARM_GOT_PREL, used on arm*-*-linux and
630653
// arm*-*-*bsd).

clang/lib/Driver/ToolChains/BareMetal.h

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,11 @@ class LLVM_LIBRARY_VISIBILITY BareMetal : public Generic_ELF {
5454
return UnwindTableLevel::None;
5555
}
5656

57-
RuntimeLibType GetDefaultRuntimeLibType() const override {
58-
return ToolChain::RLT_CompilerRT;
59-
}
60-
CXXStdlibType GetDefaultCXXStdlibType() const override {
61-
return ToolChain::CST_Libcxx;
62-
}
57+
CXXStdlibType GetDefaultCXXStdlibType() const override;
58+
59+
RuntimeLibType GetDefaultRuntimeLibType() const override;
60+
61+
UnwindLibType GetUnwindLibType(const llvm::opt::ArgList &Args) const override;
6362

6463
void
6564
AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,

clang/lib/Driver/ToolChains/RISCVToolchain.cpp

Lines changed: 0 additions & 232 deletions
This file was deleted.

0 commit comments

Comments
 (0)