11#include "clang/Config/config.h"
13#include "llvm/Support/Path.h"
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;
34 Args.ClaimAllArgs(options::OPT_g_Group);
36 Args.ClaimAllArgs(options::OPT_emit_llvm);
39 Args.ClaimAllArgs(options::OPT_w);
42 Args.ClaimAllArgs(options::OPT_pie);
45 Args.ClaimAllArgs(options::OPT_rdynamic);
48 CmdArgs.push_back(Args.MakeArgString(
"--sysroot=" + D.
SysRoot));
50 CmdArgs.push_back(
"--eh-frame-hdr");
52 CmdArgs.push_back(
"-Bstatic");
55 CmdArgs.push_back(
"-shared");
56 CmdArgs.push_back(
"--enable-new-dtags");
59 CmdArgs.push_back(
"-shared");
62 CmdArgs.push_back(
"--no-undefined");
64 if (Arch == llvm::Triple::riscv64)
65 CmdArgs.push_back(
"-X");
69 CmdArgs.push_back(
"-o");
73 if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles,
82 Args.addAllArgs(CmdArgs, {options::OPT_L, options::OPT_T_Group,
83 options::OPT_s, options::OPT_t, options::OPT_r});
87 assert(!Inputs.empty() &&
"Must have at least one input.");
89 auto Input = llvm::find_if(
91 if (Input == Inputs.end())
94 Input = Inputs.begin();
103 if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs,
106 bool StaticOpenMP = Args.hasArg(options::OPT_static_openmp) && !
Static;
113 Args.ClaimAllArgs(options::OPT_stdlib_EQ);
124 CmdArgs.push_back(
"-lgcc");
126 CmdArgs.push_back(
"--push-state");
127 CmdArgs.push_back(
"--as-needed");
128 CmdArgs.push_back(
"-lgcc_s");
129 CmdArgs.push_back(
"--no-as-needed");
130 CmdArgs.push_back(
"--pop-state");
132 CmdArgs.push_back(
"-lroot");
134 CmdArgs.push_back(
"-lgcc");
136 CmdArgs.push_back(
"--push-state");
137 CmdArgs.push_back(
"--as-needed");
138 CmdArgs.push_back(
"-lgcc_s");
139 CmdArgs.push_back(
"--no-as-needed");
140 CmdArgs.push_back(
"--pop-state");
144 Args.claimAllArgs(options::OPT_pthread, options::OPT_pthreads);
146 if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles,
154 const char *Exec = Args.MakeArgString(
getToolChain().GetLinkerPath());
155 C.addCommand(std::make_unique<Command>(JA, *
this,
157 Exec, CmdArgs, Inputs, Output));
175 llvm::opt::ArgStringList &CC1Args)
const {
178 if (DriverArgs.hasArg(options::OPT_nostdinc))
181 if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) {
183 llvm::sys::path::append(Dir,
"include");
187 if (DriverArgs.hasArg(options::OPT_nostdlibinc))
191 StringRef CIncludeDirs(C_INCLUDE_DIRS);
192 if (!CIncludeDirs.empty()) {
194 CIncludeDirs.split(dirs,
":");
195 for (StringRef dir : dirs) {
197 llvm::sys::path::is_absolute(dir) ? StringRef(D.
SysRoot) :
"";
204 "/boot/system/non-packaged/develop/headers"));
206 "/boot/system/develop/headers/os"));
208 "/boot/system/develop/headers/os/app"));
210 "/boot/system/develop/headers/os/device"));
212 "/boot/system/develop/headers/os/drivers"));
214 "/boot/system/develop/headers/os/game"));
216 "/boot/system/develop/headers/os/interface"));
218 "/boot/system/develop/headers/os/kernel"));
220 "/boot/system/develop/headers/os/locale"));
222 "/boot/system/develop/headers/os/mail"));
224 "/boot/system/develop/headers/os/media"));
226 "/boot/system/develop/headers/os/midi"));
228 "/boot/system/develop/headers/os/midi2"));
230 "/boot/system/develop/headers/os/net"));
232 "/boot/system/develop/headers/os/opengl"));
234 "/boot/system/develop/headers/os/storage"));
236 "/boot/system/develop/headers/os/support"));
238 "/boot/system/develop/headers/os/translation"));
240 "/boot/system/develop/headers/os/add-ons/graphics"));
242 "/boot/system/develop/headers/os/add-ons/input_server"));
244 "/boot/system/develop/headers/os/add-ons/mail_daemon"));
246 "/boot/system/develop/headers/os/add-ons/registrar"));
248 "/boot/system/develop/headers/os/add-ons/screen_saver"));
250 "/boot/system/develop/headers/os/add-ons/tracker"));
252 "/boot/system/develop/headers/os/be_apps/Deskbar"));
254 "/boot/system/develop/headers/os/be_apps/NetPositive"));
256 "/boot/system/develop/headers/os/be_apps/Tracker"));
258 "/boot/system/develop/headers/3rdparty"));
260 "/boot/system/develop/headers/bsd"));
262 "/boot/system/develop/headers/glibc"));
264 "/boot/system/develop/headers/gnu"));
266 "/boot/system/develop/headers/posix"));
268 "/boot/system/develop/headers"));
272 llvm::opt::ArgStringList &CC1Args)
const {
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
LTOKind getLTOMode(bool IsOffload=false) const
Get the specific kind of LTO being performed.
std::string ResourceDir
The path to the compiler resource directory.
bool isUsingLTO(bool IsOffload=false) const
Returns true if we are performing any kind of LTO.
bool IsFlangMode() const
Whether the driver should invoke flang for fortran inputs.
bool CCCIsCXX() const
Whether the driver should follow g++ like behavior.
static constexpr ResponseFileSupport AtFileCurCP()