105 lines · c
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-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_FREEBSD_H10#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_FREEBSD_H11 12#include "Gnu.h"13#include "clang/Driver/Driver.h"14#include "clang/Driver/ToolChain.h"15 16namespace clang {17namespace driver {18namespace tools {19 20/// Directly call GNU Binutils assembler and linker21namespace freebsd {22class LLVM_LIBRARY_VISIBILITY Assembler final : public Tool {23public: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 35class LLVM_LIBRARY_VISIBILITY Linker final : public Tool {36public: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 freebsd48} // end namespace tools49 50namespace toolchains {51 52class LLVM_LIBRARY_VISIBILITY FreeBSD : public Generic_ELF {53public: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 void62 AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,63 llvm::opt::ArgStringList &CC1Args) const override;64 65 RuntimeLibType GetDefaultRuntimeLibType() const override {66 return ToolChain::RLT_CompilerRT;67 }68 CXXStdlibType GetDefaultCXXStdlibType() const override {69 return ToolChain::CST_Libcxx;70 }71 72 void addLibCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,73 llvm::opt::ArgStringList &CC1Args) const override;74 void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args,75 llvm::opt::ArgStringList &CmdArgs) const override;76 void AddCudaIncludeArgs(const llvm::opt::ArgList &DriverArgs,77 llvm::opt::ArgStringList &CC1Args) const override;78 void AddHIPIncludeArgs(const llvm::opt::ArgList &DriverArgs,79 llvm::opt::ArgStringList &CC1Args) const override;80 81 bool IsAArch64OutlineAtomicsDefault(82 const llvm::opt::ArgList &Args) const override {83 return true;84 }85 86 UnwindTableLevel87 getDefaultUnwindTableLevel(const llvm::opt::ArgList &Args) const override;88 bool isPIEDefault(const llvm::opt::ArgList &Args) const override;89 SanitizerMask getSupportedSanitizers() const override;90 unsigned GetDefaultDwarfVersion() const override { return 4; }91 // Until dtrace (via CTF) and LLDB can deal with distributed debug info,92 // FreeBSD defaults to standalone/full debug info.93 bool GetDefaultStandaloneDebug() const override { return true; }94 95protected:96 Tool *buildAssembler() const override;97 Tool *buildLinker() const override;98};99 100} // end namespace toolchains101} // end namespace driver102} // end namespace clang103 104#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_FREEBSD_H105