16 #include "llvm/ADT/SmallString.h" 17 #include "llvm/Option/ArgList.h" 18 #include "llvm/Support/Path.h" 23 using namespace clang;
30 const char *LinkingOutput)
const {
33 ArgStringList CmdArgs;
36 Args.ClaimAllArgs(options::OPT_g_Group);
38 Args.ClaimAllArgs(options::OPT_emit_llvm);
41 Args.ClaimAllArgs(options::OPT_w);
44 CmdArgs.push_back(Args.MakeArgString(
"--sysroot=" + D.
SysRoot));
47 CmdArgs.push_back(
"-Bstatic");
48 CmdArgs.push_back(
"--no-dynamic-linker");
52 CmdArgs.push_back(
"-pie");
53 CmdArgs.push_back(
"-zrelro");
56 CmdArgs.push_back(
"--eh-frame-hdr");
57 CmdArgs.push_back(
"--gc-sections");
60 CmdArgs.push_back(
"-o");
63 assert(Output.
isNothing() &&
"Invalid output.");
66 if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles)) {
67 CmdArgs.push_back(Args.MakeArgString(ToolChain.
GetFilePath(
"crt0.o")));
68 CmdArgs.push_back(Args.MakeArgString(ToolChain.
GetFilePath(
"crtbegin.o")));
71 Args.AddAllArgs(CmdArgs, options::OPT_L);
73 Args.AddAllArgs(CmdArgs,
74 {options::OPT_T_Group, options::OPT_e, options::OPT_s,
75 options::OPT_t, options::OPT_Z_Flag, options::OPT_r});
78 assert(!Inputs.empty() &&
"Must have at least one input.");
87 if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) {
88 CmdArgs.push_back(
"-lc");
89 CmdArgs.push_back(
"-lcompiler_rt");
92 if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles))
93 CmdArgs.push_back(Args.MakeArgString(ToolChain.
GetFilePath(
"crtend.o")));
95 const char *Exec = Args.MakeArgString(ToolChain.
GetLinkerPath());
96 C.
addCommand(llvm::make_unique<Command>(JA, *
this, Exec, CmdArgs, Inputs));
101 CloudABI::CloudABI(
const Driver &D,
const llvm::Triple &Triple,
105 llvm::sys::path::append(P,
"..",
getTriple().
str(),
"lib");
110 llvm::opt::ArgStringList &CC1Args)
const {
112 llvm::sys::path::append(P,
"..",
getTriple().
str(),
"include/c++/v1");
117 ArgStringList &CmdArgs)
const {
118 CmdArgs.push_back(
"-lc++");
119 CmdArgs.push_back(
"-lc++abi");
120 CmdArgs.push_back(
"-lunwind");
132 case llvm::Triple::aarch64:
133 case llvm::Triple::x86_64:
142 Res |= SanitizerKind::SafeStack;
147 return SanitizerKind::SafeStack;
bool isUsingLTO() const
Returns true if we are performing any kind of LTO.
LTOKind getLTOMode() const
Get the specific kind of LTO being performed.
Driver - Encapsulate logic for constructing compilation processes from a set of gcc-driver-like comma...
void addCommand(std::unique_ptr< Command > C)
Dataflow Directional Tag Classes.
std::string SysRoot
sysroot, if present
Compilation - A set of tasks to perform for a single driver invocation.