xref: /freebsd/contrib/llvm-project/clang/lib/Driver/ToolChains/PS4CPU.h (revision 0b57cec536236d46e3dba9bd041533462f33dbb7)
1*0b57cec5SDimitry Andric //===--- PS4CPU.h - PS4CPU ToolChain Implementations ------------*- C++ -*-===//
2*0b57cec5SDimitry Andric //
3*0b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*0b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5*0b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*0b57cec5SDimitry Andric //
7*0b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
8*0b57cec5SDimitry Andric 
9*0b57cec5SDimitry Andric #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_PS4CPU_H
10*0b57cec5SDimitry Andric #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_PS4CPU_H
11*0b57cec5SDimitry Andric 
12*0b57cec5SDimitry Andric #include "Gnu.h"
13*0b57cec5SDimitry Andric #include "clang/Driver/Tool.h"
14*0b57cec5SDimitry Andric #include "clang/Driver/ToolChain.h"
15*0b57cec5SDimitry Andric 
16*0b57cec5SDimitry Andric namespace clang {
17*0b57cec5SDimitry Andric namespace driver {
18*0b57cec5SDimitry Andric namespace tools {
19*0b57cec5SDimitry Andric 
20*0b57cec5SDimitry Andric namespace PS4cpu {
21*0b57cec5SDimitry Andric 
22*0b57cec5SDimitry Andric void addProfileRTArgs(const ToolChain &TC, const llvm::opt::ArgList &Args,
23*0b57cec5SDimitry Andric                       llvm::opt::ArgStringList &CmdArgs);
24*0b57cec5SDimitry Andric 
25*0b57cec5SDimitry Andric void addSanitizerArgs(const ToolChain &TC, llvm::opt::ArgStringList &CmdArgs);
26*0b57cec5SDimitry Andric 
27*0b57cec5SDimitry Andric class LLVM_LIBRARY_VISIBILITY Assemble : public Tool {
28*0b57cec5SDimitry Andric public:
29*0b57cec5SDimitry Andric   Assemble(const ToolChain &TC)
30*0b57cec5SDimitry Andric       : Tool("PS4cpu::Assemble", "assembler", TC, RF_Full) {}
31*0b57cec5SDimitry Andric 
32*0b57cec5SDimitry Andric   bool hasIntegratedCPP() const override { return false; }
33*0b57cec5SDimitry Andric 
34*0b57cec5SDimitry Andric   void ConstructJob(Compilation &C, const JobAction &JA,
35*0b57cec5SDimitry Andric                     const InputInfo &Output,
36*0b57cec5SDimitry Andric                     const InputInfoList &Inputs,
37*0b57cec5SDimitry Andric                     const llvm::opt::ArgList &TCArgs,
38*0b57cec5SDimitry Andric                     const char *LinkingOutput) const override;
39*0b57cec5SDimitry Andric };
40*0b57cec5SDimitry Andric 
41*0b57cec5SDimitry Andric class LLVM_LIBRARY_VISIBILITY Link : public Tool {
42*0b57cec5SDimitry Andric public:
43*0b57cec5SDimitry Andric   Link(const ToolChain &TC) : Tool("PS4cpu::Link", "linker", TC, RF_Full) {}
44*0b57cec5SDimitry Andric 
45*0b57cec5SDimitry Andric   bool hasIntegratedCPP() const override { return false; }
46*0b57cec5SDimitry Andric   bool isLinkJob() const override { return true; }
47*0b57cec5SDimitry Andric 
48*0b57cec5SDimitry Andric   void ConstructJob(Compilation &C, const JobAction &JA,
49*0b57cec5SDimitry Andric                     const InputInfo &Output,
50*0b57cec5SDimitry Andric                     const InputInfoList &Inputs,
51*0b57cec5SDimitry Andric                     const llvm::opt::ArgList &TCArgs,
52*0b57cec5SDimitry Andric                     const char *LinkingOutput) const override;
53*0b57cec5SDimitry Andric };
54*0b57cec5SDimitry Andric } // end namespace PS4cpu
55*0b57cec5SDimitry Andric } // namespace tools
56*0b57cec5SDimitry Andric 
57*0b57cec5SDimitry Andric namespace toolchains {
58*0b57cec5SDimitry Andric 
59*0b57cec5SDimitry Andric class LLVM_LIBRARY_VISIBILITY PS4CPU : public Generic_ELF {
60*0b57cec5SDimitry Andric public:
61*0b57cec5SDimitry Andric   PS4CPU(const Driver &D, const llvm::Triple &Triple,
62*0b57cec5SDimitry Andric          const llvm::opt::ArgList &Args);
63*0b57cec5SDimitry Andric 
64*0b57cec5SDimitry Andric   // No support for finding a C++ standard library yet.
65*0b57cec5SDimitry Andric   void addLibCxxIncludePaths(
66*0b57cec5SDimitry Andric       const llvm::opt::ArgList &DriverArgs,
67*0b57cec5SDimitry Andric       llvm::opt::ArgStringList &CC1Args) const override {}
68*0b57cec5SDimitry Andric   void addLibStdCxxIncludePaths(
69*0b57cec5SDimitry Andric       const llvm::opt::ArgList &DriverArgs,
70*0b57cec5SDimitry Andric       llvm::opt::ArgStringList &CC1Args) const override {}
71*0b57cec5SDimitry Andric 
72*0b57cec5SDimitry Andric   bool IsMathErrnoDefault() const override { return false; }
73*0b57cec5SDimitry Andric   bool IsObjCNonFragileABIDefault() const override { return true; }
74*0b57cec5SDimitry Andric   bool HasNativeLLVMSupport() const override;
75*0b57cec5SDimitry Andric   bool isPICDefault() const override;
76*0b57cec5SDimitry Andric 
77*0b57cec5SDimitry Andric   unsigned GetDefaultStackProtectorLevel(bool KernelOrKext) const override {
78*0b57cec5SDimitry Andric     return 2; // SSPStrong
79*0b57cec5SDimitry Andric   }
80*0b57cec5SDimitry Andric 
81*0b57cec5SDimitry Andric   llvm::DebuggerKind getDefaultDebuggerTuning() const override {
82*0b57cec5SDimitry Andric     return llvm::DebuggerKind::SCE;
83*0b57cec5SDimitry Andric   }
84*0b57cec5SDimitry Andric 
85*0b57cec5SDimitry Andric   SanitizerMask getSupportedSanitizers() const override;
86*0b57cec5SDimitry Andric 
87*0b57cec5SDimitry Andric protected:
88*0b57cec5SDimitry Andric   Tool *buildAssembler() const override;
89*0b57cec5SDimitry Andric   Tool *buildLinker() const override;
90*0b57cec5SDimitry Andric };
91*0b57cec5SDimitry Andric 
92*0b57cec5SDimitry Andric } // end namespace toolchains
93*0b57cec5SDimitry Andric } // end namespace driver
94*0b57cec5SDimitry Andric } // end namespace clang
95*0b57cec5SDimitry Andric 
96*0b57cec5SDimitry Andric #endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_PS4CPU_H
97