clang: lib/Driver/ToolChains/Haiku.cpp Source File (original) (raw)
1
2
3
4
5
6
7
8
11#include "clang/Config/config.h"
13#include "llvm/Support/Path.h"
14
18using namespace clang;
20
24 const ArgList &Args,
25 const char *LinkingOutput) const {
29 const bool Static = Args.hasArg(options::OPT_static);
30 const bool Shared = Args.hasArg(options::OPT_shared);
31 ArgStringList CmdArgs;
32
33
34 Args.ClaimAllArgs(options::OPT_g_Group);
35
36 Args.ClaimAllArgs(options::OPT_emit_llvm);
37
38
39 Args.ClaimAllArgs(options::OPT_w);
40
41
42 Args.ClaimAllArgs(options::OPT_pie);
43
44
45 Args.ClaimAllArgs(options::OPT_rdynamic);
46
47 if (.SysRoot.empty())
48 CmdArgs.push_back(Args.MakeArgString("--sysroot=" + D.SysRoot));
49
50 CmdArgs.push_back("--eh-frame-hdr");
52 CmdArgs.push_back("-Bstatic");
53 } else {
54 if (Shared)
55 CmdArgs.push_back("-shared");
56 CmdArgs.push_back("--enable-new-dtags");
57 }
58
59 CmdArgs.push_back("-shared");
60
61 if (!Shared)
62 CmdArgs.push_back("--no-undefined");
63
64 if (Triple.isRISCV64()) {
65 CmdArgs.push_back("-X");
66 if (Args.hasArg(options::OPT_mno_relax))
67 CmdArgs.push_back("--no-relax");
68 }
69
72 CmdArgs.push_back("-o");
74 }
75
76 if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles,
77 options::OPT_r)) {
80 if (!Shared)
82 CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("init_term_dyn.o")));
83 }
84
85 Args.addAllArgs(CmdArgs, {options::OPT_L, options::OPT_T_Group,
86 options::OPT_s, options::OPT_t});
88
89 if (D.isUsingLTO()) {
90 assert(!Inputs.empty() && "Must have at least one input.");
91
92 auto Input = llvm::find_if(
94 if (Input == Inputs.end())
95
96
97 Input = Inputs.begin();
98
101 }
102
105
106 if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs,
107 options::OPT_r)) {
108
109 bool StaticOpenMP = Args.hasArg(options::OPT_static_openmp) && ;
111
114
115
116 Args.ClaimAllArgs(options::OPT_stdlib_EQ);
117
118
119
120
121
122 if (D.IsFlangMode() &&
123 !Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) {
126 }
127
128 CmdArgs.push_back("-lgcc");
129
130 CmdArgs.push_back("--push-state");
131 CmdArgs.push_back("--as-needed");
132 CmdArgs.push_back("-lgcc_s");
133 CmdArgs.push_back("--no-as-needed");
134 CmdArgs.push_back("--pop-state");
135
136 CmdArgs.push_back("-lroot");
137
138 CmdArgs.push_back("-lgcc");
139
140 CmdArgs.push_back("--push-state");
141 CmdArgs.push_back("--as-needed");
142 CmdArgs.push_back("-lgcc_s");
143 CmdArgs.push_back("--no-as-needed");
144 CmdArgs.push_back("--pop-state");
145 }
146
147
148 Args.claimAllArgs(options::OPT_pthread, options::OPT_pthreads);
149
150 if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles,
151 options::OPT_r)) {
154 }
155
157
158 const char *Exec = Args.MakeArgString(getToolChain().GetLinkerPath());
159 C.addCommand(std::make_unique(JA, *this,
161 Exec, CmdArgs, Inputs, Output));
162}
163
164
165
168
170
173
176}
177
179 llvm::opt::ArgStringList &CC1Args) const {
181
182 if (DriverArgs.hasArg(options::OPT_nostdinc))
183 return;
184
185 if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) {
187 llvm::sys::path::append(Dir, "include");
189 }
190
191 if (DriverArgs.hasArg(options::OPT_nostdlibinc))
192 return;
193
194
195 StringRef CIncludeDirs(C_INCLUDE_DIRS);
196 if (!CIncludeDirs.empty()) {
198 CIncludeDirs.split(dirs, ":");
199 for (StringRef dir : dirs) {
200 StringRef Prefix =
201 llvm::sys::path::is_absolute(dir) ? StringRef(D.SysRoot) : "";
203 }
204 return;
205 }
206
208 "/boot/system/non-packaged/develop/headers"));
210 "/boot/system/develop/headers/os"));
212 "/boot/system/develop/headers/os/app"));
214 "/boot/system/develop/headers/os/device"));
216 "/boot/system/develop/headers/os/drivers"));
218 "/boot/system/develop/headers/os/game"));
220 "/boot/system/develop/headers/os/interface"));
222 "/boot/system/develop/headers/os/kernel"));
224 "/boot/system/develop/headers/os/locale"));
226 "/boot/system/develop/headers/os/mail"));
228 "/boot/system/develop/headers/os/media"));
230 "/boot/system/develop/headers/os/midi"));
232 "/boot/system/develop/headers/os/midi2"));
234 "/boot/system/develop/headers/os/net"));
236 "/boot/system/develop/headers/os/opengl"));
238 "/boot/system/develop/headers/os/storage"));
240 "/boot/system/develop/headers/os/support"));
242 "/boot/system/develop/headers/os/translation"));
244 "/boot/system/develop/headers/os/add-ons/graphics"));
246 "/boot/system/develop/headers/os/add-ons/input_server"));
248 "/boot/system/develop/headers/os/add-ons/mail_daemon"));
250 "/boot/system/develop/headers/os/add-ons/registrar"));
252 "/boot/system/develop/headers/os/add-ons/screen_saver"));
254 "/boot/system/develop/headers/os/add-ons/tracker"));
256 "/boot/system/develop/headers/os/be_apps/Deskbar"));
258 "/boot/system/develop/headers/os/be_apps/NetPositive"));
260 "/boot/system/develop/headers/os/be_apps/Tracker"));
262 "/boot/system/develop/headers/3rdparty"));
264 "/boot/system/develop/headers/bsd"));
266 "/boot/system/develop/headers/glibc"));
268 "/boot/system/develop/headers/gnu"));
270 "/boot/system/develop/headers/posix"));
272 "/boot/system/develop/headers"));
273}
274
276 llvm::opt::ArgStringList &CC1Args) const {
278 concat(getDriver().SysRoot, "/boot/system/develop/headers/c++/v1"));
279}
280
282
Compilation - A set of tasks to perform for a single driver invocation.
Driver - Encapsulate logic for constructing compilation processes from a set of gcc-driver-like comma...
InputInfo - Wrapper for information about an input source.
const char * getFilename() const
The JSON file list parser is used to communicate input to InstallAPI.
static constexpr ResponseFileSupport AtFileCurCP()