10#include "clang/Config/config.h"
14#include "llvm/Support/Path.h"
26 const char *LinkingOutput)
const {
30 const bool Static = Args.hasArg(options::OPT_static);
31 const bool Shared = Args.hasArg(options::OPT_shared);
32 ArgStringList CmdArgs;
35 Args.ClaimAllArgs(options::OPT_g_Group);
37 Args.ClaimAllArgs(options::OPT_emit_llvm);
40 Args.ClaimAllArgs(options::OPT_w);
43 Args.ClaimAllArgs(options::OPT_pie);
46 Args.ClaimAllArgs(options::OPT_rdynamic);
49 CmdArgs.push_back(Args.MakeArgString(
"--sysroot=" + D.
SysRoot));
51 CmdArgs.push_back(
"--eh-frame-hdr");
53 CmdArgs.push_back(
"-Bstatic");
56 CmdArgs.push_back(
"-shared");
57 CmdArgs.push_back(
"--enable-new-dtags");
60 CmdArgs.push_back(
"-shared");
63 CmdArgs.push_back(
"--no-undefined");
65 if (Triple.isRISCV64()) {
66 CmdArgs.push_back(
"-X");
67 if (Args.hasArg(options::OPT_mno_relax))
68 CmdArgs.push_back(
"--no-relax");
73 CmdArgs.push_back(
"-o");
77 if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles,
86 Args.addAllArgs(CmdArgs, {options::OPT_L, options::OPT_T_Group,
87 options::OPT_s, options::OPT_t});
97 if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs,
100 bool StaticOpenMP = Args.hasArg(options::OPT_static_openmp) && !
Static;
107 Args.ClaimAllArgs(options::OPT_stdlib_EQ);
114 !Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) {
119 if (NeedsSanitizerDeps)
122 CmdArgs.push_back(
"-lgcc");
124 CmdArgs.push_back(
"--push-state");
125 CmdArgs.push_back(
"--as-needed");
126 CmdArgs.push_back(
"-lgcc_s");
127 CmdArgs.push_back(
"--no-as-needed");
128 CmdArgs.push_back(
"--pop-state");
130 CmdArgs.push_back(
"-lroot");
132 CmdArgs.push_back(
"-lgcc");
134 CmdArgs.push_back(
"--push-state");
135 CmdArgs.push_back(
"--as-needed");
136 CmdArgs.push_back(
"-lgcc_s");
137 CmdArgs.push_back(
"--no-as-needed");
138 CmdArgs.push_back(
"--pop-state");
142 Args.claimAllArgs(options::OPT_pthread, options::OPT_pthreads);
144 if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles,
152 const char *Exec = Args.MakeArgString(
getToolChain().GetLinkerPath());
153 C.addCommand(std::make_unique<Command>(JA, *
this,
155 Exec, CmdArgs, Inputs, Output));
173 llvm::opt::ArgStringList &CC1Args)
const {
176 if (DriverArgs.hasArg(options::OPT_nostdinc))
179 if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) {
181 llvm::sys::path::append(Dir,
"include");
185 if (DriverArgs.hasArg(options::OPT_nostdlibinc))
189 StringRef CIncludeDirs(C_INCLUDE_DIRS);
190 if (!CIncludeDirs.empty()) {
192 CIncludeDirs.split(dirs,
":");
193 for (StringRef dir : dirs) {
195 llvm::sys::path::is_absolute(dir) ? StringRef(D.SysRoot) :
"";
202 "/boot/system/non-packaged/develop/headers"));
204 "/boot/system/develop/headers/os"));
206 "/boot/system/develop/headers/os/app"));
208 "/boot/system/develop/headers/os/device"));
210 "/boot/system/develop/headers/os/drivers"));
212 "/boot/system/develop/headers/os/game"));
214 "/boot/system/develop/headers/os/interface"));
216 "/boot/system/develop/headers/os/kernel"));
218 "/boot/system/develop/headers/os/locale"));
220 "/boot/system/develop/headers/os/mail"));
222 "/boot/system/develop/headers/os/media"));
224 "/boot/system/develop/headers/os/midi"));
226 "/boot/system/develop/headers/os/midi2"));
228 "/boot/system/develop/headers/os/net"));
230 "/boot/system/develop/headers/os/opengl"));
232 "/boot/system/develop/headers/os/storage"));
234 "/boot/system/develop/headers/os/support"));
236 "/boot/system/develop/headers/os/translation"));
238 "/boot/system/develop/headers/os/add-ons/graphics"));
240 "/boot/system/develop/headers/os/add-ons/input_server"));
242 "/boot/system/develop/headers/os/add-ons/mail_daemon"));
244 "/boot/system/develop/headers/os/add-ons/registrar"));
246 "/boot/system/develop/headers/os/add-ons/screen_saver"));
248 "/boot/system/develop/headers/os/add-ons/tracker"));
250 "/boot/system/develop/headers/os/be_apps/Deskbar"));
252 "/boot/system/develop/headers/os/be_apps/NetPositive"));
254 "/boot/system/develop/headers/os/be_apps/Tracker"));
256 "/boot/system/develop/headers/3rdparty"));
258 "/boot/system/develop/headers/bsd"));
260 "/boot/system/develop/headers/glibc"));
262 "/boot/system/develop/headers/gnu"));
264 "/boot/system/develop/headers/posix"));
266 "/boot/system/develop/headers/gcc/include"));
268 "/boot/system/develop/headers"));
272 llvm::opt::ArgStringList &CC1Args)
const {
287 Res |= SanitizerKind::Address;
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...
std::string SysRoot
sysroot, if present
bool IsFlangMode() const
Whether the driver should invoke flang for fortran inputs.
bool CCCIsCXX() const
Whether the driver should follow g++ like behavior.
SmallVector< InputInfo, 4 > InputInfoList
The JSON file list parser is used to communicate input to InstallAPI.
static constexpr ResponseFileSupport AtFileCurCP()