11#include "clang/Config/config.h"
16#include "llvm/Option/ArgList.h"
17#include "llvm/Support/Path.h"
27 const llvm::Triple &TargetTriple,
28 StringRef SysRoot)
const {
29 switch (TargetTriple.getArch()) {
31 return TargetTriple.str();
32 case llvm::Triple::x86_64:
33 return "x86_64-managarm-" + TargetTriple.getEnvironmentName().str();
34 case llvm::Triple::aarch64:
35 return "aarch64-managarm-" + TargetTriple.getEnvironmentName().str();
36 case llvm::Triple::riscv64:
37 return "riscv64-managarm-" + TargetTriple.getEnvironmentName().str();
41static StringRef
getOSLibDir(
const llvm::Triple &Triple,
const ArgList &Args) {
51 if (Triple.getArch() == llvm::Triple::x86 || Triple.isPPC32() ||
52 Triple.getArch() == llvm::Triple::sparc)
55 if (Triple.getArch() == llvm::Triple::x86_64 && Triple.isX32())
58 if (Triple.getArch() == llvm::Triple::riscv32)
61 return Triple.isArch32Bit() ?
"lib" :
"lib64";
76#ifdef ENABLE_LINKER_BUILD_ID
87 const std::string OSLibDir = std::string(
getOSLibDir(Triple, Args));
92 addPathIfExists(D,
concat(SysRoot,
"/lib", MultiarchTriple), Paths);
93 addPathIfExists(D,
concat(SysRoot,
"/lib/..", OSLibDir), Paths);
94 addPathIfExists(D,
concat(SysRoot,
"/usr/lib", MultiarchTriple), Paths);
95 addPathIfExists(D,
concat(SysRoot,
"/usr", OSLibDir), Paths);
99 addPathIfExists(D,
concat(SysRoot,
"/lib"), Paths);
100 addPathIfExists(D,
concat(SysRoot,
"/usr/lib"), Paths);
116 return std::string();
121 case llvm::Triple::aarch64:
122 return "/lib/aarch64-managarm/ld.so";
123 case llvm::Triple::riscv64: {
125 return (
"/lib/riscv64-managarm/ld-riscv64-" + ABIName +
".so").str();
127 case llvm::Triple::x86_64:
128 return "/lib/x86_64-managarm/ld.so";
130 llvm_unreachable(
"unsupported architecture");
135 ArgStringList &CC1Args)
const {
139 if (DriverArgs.hasArg(clang::driver::options::OPT_nostdinc))
142 if (!DriverArgs.hasArg(options::OPT_nostdlibinc))
147 if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) {
149 llvm::sys::path::append(ResourceDirInclude,
"include");
153 if (DriverArgs.hasArg(options::OPT_nostdlibinc))
160 StringRef CIncludeDirs(C_INCLUDE_DIRS);
161 if (CIncludeDirs !=
"") {
163 CIncludeDirs.split(dirs,
":");
164 for (StringRef dir : dirs) {
166 llvm::sys::path::is_absolute(dir) ? StringRef(SysRoot) :
"";
175 if (!MultiarchIncludeDir.empty())
178 concat(SysRoot,
"/usr/include", MultiarchIncludeDir));
189 const llvm::opt::ArgList &DriverArgs,
190 llvm::opt::ArgStringList &CC1Args)
const {
201 const bool IsX86_64 =
getTriple().getArch() == llvm::Triple::x86_64;
203 Res |= SanitizerKind::PointerCompare;
204 Res |= SanitizerKind::PointerSubtract;
205 Res |= SanitizerKind::KernelAddress;
206 Res |= SanitizerKind::Vptr;
208 Res |= SanitizerKind::KernelMemory;
214 CmdArgs.push_back(Opt.c_str());
static StringRef getOSLibDir(const llvm::Triple &Triple, const ArgList &Args)
Driver - Encapsulate logic for constructing compilation processes from a set of gcc-driver-like comma...
std::string SysRoot
sysroot, if present
The JSON file list parser is used to communicate input to InstallAPI.