10#include "clang/Config/config.h"
14#include "llvm/Support/Path.h"
15#include "llvm/Support/VirtualFileSystem.h"
31 const llvm::Triple &TargetTriple,
32 StringRef SysRoot)
const {
33 switch (TargetTriple.getArch()) {
37 case llvm::Triple::x86:
42 if (
D.getVFS().exists(SysRoot +
"/lib/i386-gnu"))
46 case llvm::Triple::x86_64:
52 return TargetTriple.str();
55static StringRef
getOSLibDir(
const llvm::Triple &Triple,
const ArgList &Args) {
66 if (Triple.getArch() == llvm::Triple::x86)
69 return Triple.isArch32Bit() ?
"lib" :
"lib64";
75 StringRef TripleStr =
T.str();
76 StringRef DebianMultiarch =
77 T.getArch() == llvm::Triple::x86 ?
"i386-gnu" : TripleStr;
78 return DebianMultiarch;
96 const std::string OSLibDir = std::string(
getOSLibDir(Triple, Args));
99#ifdef ENABLE_LINKER_BUILD_ID
110 if (StringRef(
D.Dir).starts_with(SysRoot)) {
111 addPathIfExists(
D,
D.Dir +
"/../lib/" + MultiarchTriple, Paths);
112 addPathIfExists(
D,
D.Dir +
"/../" + OSLibDir, Paths);
115 addPathIfExists(
D, SysRoot +
"/lib/" + MultiarchTriple, Paths);
116 addPathIfExists(
D, SysRoot +
"/lib/../" + OSLibDir, Paths);
118 addPathIfExists(
D, SysRoot +
"/usr/lib/" + MultiarchTriple, Paths);
119 addPathIfExists(
D, SysRoot +
"/usr/lib/../" + OSLibDir, Paths);
128 if (StringRef(
D.Dir).starts_with(SysRoot))
129 addPathIfExists(
D,
D.Dir +
"/../lib", Paths);
131 addPathIfExists(
D, SysRoot +
"/lib", Paths);
132 addPathIfExists(
D, SysRoot +
"/usr/lib", Paths);
145 case llvm::Triple::x86:
147 case llvm::Triple::x86_64:
148 return "/lib/ld-x86-64.so.1";
153 llvm_unreachable(
"unsupported architecture");
157 ArgStringList &CC1Args)
const {
161 if (DriverArgs.hasArg(clang::driver::options::OPT_nostdinc))
164 if (!DriverArgs.hasArg(options::OPT_nostdlibinc))
167 if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) {
169 llvm::sys::path::append(
P,
"include");
173 if (DriverArgs.hasArg(options::OPT_nostdlibinc))
177 StringRef CIncludeDirs(C_INCLUDE_DIRS);
178 if (CIncludeDirs !=
"") {
180 CIncludeDirs.split(Dirs,
":");
181 for (StringRef Dir : Dirs) {
183 llvm::sys::path::is_absolute(Dir) ?
"" : StringRef(SysRoot);
197 if (!MultiarchIncludeDir.empty() &&
198 D.getVFS().exists(SysRoot +
"/usr/include/" + MultiarchIncludeDir))
200 SysRoot +
"/usr/include/" + MultiarchIncludeDir);
211 llvm::opt::ArgStringList &CC1Args)
const {
222 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...
The JSON file list parser is used to communicate input to InstallAPI.
const FunctionProtoType * T