brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.4 KiB · d3d415b Raw
134 lines · c
1//===--- BareMetal.h - Bare Metal Tool and ToolChain ------------*- C++-*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_BAREMETAL_H10#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_BAREMETAL_H11 12#include "ToolChains/Gnu.h"13#include "clang/Driver/Tool.h"14#include "clang/Driver/ToolChain.h"15 16#include <string>17 18namespace clang {19namespace driver {20 21namespace toolchains {22 23class LLVM_LIBRARY_VISIBILITY BareMetal : public Generic_ELF {24public:25  BareMetal(const Driver &D, const llvm::Triple &Triple,26            const llvm::opt::ArgList &Args);27  ~BareMetal() override = default;28 29  static bool handlesTarget(const llvm::Triple &Triple);30 31  void findMultilibs(const Driver &D, const llvm::Triple &Triple,32                     const llvm::opt::ArgList &Args);33 34protected:35  Tool *buildLinker() const override;36  Tool *buildStaticLibTool() const override;37 38public:39  bool initGCCInstallation(const llvm::Triple &Triple,40                           const llvm::opt::ArgList &Args);41  bool hasValidGCCInstallation() const { return IsGCCInstallationValid; }42  bool isBareMetal() const override { return true; }43  bool isCrossCompiling() const override { return true; }44  bool HasNativeLLVMSupport() const override { return true; }45  bool isPICDefault() const override { return false; }46  bool isPIEDefault(const llvm::opt::ArgList &Args) const override {47    return false;48  }49  bool isPICDefaultForced() const override { return false; }50  bool SupportsProfiling() const override { return false; }51 52  StringRef getOSLibName() const override { return "baremetal"; }53 54  UnwindTableLevel55  getDefaultUnwindTableLevel(const llvm::opt::ArgList &Args) const override {56    return UnwindTableLevel::None;57  }58 59  CXXStdlibType GetDefaultCXXStdlibType() const override;60 61  RuntimeLibType GetDefaultRuntimeLibType() const override;62 63  UnwindLibType GetUnwindLibType(const llvm::opt::ArgList &Args) const override;64 65  void66  AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,67                            llvm::opt::ArgStringList &CC1Args) const override;68  void69  addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,70                        llvm::opt::ArgStringList &CC1Args,71                        Action::OffloadKind DeviceOffloadKind) const override;72  void AddClangCXXStdlibIncludeArgs(73      const llvm::opt::ArgList &DriverArgs,74      llvm::opt::ArgStringList &CC1Args) const override;75  void76  addLibStdCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,77                           llvm::opt::ArgStringList &CC1Args) const override;78  std::string computeSysRoot() const override;79  std::string getCompilerRTPath() const override;80  SanitizerMask getSupportedSanitizers() const override;81 82  SmallVector<std::string>83  getMultilibMacroDefinesStr(llvm::opt::ArgList &Args) const override;84 85private:86  using OrderedMultilibs =87      llvm::iterator_range<llvm::SmallVector<Multilib>::const_reverse_iterator>;88  OrderedMultilibs getOrderedMultilibs() const;89 90  std::string SysRoot;91 92  bool IsGCCInstallationValid;93 94  SmallVector<std::string> MultilibMacroDefines;95};96 97} // namespace toolchains98 99namespace tools {100namespace baremetal {101 102class LLVM_LIBRARY_VISIBILITY StaticLibTool : public Tool {103public:104  StaticLibTool(const ToolChain &TC)105      : Tool("baremetal::StaticLibTool", "llvm-ar", TC) {}106 107  bool hasIntegratedCPP() const override { return false; }108  bool isLinkJob() const override { return true; }109 110  void ConstructJob(Compilation &C, const JobAction &JA,111                    const InputInfo &Output, const InputInfoList &Inputs,112                    const llvm::opt::ArgList &TCArgs,113                    const char *LinkingOutput) const override;114};115 116class LLVM_LIBRARY_VISIBILITY Linker final : public Tool {117public:118  Linker(const ToolChain &TC) : Tool("baremetal::Linker", "linker", TC) {}119  bool isLinkJob() const override { return true; }120  bool hasIntegratedCPP() const override { return false; }121  void ConstructJob(Compilation &C, const JobAction &JA,122                    const InputInfo &Output, const InputInfoList &Inputs,123                    const llvm::opt::ArgList &TCArgs,124                    const char *LinkingOutput) const override;125};126 127} // namespace baremetal128} // namespace tools129 130} // namespace driver131} // namespace clang132 133#endif134