1 //===--- Fuchsia.h - Fuchsia ToolChain Implementations ----------*- C++ -*-===//
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-exception
7 //===----------------------------------------------------------------------===//
9 #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_FUCHSIA_H
10 #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_FUCHSIA_H
13 #include "clang/Driver/Tool.h"
14 #include "clang/Driver/ToolChain.h"
20 class LLVM_LIBRARY_VISIBILITY Linker : public Tool {
22 Linker(const ToolChain &TC) : Tool("fuchsia::Linker", "ld.lld", TC) {}
24 bool hasIntegratedCPP() const override { return false; }
25 bool isLinkJob() const override { return true; }
27 void ConstructJob(Compilation &C, const JobAction &JA,
28 const InputInfo &Output, const InputInfoList &Inputs,
29 const llvm::opt::ArgList &TCArgs,
30 const char *LinkingOutput) const override;
32 } // end namespace fuchsia
33 } // end namespace tools
35 namespace toolchains {
37 class LLVM_LIBRARY_VISIBILITY Fuchsia : public ToolChain {
39 Fuchsia(const Driver &D, const llvm::Triple &Triple,
40 const llvm::opt::ArgList &Args);
42 bool HasNativeLLVMSupport() const override { return true; }
43 bool IsIntegratedAssemblerDefault() const override { return true; }
44 bool IsMathErrnoDefault() const override { return false; }
45 bool useRelaxRelocations() const override { return true; };
46 RuntimeLibType GetDefaultRuntimeLibType() const override {
47 return ToolChain::RLT_CompilerRT;
49 CXXStdlibType GetDefaultCXXStdlibType() const override {
50 return ToolChain::CST_Libcxx;
52 bool IsUnwindTablesDefault(const llvm::opt::ArgList &Args) const override {
55 bool isPICDefault() const override { return false; }
56 bool isPIEDefault() const override { return true; }
57 bool isPICDefaultForced() const override { return false; }
58 llvm::DebuggerKind getDefaultDebuggerTuning() const override {
59 return llvm::DebuggerKind::GDB;
62 unsigned GetDefaultStackProtectorLevel(bool KernelOrKext) const override {
63 return 2; // SSPStrong
66 std::string ComputeEffectiveClangTriple(const llvm::opt::ArgList &Args,
67 types::ID InputType) const override;
69 SanitizerMask getSupportedSanitizers() const override;
70 SanitizerMask getDefaultSanitizers() const override;
73 GetRuntimeLibType(const llvm::opt::ArgList &Args) const override;
75 GetCXXStdlibType(const llvm::opt::ArgList &Args) const override;
77 void addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
78 llvm::opt::ArgStringList &CC1Args,
79 Action::OffloadKind DeviceOffloadKind) const override;
81 AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
82 llvm::opt::ArgStringList &CC1Args) const override;
84 AddClangCXXStdlibIncludeArgs(const llvm::opt::ArgList &DriverArgs,
85 llvm::opt::ArgStringList &CC1Args) const override;
86 void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args,
87 llvm::opt::ArgStringList &CmdArgs) const override;
89 const char *getDefaultLinker() const override {
94 Tool *buildLinker() const override;
97 } // end namespace toolchains
98 } // end namespace driver
99 } // end namespace clang
101 #endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_FUCHSIA_H