15#include "llvm/ADT/SmallString.h"
16#include "llvm/Option/ArgList.h"
17#include "llvm/Support/Path.h"
29 const char *LinkingOutput)
const {
32 ArgStringList CmdArgs;
35 Args.ClaimAllArgs(options::OPT_g_Group);
37 Args.ClaimAllArgs(options::OPT_emit_llvm);
40 Args.ClaimAllArgs(options::OPT_w);
43 CmdArgs.push_back(Args.MakeArgString(
"--sysroot=" + D.
SysRoot));
46 CmdArgs.push_back(
"-Bstatic");
47 CmdArgs.push_back(
"--no-dynamic-linker");
51 CmdArgs.push_back(
"-pie");
52 CmdArgs.push_back(
"-zrelro");
55 CmdArgs.push_back(
"--eh-frame-hdr");
56 CmdArgs.push_back(
"--gc-sections");
59 CmdArgs.push_back(
"-o");
62 assert(Output.
isNothing() &&
"Invalid output.");
65 if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles)) {
70 Args.AddAllArgs(CmdArgs, options::OPT_L);
72 Args.AddAllArgs(CmdArgs,
73 {options::OPT_T_Group, options::OPT_e, options::OPT_s,
74 options::OPT_t, options::OPT_Z_Flag, options::OPT_r});
77 assert(!Inputs.empty() &&
"Must have at least one input.");
86 if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) {
87 CmdArgs.push_back(
"-lc");
88 CmdArgs.push_back(
"-lcompiler_rt");
91 if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles))
95 C.addCommand(std::make_unique<Command>(JA, *
this,
97 Exec, CmdArgs, Inputs, Output));
106 llvm::sys::path::append(
P,
"..",
getTriple().str(),
"lib");
111 llvm::opt::ArgStringList &CC1Args)
const {
113 llvm::sys::path::append(
P,
"..",
getTriple().str(),
"include/c++/v1");
118 ArgStringList &CmdArgs)
const {
119 CmdArgs.push_back(
"-lc++");
120 if (Args.hasArg(options::OPT_fexperimental_library))
121 CmdArgs.push_back(
"-lc++experimental");
122 CmdArgs.push_back(
"-lc++abi");
123 CmdArgs.push_back(
"-lunwind");
135 case llvm::Triple::aarch64:
136 case llvm::Triple::x86_64:
145 Res |= SanitizerKind::SafeStack;
150 return SanitizerKind::SafeStack;
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.
bool isUsingLTO(bool IsOffload=false) const
Returns true if we are performing any kind of LTO.
@ C
Languages that the frontend can parse and compile.
static constexpr ResponseFileSupport AtFileCurCP()