]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/clang/lib/Driver/ToolChains/BareMetal.h
Merge ^/head r327624 through r327885.
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / clang / lib / Driver / ToolChains / BareMetal.h
1 //===--- BareMetal.h - Bare Metal Tool and ToolChain -------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_BAREMETAL_H
11 #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_BAREMETAL_H
12
13 #include "clang/Driver/Tool.h"
14 #include "clang/Driver/ToolChain.h"
15
16 #include <string>
17
18 namespace clang {
19 namespace driver {
20
21 namespace toolchains {
22
23 class LLVM_LIBRARY_VISIBILITY BareMetal : public ToolChain {
24 public:
25   BareMetal(const Driver &D, const llvm::Triple &Triple,
26             const llvm::opt::ArgList &Args);
27   ~BareMetal() override;
28
29   static bool handlesTarget(const llvm::Triple &Triple);
30 protected:
31   Tool *buildLinker() const override;
32
33 public:
34   bool useIntegratedAs() const override { return true; }
35   bool isCrossCompiling() const override { return true; }
36   bool isPICDefault() const override { return false; }
37   bool isPIEDefault() const override { return false; }
38   bool isPICDefaultForced() const override { return false; }
39   bool SupportsProfiling() const override { return false; }
40
41   RuntimeLibType GetDefaultRuntimeLibType() const override {
42     return ToolChain::RLT_CompilerRT;
43   }
44   CXXStdlibType GetDefaultCXXStdlibType() const override {
45     return ToolChain::CST_Libcxx;
46   }
47
48   const char *getDefaultLinker() const override { return "ld.lld"; }
49
50   std::string getRuntimesDir() const;
51   void AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
52                                  llvm::opt::ArgStringList &CC1Args) const override;
53   void addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
54                              llvm::opt::ArgStringList &CC1Args,
55                              Action::OffloadKind DeviceOffloadKind) const override;
56   std::string findLibCxxIncludePath(ToolChain::CXXStdlibType LibType) const;
57   void AddClangCXXStdlibIncludeArgs(
58       const llvm::opt::ArgList &DriverArgs,
59       llvm::opt::ArgStringList &CC1Args) const override;
60   void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args,
61                            llvm::opt::ArgStringList &CmdArgs) const override;
62   void AddLinkRuntimeLib(const llvm::opt::ArgList &Args,
63                          llvm::opt::ArgStringList &CmdArgs) const;
64 };
65
66 } // namespace toolchains
67
68 namespace tools {
69 namespace baremetal {
70
71 class LLVM_LIBRARY_VISIBILITY Linker : public Tool {
72 public:
73   Linker(const ToolChain &TC) : Tool("baremetal::Linker", "ld.lld", TC) {}
74   bool isLinkJob() const override { return true; }
75   bool hasIntegratedCPP() const override { return false; }
76   void ConstructJob(Compilation &C, const JobAction &JA,
77                     const InputInfo &Output, const InputInfoList &Inputs,
78                     const llvm::opt::ArgList &TCArgs,
79                     const char *LinkingOutput) const override;
80 };
81
82 } // namespace baremetal
83 } // namespace tools
84
85 } // namespace driver
86 } // namespace clang
87
88 #endif