Path: blob/main/contrib/llvm-project/clang/lib/Driver/ToolChains/Fuchsia.h
35269 views
//===--- Fuchsia.h - Fuchsia ToolChain Implementations ----------*- 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_FUCHSIA_H9#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_FUCHSIA_H1011#include "Gnu.h"12#include "clang/Basic/LangOptions.h"13#include "clang/Driver/Tool.h"14#include "clang/Driver/ToolChain.h"1516namespace clang {17namespace driver {18namespace tools {19namespace fuchsia {20class LLVM_LIBRARY_VISIBILITY StaticLibTool : public Tool {21public:22StaticLibTool(const ToolChain &TC)23: Tool("fuchsia::StaticLibTool", "llvm-ar", TC) {}2425bool hasIntegratedCPP() const override { return false; }26bool isLinkJob() const override { return true; }2728void ConstructJob(Compilation &C, const JobAction &JA,29const InputInfo &Output, const InputInfoList &Inputs,30const llvm::opt::ArgList &TCArgs,31const char *LinkingOutput) const override;32};3334class LLVM_LIBRARY_VISIBILITY Linker final : public Tool {35public:36Linker(const ToolChain &TC) : Tool("fuchsia::Linker", "ld.lld", TC) {}3738bool hasIntegratedCPP() const override { return false; }39bool isLinkJob() const override { return true; }4041void ConstructJob(Compilation &C, const JobAction &JA,42const InputInfo &Output, const InputInfoList &Inputs,43const llvm::opt::ArgList &TCArgs,44const char *LinkingOutput) const override;45};46} // end namespace fuchsia47} // end namespace tools4849namespace toolchains {5051class LLVM_LIBRARY_VISIBILITY Fuchsia : public ToolChain {52public:53Fuchsia(const Driver &D, const llvm::Triple &Triple,54const llvm::opt::ArgList &Args);5556bool HasNativeLLVMSupport() const override { return true; }57bool IsMathErrnoDefault() const override { return false; }58RuntimeLibType GetDefaultRuntimeLibType() const override {59return ToolChain::RLT_CompilerRT;60}61CXXStdlibType GetDefaultCXXStdlibType() const override {62return ToolChain::CST_Libcxx;63}64UnwindTableLevel65getDefaultUnwindTableLevel(const llvm::opt::ArgList &Args) const override {66return UnwindTableLevel::Asynchronous;67}68bool isPICDefault() const override { return false; }69bool isPIEDefault(const llvm::opt::ArgList &Args) const override {70return true;71}72bool isPICDefaultForced() const override { return false; }73llvm::DebuggerKind getDefaultDebuggerTuning() const override {74return llvm::DebuggerKind::GDB;75}7677LangOptions::StackProtectorMode78GetDefaultStackProtectorLevel(bool KernelOrKext) const override {79return LangOptions::SSPStrong;80}8182std::string ComputeEffectiveClangTriple(const llvm::opt::ArgList &Args,83types::ID InputType) const override;8485SanitizerMask getSupportedSanitizers() const override;86SanitizerMask getDefaultSanitizers() const override;8788RuntimeLibType89GetRuntimeLibType(const llvm::opt::ArgList &Args) const override;90CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList &Args) const override;9192bool IsAArch64OutlineAtomicsDefault(93const llvm::opt::ArgList &Args) const override {94return true;95}9697void98addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,99llvm::opt::ArgStringList &CC1Args,100Action::OffloadKind DeviceOffloadKind) const override;101void102AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,103llvm::opt::ArgStringList &CC1Args) const override;104void AddClangCXXStdlibIncludeArgs(105const llvm::opt::ArgList &DriverArgs,106llvm::opt::ArgStringList &CC1Args) const override;107void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args,108llvm::opt::ArgStringList &CmdArgs) const override;109110const char *getDefaultLinker() const override { return "ld.lld"; }111112protected:113Tool *buildLinker() const override;114Tool *buildStaticLibTool() const override;115};116117} // end namespace toolchains118} // end namespace driver119} // end namespace clang120121#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_FUCHSIA_H122123124