xref: /freebsd/contrib/llvm-project/clang/lib/Driver/ToolChains/RISCVToolchain.h (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
106c3fb27SDimitry Andric //===--- RISCVToolchain.h - RISC-V ToolChain Implementations ----*- C++ -*-===//
20b57cec5SDimitry Andric //
30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric //
70b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric 
90b57cec5SDimitry Andric #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_RISCVTOOLCHAIN_H
100b57cec5SDimitry Andric #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_RISCVTOOLCHAIN_H
110b57cec5SDimitry Andric 
120b57cec5SDimitry Andric #include "Gnu.h"
130b57cec5SDimitry Andric #include "clang/Driver/ToolChain.h"
140b57cec5SDimitry Andric 
150b57cec5SDimitry Andric namespace clang {
160b57cec5SDimitry Andric namespace driver {
170b57cec5SDimitry Andric namespace toolchains {
180b57cec5SDimitry Andric 
190b57cec5SDimitry Andric class LLVM_LIBRARY_VISIBILITY RISCVToolChain : public Generic_ELF {
200b57cec5SDimitry Andric public:
210b57cec5SDimitry Andric   RISCVToolChain(const Driver &D, const llvm::Triple &Triple,
220b57cec5SDimitry Andric                  const llvm::opt::ArgList &Args);
230b57cec5SDimitry Andric 
24e8d8bef9SDimitry Andric   static bool hasGCCToolchain(const Driver &D, const llvm::opt::ArgList &Args);
250b57cec5SDimitry Andric   void addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
260b57cec5SDimitry Andric                              llvm::opt::ArgStringList &CC1Args,
270b57cec5SDimitry Andric                              Action::OffloadKind) const override;
28480093f4SDimitry Andric   RuntimeLibType GetDefaultRuntimeLibType() const override;
29480093f4SDimitry Andric   UnwindLibType
30480093f4SDimitry Andric   GetUnwindLibType(const llvm::opt::ArgList &Args) const override;
31*0fca6ea1SDimitry Andric   UnwindTableLevel
32*0fca6ea1SDimitry Andric   getDefaultUnwindTableLevel(const llvm::opt::ArgList &Args) const override;
330b57cec5SDimitry Andric   void
340b57cec5SDimitry Andric   AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
350b57cec5SDimitry Andric                             llvm::opt::ArgStringList &CC1Args) const override;
360b57cec5SDimitry Andric   void
370b57cec5SDimitry Andric   addLibStdCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,
380b57cec5SDimitry Andric                            llvm::opt::ArgStringList &CC1Args) const override;
390b57cec5SDimitry Andric 
400b57cec5SDimitry Andric protected:
410b57cec5SDimitry Andric   Tool *buildLinker() const override;
420b57cec5SDimitry Andric 
430b57cec5SDimitry Andric private:
445ffd83dbSDimitry Andric   std::string computeSysRoot() const override;
450b57cec5SDimitry Andric };
460b57cec5SDimitry Andric 
470b57cec5SDimitry Andric } // end namespace toolchains
480b57cec5SDimitry Andric 
490b57cec5SDimitry Andric namespace tools {
500b57cec5SDimitry Andric namespace RISCV {
515f757f3fSDimitry Andric class LLVM_LIBRARY_VISIBILITY Linker final : public Tool {
520b57cec5SDimitry Andric public:
Linker(const ToolChain & TC)535ffd83dbSDimitry Andric   Linker(const ToolChain &TC) : Tool("RISCV::Linker", "ld", TC) {}
hasIntegratedCPP()540b57cec5SDimitry Andric   bool hasIntegratedCPP() const override { return false; }
isLinkJob()550b57cec5SDimitry Andric   bool isLinkJob() const override { return true; }
560b57cec5SDimitry Andric   void ConstructJob(Compilation &C, const JobAction &JA,
570b57cec5SDimitry Andric                     const InputInfo &Output, const InputInfoList &Inputs,
580b57cec5SDimitry Andric                     const llvm::opt::ArgList &TCArgs,
590b57cec5SDimitry Andric                     const char *LinkingOutput) const override;
600b57cec5SDimitry Andric };
610b57cec5SDimitry Andric } // end namespace RISCV
620b57cec5SDimitry Andric } // end namespace tools
630b57cec5SDimitry Andric 
640b57cec5SDimitry Andric } // end namespace driver
650b57cec5SDimitry Andric } // end namespace clang
660b57cec5SDimitry Andric 
670b57cec5SDimitry Andric #endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_RISCVTOOLCHAIN_H
68