Home | History | Annotate | Line # | Download | only in ToolChains
      1 //===--- FreeBSD.h - FreeBSD ToolChain Implementations ----------*- C++ -*-===//
      2 //
      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
      6 //
      7 //===----------------------------------------------------------------------===//
      8 
      9 #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_FREEBSD_H
     10 #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_FREEBSD_H
     11 
     12 #include "Gnu.h"
     13 #include "clang/Driver/Driver.h"
     14 #include "clang/Driver/ToolChain.h"
     15 
     16 namespace clang {
     17 namespace driver {
     18 namespace tools {
     19 
     20 /// freebsd -- Directly call GNU Binutils assembler and linker
     21 namespace freebsd {
     22 class LLVM_LIBRARY_VISIBILITY Assembler : public Tool {
     23 public:
     24   Assembler(const ToolChain &TC)
     25       : Tool("freebsd::Assembler", "assembler", TC) {}
     26 
     27   bool hasIntegratedCPP() const override { return false; }
     28 
     29   void ConstructJob(Compilation &C, const JobAction &JA,
     30                     const InputInfo &Output, const InputInfoList &Inputs,
     31                     const llvm::opt::ArgList &TCArgs,
     32                     const char *LinkingOutput) const override;
     33 };
     34 
     35 class LLVM_LIBRARY_VISIBILITY Linker : public Tool {
     36 public:
     37   Linker(const ToolChain &TC) : Tool("freebsd::Linker", "linker", TC) {}
     38 
     39   bool hasIntegratedCPP() const override { return false; }
     40   bool isLinkJob() const override { return true; }
     41 
     42   void ConstructJob(Compilation &C, const JobAction &JA,
     43                     const InputInfo &Output, const InputInfoList &Inputs,
     44                     const llvm::opt::ArgList &TCArgs,
     45                     const char *LinkingOutput) const override;
     46 };
     47 } // end namespace freebsd
     48 } // end namespace tools
     49 
     50 namespace toolchains {
     51 
     52 class LLVM_LIBRARY_VISIBILITY FreeBSD : public Generic_ELF {
     53 public:
     54   FreeBSD(const Driver &D, const llvm::Triple &Triple,
     55           const llvm::opt::ArgList &Args);
     56   bool HasNativeLLVMSupport() const override;
     57 
     58   bool IsMathErrnoDefault() const override { return false; }
     59   bool IsObjCNonFragileABIDefault() const override { return true; }
     60 
     61   CXXStdlibType GetDefaultCXXStdlibType() const override;
     62   void addLibCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,
     63                              llvm::opt::ArgStringList &CC1Args) const override;
     64   void
     65   addLibStdCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,
     66                            llvm::opt::ArgStringList &CC1Args) const override;
     67   void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args,
     68                            llvm::opt::ArgStringList &CmdArgs) const override;
     69   void AddCudaIncludeArgs(const llvm::opt::ArgList &DriverArgs,
     70                           llvm::opt::ArgStringList &CC1Args) const override;
     71   void AddHIPIncludeArgs(const llvm::opt::ArgList &DriverArgs,
     72                          llvm::opt::ArgStringList &CC1Args) const override;
     73 
     74   llvm::ExceptionHandling
     75   GetExceptionModel(const llvm::opt::ArgList &Args) const override;
     76   bool IsUnwindTablesDefault(const llvm::opt::ArgList &Args) const override;
     77   bool isPIEDefault() const override;
     78   SanitizerMask getSupportedSanitizers() const override;
     79   unsigned GetDefaultDwarfVersion() const override;
     80   // Until dtrace (via CTF) and LLDB can deal with distributed debug info,
     81   // FreeBSD defaults to standalone/full debug info.
     82   bool GetDefaultStandaloneDebug() const override { return true; }
     83   void
     84   addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
     85                         llvm::opt::ArgStringList &CC1Args,
     86                         Action::OffloadKind DeviceOffloadKind) const override;
     87 
     88 protected:
     89   Tool *buildAssembler() const override;
     90   Tool *buildLinker() const override;
     91 };
     92 
     93 } // end namespace toolchains
     94 } // end namespace driver
     95 } // end namespace clang
     96 
     97 #endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_FREEBSD_H
     98