BareMetal.h revision 353358
1137015Sdes//===--- BareMetal.h - Bare Metal Tool and ToolChain -------------*- C++ -*-===// 298937Sdes// 398937Sdes// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 498937Sdes// See https://llvm.org/LICENSE.txt for license information. 598937Sdes// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 698937Sdes// 798937Sdes//===----------------------------------------------------------------------===// 898937Sdes 998937Sdes#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_BAREMETAL_H 1098937Sdes#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_BAREMETAL_H 1198937Sdes 1298937Sdes#include "clang/Driver/Tool.h" 1398937Sdes#include "clang/Driver/ToolChain.h" 1498937Sdes 1598937Sdes#include <string> 1698937Sdes 1798937Sdesnamespace clang { 1898937Sdesnamespace driver { 1998937Sdes 2098937Sdesnamespace toolchains { 2198937Sdes 2298937Sdesclass LLVM_LIBRARY_VISIBILITY BareMetal : public ToolChain { 2398937Sdespublic: 2498937Sdes BareMetal(const Driver &D, const llvm::Triple &Triple, 2598937Sdes const llvm::opt::ArgList &Args); 2698937Sdes ~BareMetal() override; 2798937Sdes 2898937Sdes static bool handlesTarget(const llvm::Triple &Triple); 2999060Sdesprotected: 30113908Sdes Tool *buildLinker() const override; 3198937Sdes 3298937Sdespublic: 3398937Sdes bool useIntegratedAs() const override { return true; } 3498937Sdes bool isCrossCompiling() const override { return true; } 3598937Sdes bool isPICDefault() const override { return false; } 3698937Sdes bool isPIEDefault() const override { return false; } 3798937Sdes bool isPICDefaultForced() const override { return false; } 3898937Sdes bool SupportsProfiling() const override { return false; } 3998937Sdes 4098937Sdes RuntimeLibType GetDefaultRuntimeLibType() const override { 4198937Sdes return ToolChain::RLT_CompilerRT; 4298937Sdes } 4398937Sdes CXXStdlibType GetDefaultCXXStdlibType() const override { 4498937Sdes return ToolChain::CST_Libcxx; 4598937Sdes } 4698937Sdes 4798937Sdes const char *getDefaultLinker() const override { return "ld.lld"; } 4898937Sdes 49124208Sdes std::string getRuntimesDir() const; 5098937Sdes void AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs, 5198937Sdes llvm::opt::ArgStringList &CC1Args) const override; 5298937Sdes void addClangTargetOptions(const llvm::opt::ArgList &DriverArgs, 53113908Sdes llvm::opt::ArgStringList &CC1Args, 5498937Sdes Action::OffloadKind DeviceOffloadKind) const override; 5598937Sdes void AddClangCXXStdlibIncludeArgs( 5698937Sdes const llvm::opt::ArgList &DriverArgs, 5798937Sdes llvm::opt::ArgStringList &CC1Args) const override; 5898937Sdes void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args, 5998937Sdes llvm::opt::ArgStringList &CmdArgs) const override; 6098937Sdes void AddLinkRuntimeLib(const llvm::opt::ArgList &Args, 6198937Sdes llvm::opt::ArgStringList &CmdArgs) const; 62113908Sdes}; 6398937Sdes 64126274Sdes} // namespace toolchains 65126274Sdes 66126274Sdesnamespace tools { 67126274Sdesnamespace baremetal { 68126274Sdes 69126274Sdesclass LLVM_LIBRARY_VISIBILITY Linker : public Tool { 70137015Sdespublic: 71137015Sdes Linker(const ToolChain &TC) : Tool("baremetal::Linker", "ld.lld", TC) {} 72137015Sdes bool isLinkJob() const override { return true; } 73124208Sdes bool hasIntegratedCPP() const override { return false; } 7498937Sdes void ConstructJob(Compilation &C, const JobAction &JA, 75113908Sdes const InputInfo &Output, const InputInfoList &Inputs, 76113908Sdes const llvm::opt::ArgList &TCArgs, 7798937Sdes const char *LinkingOutput) const override; 78113908Sdes}; 79137015Sdes 80113908Sdes} // namespace baremetal 81113908Sdes} // namespace tools 82113908Sdes 83113908Sdes} // namespace driver 84137015Sdes} // namespace clang 85124208Sdes 86124208Sdes#endif 87126274Sdes