Path: blob/main/contrib/llvm-project/clang/lib/Driver/ToolChains/BareMetal.h
35269 views
//===--- BareMetal.h - Bare Metal Tool and ToolChain ------------*- C++-*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_BAREMETAL_H9#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_BAREMETAL_H1011#include "clang/Driver/Tool.h"12#include "clang/Driver/ToolChain.h"1314#include <string>1516namespace clang {17namespace driver {1819namespace toolchains {2021class LLVM_LIBRARY_VISIBILITY BareMetal : public ToolChain {22public:23BareMetal(const Driver &D, const llvm::Triple &Triple,24const llvm::opt::ArgList &Args);25~BareMetal() override = default;2627static bool handlesTarget(const llvm::Triple &Triple);2829void findMultilibs(const Driver &D, const llvm::Triple &Triple,30const llvm::opt::ArgList &Args);3132protected:33Tool *buildLinker() const override;34Tool *buildStaticLibTool() const override;3536public:37bool useIntegratedAs() const override { return true; }38bool isBareMetal() const override { return true; }39bool isCrossCompiling() const override { return true; }40bool HasNativeLLVMSupport() const override { return true; }41bool isPICDefault() const override { return false; }42bool isPIEDefault(const llvm::opt::ArgList &Args) const override {43return false;44}45bool isPICDefaultForced() const override { return false; }46bool SupportsProfiling() const override { return false; }4748StringRef getOSLibName() const override { return "baremetal"; }4950RuntimeLibType GetDefaultRuntimeLibType() const override {51return ToolChain::RLT_CompilerRT;52}53CXXStdlibType GetDefaultCXXStdlibType() const override {54return ToolChain::CST_Libcxx;55}5657const char *getDefaultLinker() const override { return "ld.lld"; }5859void60AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,61llvm::opt::ArgStringList &CC1Args) const override;62void63addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,64llvm::opt::ArgStringList &CC1Args,65Action::OffloadKind DeviceOffloadKind) const override;66void AddClangCXXStdlibIncludeArgs(67const llvm::opt::ArgList &DriverArgs,68llvm::opt::ArgStringList &CC1Args) const override;69void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args,70llvm::opt::ArgStringList &CmdArgs) const override;71void AddLinkRuntimeLib(const llvm::opt::ArgList &Args,72llvm::opt::ArgStringList &CmdArgs) const;73std::string computeSysRoot() const override;74SanitizerMask getSupportedSanitizers() const override;7576private:77using OrderedMultilibs =78llvm::iterator_range<llvm::SmallVector<Multilib>::const_reverse_iterator>;79OrderedMultilibs getOrderedMultilibs() const;80};8182} // namespace toolchains8384namespace tools {85namespace baremetal {8687class LLVM_LIBRARY_VISIBILITY StaticLibTool : public Tool {88public:89StaticLibTool(const ToolChain &TC)90: Tool("baremetal::StaticLibTool", "llvm-ar", TC) {}9192bool hasIntegratedCPP() const override { return false; }93bool isLinkJob() const override { return true; }9495void ConstructJob(Compilation &C, const JobAction &JA,96const InputInfo &Output, const InputInfoList &Inputs,97const llvm::opt::ArgList &TCArgs,98const char *LinkingOutput) const override;99};100101class LLVM_LIBRARY_VISIBILITY Linker final : public Tool {102public:103Linker(const ToolChain &TC) : Tool("baremetal::Linker", "ld.lld", TC) {}104bool isLinkJob() const override { return true; }105bool hasIntegratedCPP() const override { return false; }106void ConstructJob(Compilation &C, const JobAction &JA,107const InputInfo &Output, const InputInfoList &Inputs,108const llvm::opt::ArgList &TCArgs,109const char *LinkingOutput) const override;110};111112} // namespace baremetal113} // namespace tools114115} // namespace driver116} // namespace clang117118#endif119120121