xref: /freebsd-src/contrib/llvm-project/clang/lib/Driver/ToolChains/Linux.h (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
10b57cec5SDimitry Andric //===--- Linux.h - Linux ToolChain Implementations --------------*- C++ -*-===//
20b57cec5SDimitry Andric //
30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric //
70b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric 
90b57cec5SDimitry Andric #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_LINUX_H
100b57cec5SDimitry Andric #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_LINUX_H
110b57cec5SDimitry Andric 
120b57cec5SDimitry Andric #include "Gnu.h"
130b57cec5SDimitry Andric #include "clang/Driver/ToolChain.h"
140b57cec5SDimitry Andric 
150b57cec5SDimitry Andric namespace clang {
160b57cec5SDimitry Andric namespace driver {
170b57cec5SDimitry Andric namespace toolchains {
180b57cec5SDimitry Andric 
190b57cec5SDimitry Andric class LLVM_LIBRARY_VISIBILITY Linux : public Generic_ELF {
200b57cec5SDimitry Andric public:
210b57cec5SDimitry Andric   Linux(const Driver &D, const llvm::Triple &Triple,
220b57cec5SDimitry Andric         const llvm::opt::ArgList &Args);
230b57cec5SDimitry Andric 
240b57cec5SDimitry Andric   bool HasNativeLLVMSupport() const override;
250b57cec5SDimitry Andric 
26fe6060f1SDimitry Andric   std::string getMultiarchTriple(const Driver &D,
27fe6060f1SDimitry Andric                                  const llvm::Triple &TargetTriple,
28fe6060f1SDimitry Andric                                  StringRef SysRoot) const override;
29fe6060f1SDimitry Andric 
300b57cec5SDimitry Andric   void
310b57cec5SDimitry Andric   AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
320b57cec5SDimitry Andric                             llvm::opt::ArgStringList &CC1Args) const override;
330b57cec5SDimitry Andric   void addLibStdCxxIncludePaths(
340b57cec5SDimitry Andric       const llvm::opt::ArgList &DriverArgs,
350b57cec5SDimitry Andric       llvm::opt::ArgStringList &CC1Args) const override;
360b57cec5SDimitry Andric   void AddCudaIncludeArgs(const llvm::opt::ArgList &DriverArgs,
370b57cec5SDimitry Andric                           llvm::opt::ArgStringList &CC1Args) const override;
385ffd83dbSDimitry Andric   void AddHIPIncludeArgs(const llvm::opt::ArgList &DriverArgs,
395ffd83dbSDimitry Andric                          llvm::opt::ArgStringList &CC1Args) const override;
4081ad6265SDimitry Andric   void AddHIPRuntimeLibArgs(const llvm::opt::ArgList &Args,
4181ad6265SDimitry Andric                             llvm::opt::ArgStringList &CmdArgs) const override;
420b57cec5SDimitry Andric   void AddIAMCUIncludeArgs(const llvm::opt::ArgList &DriverArgs,
430b57cec5SDimitry Andric                            llvm::opt::ArgStringList &CC1Args) const override;
44fe6060f1SDimitry Andric   RuntimeLibType GetDefaultRuntimeLibType() const override;
4504eeddc0SDimitry Andric   unsigned GetDefaultDwarfVersion() const override;
460b57cec5SDimitry Andric   CXXStdlibType GetDefaultCXXStdlibType() const override;
47fe6060f1SDimitry Andric   bool
48fe6060f1SDimitry Andric   IsAArch64OutlineAtomicsDefault(const llvm::opt::ArgList &Args) const override;
49349cc55cSDimitry Andric   bool isPIEDefault(const llvm::opt::ArgList &Args) const override;
500b57cec5SDimitry Andric   bool IsMathErrnoDefault() const override;
510b57cec5SDimitry Andric   SanitizerMask getSupportedSanitizers() const override;
520b57cec5SDimitry Andric   void addProfileRTLibs(const llvm::opt::ArgList &Args,
530b57cec5SDimitry Andric                         llvm::opt::ArgStringList &CmdArgs) const override;
545ffd83dbSDimitry Andric   std::string computeSysRoot() const override;
550b57cec5SDimitry Andric 
56d65cd7a5SDimitry Andric   std::string getDynamicLinker(const llvm::opt::ArgList &Args) const override;
57d65cd7a5SDimitry Andric 
58d65cd7a5SDimitry Andric   void addExtraOpts(llvm::opt::ArgStringList &CmdArgs) const override;
590b57cec5SDimitry Andric 
600b57cec5SDimitry Andric   std::vector<std::string> ExtraOpts;
610b57cec5SDimitry Andric 
62*bdd1243dSDimitry Andric   const char *getDefaultLinker() const override;
63*bdd1243dSDimitry Andric 
640b57cec5SDimitry Andric protected:
650b57cec5SDimitry Andric   Tool *buildAssembler() const override;
660b57cec5SDimitry Andric   Tool *buildLinker() const override;
675ffd83dbSDimitry Andric   Tool *buildStaticLibTool() const override;
680b57cec5SDimitry Andric };
690b57cec5SDimitry Andric 
700b57cec5SDimitry Andric } // end namespace toolchains
710b57cec5SDimitry Andric } // end namespace driver
720b57cec5SDimitry Andric } // end namespace clang
730b57cec5SDimitry Andric 
740b57cec5SDimitry Andric #endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_LINUX_H
75