clang: lib/Driver/ToolChains/Hurd.cpp Source File (original) (raw)
1
2
3
4
5
6
7
8
11#include "clang/Config/config.h"
14#include "llvm/Support/Path.h"
15#include "llvm/Support/VirtualFileSystem.h"
16
19using namespace clang;
21
23
24
25
26
27
28
29
31 const llvm::Triple &TargetTriple,
32 StringRef SysRoot) const {
33 switch (TargetTriple.getArch()) {
34 default:
35 break;
36
37 case llvm::Triple::x86:
38
39
40
41
42 if (D.getVFS().exists(SysRoot + "/lib/i386-gnu"))
43 return "i386-gnu";
44 break;
45
46 case llvm::Triple::x86_64:
47 return "x86_64-gnu";
48 }
49
50
51
52 return TargetTriple.str();
53}
54
55static StringRef getOSLibDir(const llvm::Triple &Triple, const ArgList &Args) {
56
57
58
59
60
61
62
63
64
65
66 if (Triple.getArch() == llvm::Triple::x86)
67 return "lib32";
68
69 return Triple.isArch32Bit() ? "lib" : "lib64";
70}
71
72Hurd::Hurd(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
79
81
82
83
84
85
86
88
89 const std::string OSLibDir = std::string(getOSLibDir(Triple, Args));
90 const std::string MultiarchTriple = getMultiarchTriple(D, Triple, SysRoot);
91
92#ifdef ENABLE_LINKER_BUILD_ID
93 ExtraOpts.push_back("--build-id");
94#endif
95
97
98
99
100
101
102
103 if (StringRef(D.Dir).starts_with(SysRoot)) {
104 addPathIfExists(D, D.Dir + "/../lib/" + MultiarchTriple, Paths);
105 addPathIfExists(D, D.Dir + "/../" + OSLibDir, Paths);
106 }
107
108 addPathIfExists(D, SysRoot + "/lib/" + MultiarchTriple, Paths);
109 addPathIfExists(D, SysRoot + "/lib/../" + OSLibDir, Paths);
110
111 addPathIfExists(D, SysRoot + "/usr/lib/" + MultiarchTriple, Paths);
112 addPathIfExists(D, SysRoot + "/usr/lib/../" + OSLibDir, Paths);
113
115
116
117
118
119
120
121 if (StringRef(D.Dir).starts_with(SysRoot))
122 addPathIfExists(D, D.Dir + "/../lib", Paths);
123
124 addPathIfExists(D, SysRoot + "/lib", Paths);
125 addPathIfExists(D, SysRoot + "/usr/lib", Paths);
126}
127
129
131
134}
135
138 case llvm::Triple::x86:
139 return "/lib/ld.so";
140 case llvm::Triple::x86_64:
141 return "/lib/ld-x86-64.so.1";
142 default:
143 break;
144 }
145
146 llvm_unreachable("unsupported architecture");
147}
148
150 ArgStringList &CC1Args) const {
153
154 if (DriverArgs.hasArg(clang::driver::options::OPT_nostdinc))
155 return;
156
157 if (!DriverArgs.hasArg(options::OPT_nostdlibinc))
158 addSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/local/include");
159
160 if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) {
162 llvm::sys::path::append(P, "include");
164 }
165
166 if (DriverArgs.hasArg(options::OPT_nostdlibinc))
167 return;
168
169
170 StringRef CIncludeDirs(C_INCLUDE_DIRS);
171 if (CIncludeDirs != "") {
173 CIncludeDirs.split(Dirs, ":");
174 for (StringRef Dir : Dirs) {
175 StringRef Prefix =
176 llvm::sys::path::is_absolute(Dir) ? "" : StringRef(SysRoot);
178 }
179 return;
180 }
181
182
183
184
186
187
188
190 if (!MultiarchIncludeDir.empty() &&
191 D.getVFS().exists(SysRoot + "/usr/include/" + MultiarchIncludeDir))
193 SysRoot + "/usr/include/" + MultiarchIncludeDir);
194
195
196
197
199
201}
202
204 llvm::opt::ArgStringList &CC1Args) const {
205
206
208 return;
209
211 StringRef DebianMultiarch =
213 : TripleStr;
214
216}
217
219 for (const auto &Opt : ExtraOpts)
220 CmdArgs.push_back(Opt.c_str());
221}
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.