Lines Matching +full:linux +full:- +full:headers
1 //===--- Linux.h - Linux ToolChain Implementations --------------*- C++ -*-===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 #include "Linux.h"
37 /// Debian-based systems are starting to use a multiarch setup where they use
38 /// a target-triple directory in the library and header search paths.
41 std::string Linux::getMultiarchTriple(const Driver &D, in getMultiarchTriple()
57 // common linux triples that don't quite match the Clang triple for both in getMultiarchTriple()
58 // 32-bit and 64-bit targets. Multiarch fixes its install triples to these in getMultiarchTriple()
63 return "arm-linux-androideabi"; in getMultiarchTriple()
67 return "arm-linux-gnueabihf"; in getMultiarchTriple()
68 return "arm-linux-gnueabi"; in getMultiarchTriple()
74 return "armeb-linux-gnueabihf"; in getMultiarchTriple()
75 return "armeb-linux-gnueabi"; in getMultiarchTriple()
78 return "i686-linux-android"; in getMultiarchTriple()
79 return "i386-linux-gnu"; in getMultiarchTriple()
82 return "x86_64-linux-android"; in getMultiarchTriple()
84 return "x86_64-linux-gnux32"; in getMultiarchTriple()
85 return "x86_64-linux-gnu"; in getMultiarchTriple()
88 return "aarch64-linux-android"; in getMultiarchTriple()
91 return "aarch64-linux-pauthtest"; in getMultiarchTriple()
92 return "aarch64-linux-gnu"; in getMultiarchTriple()
94 return "aarch64_be-linux-gnu"; in getMultiarchTriple()
126 return (Twine("loongarch64-linux-") + Libc + FPFlavor).str(); in getMultiarchTriple()
130 return "m68k-linux-gnu"; in getMultiarchTriple()
133 return IsMipsR6 ? "mipsisa32r6-linux-gnu" : "mips-linux-gnu"; in getMultiarchTriple()
135 return IsMipsR6 ? "mipsisa32r6el-linux-gnu" : "mipsel-linux-gnu"; in getMultiarchTriple()
138 "-linux-" + (IsMipsN32Abi ? "gnuabin32" : "gnuabi64"); in getMultiarchTriple()
141 if (D.getVFS().exists(concat(SysRoot, "/lib/mips64-linux-gnu"))) in getMultiarchTriple()
142 return "mips64-linux-gnu"; in getMultiarchTriple()
147 "-linux-" + (IsMipsN32Abi ? "gnuabin32" : "gnuabi64"); in getMultiarchTriple()
150 if (D.getVFS().exists(concat(SysRoot, "/lib/mips64el-linux-gnu"))) in getMultiarchTriple()
151 return "mips64el-linux-gnu"; in getMultiarchTriple()
155 if (D.getVFS().exists(concat(SysRoot, "/lib/powerpc-linux-gnuspe"))) in getMultiarchTriple()
156 return "powerpc-linux-gnuspe"; in getMultiarchTriple()
157 return "powerpc-linux-gnu"; in getMultiarchTriple()
159 return "powerpcle-linux-gnu"; in getMultiarchTriple()
161 return "powerpc64-linux-gnu"; in getMultiarchTriple()
163 return "powerpc64le-linux-gnu"; in getMultiarchTriple()
166 return "riscv64-linux-android"; in getMultiarchTriple()
167 return "riscv64-linux-gnu"; in getMultiarchTriple()
169 return "sparc-linux-gnu"; in getMultiarchTriple()
171 return "sparc64-linux-gnu"; in getMultiarchTriple()
173 return "s390x-linux-gnu"; in getMultiarchTriple()
219 Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) in Linux() function in Linux
233 ExtraOpts.push_back("-z"); in Linux()
239 ExtraOpts.push_back("-z"); in Linux()
243 // Note, lld from 11 onwards default max-page-size to 65536 for both ARM and in Linux()
247 // Android ARM uses max-page-size=4096 to reduce VMA usage. in Linux()
248 ExtraOpts.push_back("-z"); in Linux()
249 ExtraOpts.push_back("max-page-size=4096"); in Linux()
251 // Android AArch64 uses max-page-size=16384 to support 4k/16k page sizes. in Linux()
253 ExtraOpts.push_back("-z"); in Linux()
254 ExtraOpts.push_back("max-page-size=16384"); in Linux()
267 ExtraOpts.push_back("-X"); in Linux()
279 ExtraOpts.push_back("--sysroot=" + SysRoot); in Linux()
291 ExtraOpts.push_back("--hash-style=both"); in Linux()
293 ExtraOpts.push_back("--hash-style=gnu"); in Linux()
297 ExtraOpts.push_back("--build-id"); in Linux()
301 // the GCC driver itself uses, as this is part of the GCC-compatible driver. in Linux()
334 // 64-bit OpenEmbedded sysroots may not have a /usr/lib dir. So they cannot in Linux()
354 ToolChain::RuntimeLibType Linux::GetDefaultRuntimeLibType() const { in GetDefaultRuntimeLibType()
360 unsigned Linux::GetDefaultDwarfVersion() const { in GetDefaultDwarfVersion()
366 ToolChain::CXXStdlibType Linux::GetDefaultCXXStdlibType() const { in GetDefaultCXXStdlibType()
372 bool Linux::HasNativeLLVMSupport() const { return true; } in HasNativeLLVMSupport()
374 Tool *Linux::buildLinker() const { return new tools::gnutools::Linker(*this); } in buildLinker()
376 Tool *Linux::buildStaticLibTool() const { in buildStaticLibTool()
380 Tool *Linux::buildAssembler() const { in buildAssembler()
384 std::string Linux::computeSysRoot() const { in computeSysRoot()
402 // $GCCToolchainPath/lib/gcc/csky-linux-gnuabiv2/6.3.0 in computeSysRoot()
403 // Path = $GCCToolchainPath/csky-linux-gnuabiv2/libc in computeSysRoot()
438 std::string Linux::getDynamicLinker(const ArgList &Args) const { in getDynamicLinker()
448 // allows to run HWASan binaries on non-HWASan system images. This in getDynamicLinker()
485 ArchName = "powerpc-sf"; in getDynamicLinker()
487 return "/lib/ld-musl-" + ArchName + ".so.1"; in getDynamicLinker()
499 Loader = "ld-linux-aarch64.so.1"; in getDynamicLinker()
503 Loader = "ld-linux-aarch64_be.so.1"; in getDynamicLinker()
515 Loader = HF ? "ld-linux-armhf.so.3" : "ld-linux.so.3"; in getDynamicLinker()
521 ("ld-linux-loongarch-" + in getDynamicLinker()
529 ("ld-linux-loongarch-" + in getDynamicLinker()
547 Loader = IsNaN2008 ? "ld-uClibc-mipsn8.so.0" : "ld-uClibc.so.0"; in getDynamicLinker()
551 Triple.isLittleEndian() ? "ld-musl-mipsel.so.1" : "ld-musl-mips.so.1"; in getDynamicLinker()
553 Loader = IsNaN2008 ? "ld-linux-mipsn8.so.1" : "ld.so.1"; in getDynamicLinker()
580 Loader = ("ld-linux-" + ArchName + "-" + ABIName + ".so.1").str(); in getDynamicLinker()
586 Loader = "ld-linux.so.2"; in getDynamicLinker()
590 Loader = "ld-linux.so.2"; in getDynamicLinker()
598 Loader = "ld-linux.so.2"; in getDynamicLinker()
604 Loader = X32 ? "ld-linux-x32.so.2" : "ld-linux-x86-64.so.2"; in getDynamicLinker()
608 return "/opt/nec/ve/lib/ld-linux-ve.so.1"; in getDynamicLinker()
623 void Linux::AddClangSystemIncludeArgs(const ArgList &DriverArgs, in AddClangSystemIncludeArgs()
632 // GCC_INCLUDE_DIR (private headers) in GCC. Note: the include directory in AddClangSystemIncludeArgs()
649 // Check for configure-time C include directories. in AddClangSystemIncludeArgs()
675 // system GCCs, but is often used with cross-compiling GCCs, and harmless to in AddClangSystemIncludeArgs()
676 // add even when Clang is acting as-if it were a system compiler. in AddClangSystemIncludeArgs()
685 void Linux::addLibStdCxxIncludePaths(const llvm::opt::ArgList &DriverArgs, in addLibStdCxxIncludePaths()
687 // We need a detected GCC installation on Linux to provide libstdc++'s in addLibStdCxxIncludePaths()
688 // headers in odd Linuxish places. in addLibStdCxxIncludePaths()
692 // Detect Debian g++-multiarch-incdir.diff. in addLibStdCxxIncludePaths()
696 ? "i386-linux-gnu" in addLibStdCxxIncludePaths()
709 // Android standalone toolchain has C++ headers in yet another place. in addLibStdCxxIncludePaths()
711 // Freescale SDK C++ headers are directly in <sysroot>/usr/include/c++, in addLibStdCxxIncludePaths()
714 // Cray's gcc installation puts headers under "g++" without a in addLibStdCxxIncludePaths()
726 void Linux::AddCudaIncludeArgs(const ArgList &DriverArgs, in AddCudaIncludeArgs()
728 CudaInstallation->AddCudaIncludeArgs(DriverArgs, CC1Args); in AddCudaIncludeArgs()
731 void Linux::AddHIPIncludeArgs(const ArgList &DriverArgs, in AddHIPIncludeArgs()
733 RocmInstallation->AddHIPIncludeArgs(DriverArgs, CC1Args); in AddHIPIncludeArgs()
736 void Linux::AddHIPRuntimeLibArgs(const ArgList &Args, in AddHIPRuntimeLibArgs()
739 Args.MakeArgString(StringRef("-L") + RocmInstallation->getLibPath())); in AddHIPRuntimeLibArgs()
744 {"-rpath", Args.MakeArgString(RocmInstallation->getLibPath())}); in AddHIPRuntimeLibArgs()
746 CmdArgs.push_back("-lamdhip64"); in AddHIPRuntimeLibArgs()
749 void Linux::AddIAMCUIncludeArgs(const ArgList &DriverArgs, in AddIAMCUIncludeArgs()
752 CC1Args.push_back("-isystem"); in AddIAMCUIncludeArgs()
759 bool Linux::isPIEDefault(const llvm::opt::ArgList &Args) const { in isPIEDefault()
764 bool Linux::IsAArch64OutlineAtomicsDefault(const ArgList &Args) const { in IsAArch64OutlineAtomicsDefault()
765 // Outline atomics for AArch64 are supported by compiler-rt in IsAArch64OutlineAtomicsDefault()
777 bool Linux::IsMathErrnoDefault() const { in IsMathErrnoDefault()
783 SanitizerMask Linux::getSupportedSanitizers() const { in getSupportedSanitizers()
838 void Linux::addProfileRTLibs(const llvm::opt::ArgList &Args, in addProfileRTLibs()
840 // Add linker option -u__llvm_profile_runtime to cause runtime in addProfileRTLibs()
844 Twine("-u", llvm::getInstrProfRuntimeHookVarName()))); in addProfileRTLibs()
848 void Linux::addExtraOpts(llvm::opt::ArgStringList &CmdArgs) const { in addExtraOpts()
853 const char *Linux::getDefaultLinker() const { in getDefaultLinker()