;
32 const char*LinkingOutput)
const{
36ArgStringList CmdArgs;
43 casellvm::Triple::x86:
44CmdArgs.push_back(
"--32");
46 casellvm::Triple::arm:
47 casellvm::Triple::armeb:
48 casellvm::Triple::thumb:
49 casellvm::Triple::thumbeb: {
50StringRef MArch, MCPU;
53CmdArgs.push_back(Args.MakeArgString(
"-mcpu="+ Arch));
57 casellvm::Triple::mips:
58 casellvm::Triple::mipsel:
59 casellvm::Triple::mips64:
60 casellvm::Triple::mips64el: {
65CmdArgs.push_back(
"-march");
66CmdArgs.push_back(CPUName.data());
68CmdArgs.push_back(
"-mabi");
71 if(Triple.isLittleEndian())
72CmdArgs.push_back(
"-EL");
74CmdArgs.push_back(
"-EB");
80 casellvm::Triple::sparc: {
81CmdArgs.push_back(
"-32");
88 casellvm::Triple::sparcv9: {
89CmdArgs.push_back(
"-64");
100Args.AddAllArgValues(CmdArgs, options::OPT_Wa_COMMA, options::OPT_Xassembler);
102CmdArgs.push_back(
"-o");
105 for(
const auto&II : Inputs)
106CmdArgs.push_back(II.getFilename());
109 C.addCommand(std::make_unique<Command>(JA, *
this,
111Exec, CmdArgs, Inputs, Output));
118 const char*LinkingOutput)
const{
119 const auto&
ToolChain=
static_cast<const NetBSD&
>(getToolChain());
123 const bool Static= Args.hasArg(options::OPT_static);
124 const boolShared = Args.hasArg(options::OPT_shared);
125 const boolPie = Args.hasArg(options::OPT_pie);
126ArgStringList CmdArgs;
128 if(!
D.SysRoot.empty())
129CmdArgs.push_back(Args.MakeArgString(
"--sysroot="+
D.SysRoot));
131CmdArgs.push_back(
"--eh-frame-hdr");
133CmdArgs.push_back(
"-Bstatic");
135Args.AddAllArgs(CmdArgs, options::OPT_pie);
136CmdArgs.push_back(
"--no-dynamic-linker");
139 if(Args.hasArg(options::OPT_rdynamic))
140CmdArgs.push_back(
"-export-dynamic");
142CmdArgs.push_back(
"-shared");
143}
else if(!Args.hasArg(options::OPT_r)) {
144Args.AddAllArgs(CmdArgs, options::OPT_pie);
145CmdArgs.push_back(
"-dynamic-linker");
146CmdArgs.push_back(
"/libexec/ld.elf_so");
153 casellvm::Triple::x86:
154CmdArgs.push_back(
"-m");
155CmdArgs.push_back(
"elf_i386");
157 casellvm::Triple::arm:
158 casellvm::Triple::thumb:
159CmdArgs.push_back(
"-m");
160 switch(Triple.getEnvironment()) {
161 casellvm::Triple::EABI:
162 casellvm::Triple::GNUEABI:
163CmdArgs.push_back(
"armelf_nbsd_eabi");
165 casellvm::Triple::EABIHF:
166 casellvm::Triple::GNUEABIHF:
167CmdArgs.push_back(
"armelf_nbsd_eabihf");
170CmdArgs.push_back(
"armelf_nbsd");
174 casellvm::Triple::armeb:
175 casellvm::Triple::thumbeb:
177CmdArgs.push_back(
"-m");
178 switch(Triple.getEnvironment()) {
179 casellvm::Triple::EABI:
180 casellvm::Triple::GNUEABI:
181CmdArgs.push_back(
"armelfb_nbsd_eabi");
183 casellvm::Triple::EABIHF:
184 casellvm::Triple::GNUEABIHF:
185CmdArgs.push_back(
"armelfb_nbsd_eabihf");
188CmdArgs.push_back(
"armelfb_nbsd");
192 casellvm::Triple::mips64:
193 casellvm::Triple::mips64el:
195CmdArgs.push_back(
"-m");
196 if(Arch == llvm::Triple::mips64)
197CmdArgs.push_back(
"elf32btsmip");
199CmdArgs.push_back(
"elf32ltsmip");
201CmdArgs.push_back(
"-m");
202 if(Arch == llvm::Triple::mips64)
203CmdArgs.push_back(
"elf64btsmip");
205CmdArgs.push_back(
"elf64ltsmip");
208 casellvm::Triple::ppc:
209CmdArgs.push_back(
"-m");
210CmdArgs.push_back(
"elf32ppc_nbsd");
213 casellvm::Triple::ppc64:
214 casellvm::Triple::ppc64le:
215CmdArgs.push_back(
"-m");
216CmdArgs.push_back(
"elf64ppc");
219 casellvm::Triple::riscv32:
220CmdArgs.push_back(
"-m");
221CmdArgs.push_back(
"elf32lriscv");
224 casellvm::Triple::riscv64:
225CmdArgs.push_back(
"-m");
226CmdArgs.push_back(
"elf64lriscv");
229 casellvm::Triple::sparc:
230CmdArgs.push_back(
"-m");
231CmdArgs.push_back(
"elf32_sparc");
234 casellvm::Triple::sparcv9:
235CmdArgs.push_back(
"-m");
236CmdArgs.push_back(
"elf64_sparc");
243 if(Triple.isRISCV()) {
244CmdArgs.push_back(
"-X");
245 if(Args.hasArg(options::OPT_mno_relax))
246CmdArgs.push_back(
"--no-relax");
251CmdArgs.push_back(
"-o");
255 if(!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles,
257 const char*crt0 =
nullptr;
258 const char*crtbegin =
nullptr;
263crtbegin =
"crtbeginS.o";
265crtbegin =
"crtbegin.o";
273Args.addAllArgs(CmdArgs, {options::OPT_L, options::OPT_T_Group,
274options::OPT_s, options::OPT_t});
283CmdArgs.push_back(
"-rpath");
287 booluseLibgcc =
true;
289 casellvm::Triple::aarch64:
290 casellvm::Triple::aarch64_be:
291 casellvm::Triple::arm:
292 casellvm::Triple::armeb:
293 casellvm::Triple::thumb:
294 casellvm::Triple::thumbeb:
295 casellvm::Triple::ppc:
296 casellvm::Triple::ppc64:
297 casellvm::Triple::ppc64le:
298 casellvm::Triple::riscv32:
299 casellvm::Triple::riscv64:
300 casellvm::Triple::sparc:
301 casellvm::Triple::sparcv9:
302 casellvm::Triple::x86:
303 casellvm::Triple::x86_64:
310 if(!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs,
313 boolStaticOpenMP = Args.hasArg(options::OPT_static_openmp) && !
Static;
316 if(
D.CCCIsCXX()) {
319CmdArgs.push_back(
"-lm");
323Args.ClaimAllArgs(options::OPT_stdlib_EQ);
329 if(
D.IsFlangMode() &&
330!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) {
333CmdArgs.push_back(
"-lm");
336 if(NeedsSanitizerDeps)
340 if(Args.hasArg(options::OPT_pthread))
341CmdArgs.push_back(
"-lpthread");
342CmdArgs.push_back(
"-lc");
349CmdArgs.push_back(
"-lgcc_eh");
350CmdArgs.push_back(
"-lc");
351CmdArgs.push_back(
"-lgcc");
353CmdArgs.push_back(
"-lgcc");
354CmdArgs.push_back(
"--as-needed");
355CmdArgs.push_back(
"-lgcc_s");
356CmdArgs.push_back(
"--no-as-needed");
361 if(!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles,
363 const char*crtend =
nullptr;
365crtend =
"crtendS.o";
367crtend =
"crtend.o";
376 C.addCommand(std::make_unique<Command>(JA, *
this,
378Exec, CmdArgs, Inputs, Output));
385 if(!Args.hasArg(options::OPT_nostdlib)) {
391 switch(Triple.getArch()) {
392 casellvm::Triple::x86:
395 casellvm::Triple::arm:
396 casellvm::Triple::armeb:
397 casellvm::Triple::thumb:
398 casellvm::Triple::thumbeb:
399 switch(Triple.getEnvironment()) {
400 casellvm::Triple::EABI:
401 casellvm::Triple::GNUEABI:
404 casellvm::Triple::EABIHF:
405 casellvm::Triple::GNUEABIHF:
413 casellvm::Triple::mips64:
414 casellvm::Triple::mips64el:
420 casellvm::Triple::ppc:
423 casellvm::Triple::sparc:
442 casellvm::Triple::aarch64:
443 casellvm::Triple::aarch64_be:
444 casellvm::Triple::arm:
445 casellvm::Triple::armeb:
446 casellvm::Triple::thumb:
447 casellvm::Triple::thumbeb:
448 casellvm::Triple::ppc:
449 casellvm::Triple::ppc64:
450 casellvm::Triple::ppc64le:
451 casellvm::Triple::riscv32:
452 casellvm::Triple::riscv64:
453 casellvm::Triple::sparc:
454 casellvm::Triple::sparcv9:
455 casellvm::Triple::x86:
456 casellvm::Triple::x86_64:
465 constllvm::opt::ArgList &DriverArgs,
466llvm::opt::ArgStringList &CC1Args)
const{
469 if(DriverArgs.hasArg(clang::driver::options::OPT_nostdinc))
472 if(!DriverArgs.hasArg(options::OPT_nobuiltininc)) {
474llvm::sys::path::append(Dir,
"include");
478 if(DriverArgs.hasArg(options::OPT_nostdlibinc))
482StringRef CIncludeDirs(C_INCLUDE_DIRS);
483 if(CIncludeDirs !=
"") {
485CIncludeDirs.split(dirs,
":");
486 for(StringRef dir : dirs) {
488llvm::sys::path::is_absolute(dir) ? StringRef(
D.SysRoot) :
"";
495 concat(
D.SysRoot,
"/usr/include"));
499llvm::opt::ArgStringList &CC1Args)
const{
500 conststd::string Candidates[] = {
509 for(
const auto&IncludePath : Candidates) {
510 if(!
getVFS().exists(IncludePath +
"/__config"))
520llvm::opt::ArgStringList &CC1Args)
const{
522DriverArgs, CC1Args);
527llvm::Triple::ArchType TArch =
getTriple().getArch();
528 if(TArch == llvm::Triple::arm || TArch == llvm::Triple::armeb ||
529TArch == llvm::Triple::thumb || TArch == llvm::Triple::thumbeb)
530 returnllvm::ExceptionHandling::DwarfCFI;
531 returnllvm::ExceptionHandling::None;
535 const boolIsX86 =
getTriple().getArch() == llvm::Triple::x86;
536 const boolIsX86_64 =
getTriple().getArch() == llvm::Triple::x86_64;
538 if(IsX86 || IsX86_64) {
539Res |= SanitizerKind::Address;
540Res |= SanitizerKind::PointerCompare;
541Res |= SanitizerKind::PointerSubtract;
542Res |= SanitizerKind::Leak;
543Res |= SanitizerKind::SafeStack;
544Res |= SanitizerKind::Scudo;
545Res |= SanitizerKind::Vptr;
548Res |= SanitizerKind::DataFlow;
549Res |= SanitizerKind::Fuzzer;
550Res |= SanitizerKind::FuzzerNoLink;
551Res |= SanitizerKind::HWAddress;
552Res |= SanitizerKind::KernelAddress;
553Res |= SanitizerKind::KernelHWAddress;
554Res |= SanitizerKind::KernelMemory;
555Res |= SanitizerKind::Memory;
556Res |= SanitizerKind::Thread;
562ArgStringList &CC1Args,
566CC1Args.push_back(
"-D_REENTRANT");
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...
InputInfo - Wrapper for information about an input source.
const char * getFilename() const
bool hasAnySanitizer() const
bool needsSharedRt() const
The JSON file list parser is used to communicate input to InstallAPI.
static constexpr ResponseFileSupport AtFileCurCP()
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4