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});
98 if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs,
101 bool StaticOpenMP = Args.hasArg(options::OPT_static_openmp) && !
Static;
108 Args.ClaimAllArgs(options::OPT_stdlib_EQ);
115 !Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) {
120 if (NeedsSanitizerDeps)
123 CmdArgs.push_back(
"-lgcc");
125 CmdArgs.push_back(
"--push-state");
126 CmdArgs.push_back(
"--as-needed");
127 CmdArgs.push_back(
"-lgcc_s");
128 CmdArgs.push_back(
"--no-as-needed");
129 CmdArgs.push_back(
"--pop-state");
131 CmdArgs.push_back(
"-lroot");
133 CmdArgs.push_back(
"-lgcc");
135 CmdArgs.push_back(
"--push-state");
136 CmdArgs.push_back(
"--as-needed");
137 CmdArgs.push_back(
"-lgcc_s");
138 CmdArgs.push_back(
"--no-as-needed");
139 CmdArgs.push_back(
"--pop-state");
143 Args.claimAllArgs(options::OPT_pthread, options::OPT_pthreads);
145 if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles,
153 const char *Exec = Args.MakeArgString(
getToolChain().GetLinkerPath());
154 C.addCommand(std::make_unique<Command>(JA, *
this,
156 Exec, CmdArgs, Inputs, Output));
174 llvm::opt::ArgStringList &CC1Args)
const {
177 if (DriverArgs.hasArg(options::OPT_nostdinc))
180 if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) {
182 llvm::sys::path::append(Dir,
"include");
186 if (DriverArgs.hasArg(options::OPT_nostdlibinc))
190 StringRef CIncludeDirs(C_INCLUDE_DIRS);
191 if (!CIncludeDirs.empty()) {
193 CIncludeDirs.split(dirs,
":");
194 for (StringRef dir : dirs) {
196 llvm::sys::path::is_absolute(dir) ? StringRef(D.SysRoot) :
"";
203 "/boot/system/non-packaged/develop/headers"));
205 "/boot/system/develop/headers/os"));
207 "/boot/system/develop/headers/os/app"));
209 "/boot/system/develop/headers/os/device"));
211 "/boot/system/develop/headers/os/drivers"));
213 "/boot/system/develop/headers/os/game"));
215 "/boot/system/develop/headers/os/interface"));
217 "/boot/system/develop/headers/os/kernel"));
219 "/boot/system/develop/headers/os/locale"));
221 "/boot/system/develop/headers/os/mail"));
223 "/boot/system/develop/headers/os/media"));
225 "/boot/system/develop/headers/os/midi"));
227 "/boot/system/develop/headers/os/midi2"));
229 "/boot/system/develop/headers/os/net"));
231 "/boot/system/develop/headers/os/opengl"));
233 "/boot/system/develop/headers/os/storage"));
235 "/boot/system/develop/headers/os/support"));
237 "/boot/system/develop/headers/os/translation"));
239 "/boot/system/develop/headers/os/add-ons/graphics"));
241 "/boot/system/develop/headers/os/add-ons/input_server"));
243 "/boot/system/develop/headers/os/add-ons/mail_daemon"));
245 "/boot/system/develop/headers/os/add-ons/registrar"));
247 "/boot/system/develop/headers/os/add-ons/screen_saver"));
249 "/boot/system/develop/headers/os/add-ons/tracker"));
251 "/boot/system/develop/headers/os/be_apps/Deskbar"));
253 "/boot/system/develop/headers/os/be_apps/NetPositive"));
255 "/boot/system/develop/headers/os/be_apps/Tracker"));
257 "/boot/system/develop/headers/3rdparty"));
259 "/boot/system/develop/headers/bsd"));
261 "/boot/system/develop/headers/glibc"));
263 "/boot/system/develop/headers/gnu"));
265 "/boot/system/develop/headers/posix"));
267 "/boot/system/develop/headers/gcc/include"));
269 "/boot/system/develop/headers"));
273 llvm::opt::ArgStringList &CC1Args)
const {
285 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 isUsingLTO() const
Returns true if we are performing any kind of LTO.
bool IsFlangMode() const
Whether the driver should invoke flang for fortran inputs.
LTOKind getLTOMode() const
Get the specific kind of LTO being performed.
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()