Lines Matching +full:debian +full:- +full:arm64
1 //===--- Gnu.cpp - Gnu Tool and ToolChain Implementations -------*- C++ -*-===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
59 StringRef CPUArg(A->getValue()); in normalizeCPUNamesForAssembler()
61 CmdArgs.push_back("-mcpu=cortex-a15"); in normalizeCPUNamesForAssembler()
63 CmdArgs.push_back("-mcpu=cortex-a57"); in normalizeCPUNamesForAssembler()
78 if (forwardToGCC(A->getOption())) { in ConstructJob()
83 A->claim(); in ConstructJob()
85 A->render(Args, CmdArgs); in ConstructJob()
93 CmdArgs.push_back("-arch"); in ConstructJob()
109 CmdArgs.push_back("-m32"); in ConstructJob()
114 CmdArgs.push_back("-m64"); in ConstructJob()
117 CmdArgs.push_back("-EL"); in ConstructJob()
123 CmdArgs.push_back("-o"); in ConstructJob()
126 CmdArgs.push_back("-fsyntax-only"); in ConstructJob()
131 // Only pass -x if gcc will understand it; otherwise hope gcc in ConstructJob()
135 // like '-x foobar a.c' which will treat a.c like a linker input. in ConstructJob()
138 // inputs into '-Wl,' options? in ConstructJob()
151 CmdArgs.push_back("-x"); in ConstructJob()
162 CmdArgs.push_back("-lstdc++"); in ConstructJob()
188 CmdArgs.push_back("-E"); in RenderExtraToolArgs()
196 // If -flto, etc. are present then make sure not to force assembly output. in RenderExtraToolArgs()
201 CmdArgs.push_back("-c"); in RenderExtraToolArgs()
206 CmdArgs.push_back("-c"); in RenderExtraToolArgs()
209 CmdArgs.push_back("-S"); in RenderExtraToolArgs()
212 CmdArgs.push_back("-fsyntax-only"); in RenderExtraToolArgs()
319 // Silence warning for "clang -g foo.o -o foo" in ConstructJob()
321 // and "clang -emit-llvm foo.o -o foo" in ConstructJob()
323 // and for "clang -w foo.o -o foo". Other warning options are already in ConstructJob()
326 // Silence warnings when linking C code with a C++ '-stdlib' argument. in ConstructJob()
329 // ar tool command "llvm-ar <options> <output_file> <input_files>". in ConstructJob()
384 // Silence warning for "clang -g foo.o -o foo" in ConstructJob()
386 // and "clang -emit-llvm foo.o -o foo" in ConstructJob()
388 // and for "clang -w foo.o -o foo". Other warning options are already in ConstructJob()
393 CmdArgs.push_back(Args.MakeArgString("--sysroot=" + D.SysRoot)); in ConstructJob()
396 CmdArgs.push_back("-s"); in ConstructJob()
402 CmdArgs.push_back(IsBigEndian ? "-EB" : "-EL"); in ConstructJob()
404 CmdArgs.push_back(Arch == llvm::Triple::aarch64_be ? "-EB" : "-EL"); in ConstructJob()
407 // Most Android ARM64 targets should enable the linker fix for erratum in ConstructJob()
408 // 843419. Only non-Cortex-A53 devices are allowed to skip this flag. in ConstructJob()
411 if (CPU.empty() || CPU == "generic" || CPU == "cortex-a53") in ConstructJob()
412 CmdArgs.push_back("--fix-cortex-a53-843419"); in ConstructJob()
417 CmdArgs.push_back("--eh-frame-hdr"); in ConstructJob()
420 CmdArgs.push_back("-m"); in ConstructJob()
428 CmdArgs.push_back("-X"); in ConstructJob()
430 CmdArgs.push_back("--no-relax"); in ConstructJob()
435 CmdArgs.push_back("-shared"); in ConstructJob()
438 CmdArgs.push_back("-static"); in ConstructJob()
439 CmdArgs.push_back("-pie"); in ConstructJob()
440 CmdArgs.push_back("--no-dynamic-linker"); in ConstructJob()
441 CmdArgs.push_back("-z"); in ConstructJob()
444 CmdArgs.push_back("-static"); in ConstructJob()
447 CmdArgs.push_back("-export-dynamic"); in ConstructJob()
452 CmdArgs.push_back("-pie"); in ConstructJob()
453 CmdArgs.push_back("-dynamic-linker"); in ConstructJob()
459 CmdArgs.push_back("-o"); in ConstructJob()
483 CmdArgs.push_back("-z"); in ConstructJob()
484 CmdArgs.push_back("max-page-size=0x4000000"); in ConstructJob()
530 Inputs, [](const InputInfo &II) -> bool { return II.isFilename(); }); in ConstructJob()
541 CmdArgs.push_back("--no-demangle"); in ConstructJob()
560 CmdArgs.push_back("-Bstatic"); in ConstructJob()
563 CmdArgs.push_back("-Bdynamic"); in ConstructJob()
565 CmdArgs.push_back("-lm"); in ConstructJob()
568 // Silence warnings when linking C code with a C++ '-stdlib' argument. in ConstructJob()
571 // Additional linker set-up and flags for Fortran. This is required in order in ConstructJob()
578 CmdArgs.push_back("-lm"); in ConstructJob()
584 CmdArgs.push_back("--start-group"); in ConstructJob()
595 // Use the static OpenMP runtime with -static-openmp in ConstructJob()
610 // LLVM support for atomics on 32-bit SPARC V8+ is incomplete, so in ConstructJob()
614 CmdArgs.push_back("--push-state"); in ConstructJob()
615 CmdArgs.push_back("--as-needed"); in ConstructJob()
616 CmdArgs.push_back("-latomic"); in ConstructJob()
617 CmdArgs.push_back("--pop-state"); in ConstructJob()
623 CmdArgs.push_back("-lpthread"); in ConstructJob()
626 CmdArgs.push_back("--wrap=pthread_create"); in ConstructJob()
629 CmdArgs.push_back("-lc"); in ConstructJob()
633 CmdArgs.push_back("-lgloss"); in ConstructJob()
636 CmdArgs.push_back("--end-group"); in ConstructJob()
642 CmdArgs.push_back("--as-needed"); in ConstructJob()
643 CmdArgs.push_back("-lsoftfp"); in ConstructJob()
644 CmdArgs.push_back("--no-as-needed"); in ConstructJob()
707 if (A->getOption().getID() == options::OPT_gz) { in ConstructJob()
708 CmdArgs.push_back("--compress-debug-sections"); in ConstructJob()
710 StringRef Value = A->getValue(); in ConstructJob()
713 Args.MakeArgString("--compress-debug-sections=" + Twine(Value))); in ConstructJob()
716 << A->getSpelling() << Value; in ConstructJob()
724 // Add --32/--64 to make sure we get the format we want. in ConstructJob()
727 CmdArgs.push_back("--32"); in ConstructJob()
731 CmdArgs.push_back("--x32"); in ConstructJob()
733 CmdArgs.push_back("--64"); in ConstructJob()
736 CmdArgs.push_back("-a32"); in ConstructJob()
737 CmdArgs.push_back("-mppc"); in ConstructJob()
738 CmdArgs.push_back("-mbig-endian"); in ConstructJob()
744 CmdArgs.push_back("-a32"); in ConstructJob()
745 CmdArgs.push_back("-mppc"); in ConstructJob()
746 CmdArgs.push_back("-mlittle-endian"); in ConstructJob()
752 CmdArgs.push_back("-a64"); in ConstructJob()
753 CmdArgs.push_back("-mppc64"); in ConstructJob()
754 CmdArgs.push_back("-mbig-endian"); in ConstructJob()
760 CmdArgs.push_back("-a64"); in ConstructJob()
761 CmdArgs.push_back("-mppc64"); in ConstructJob()
762 CmdArgs.push_back("-mlittle-endian"); in ConstructJob()
770 CmdArgs.push_back("-mabi"); in ConstructJob()
774 CmdArgs.push_back("-march"); in ConstructJob()
782 CmdArgs.push_back("-32"); in ConstructJob()
790 CmdArgs.push_back("-64"); in ConstructJob()
802 CmdArgs.push_back(arm::isARMBigEndian(Triple2, Args) ? "-EB" : "-EL"); in ConstructJob()
805 CmdArgs.push_back("-mfpu=neon"); in ConstructJob()
808 CmdArgs.push_back("-mfpu=crypto-neon-fp-armv8"); in ConstructJob()
817 CmdArgs.push_back(Args.MakeArgString("-mfloat-abi=soft")); in ConstructJob()
820 CmdArgs.push_back(Args.MakeArgString("-mfloat-abi=softfp")); in ConstructJob()
823 CmdArgs.push_back(Args.MakeArgString("-mfloat-abi=hard")); in ConstructJob()
832 // -meabi=gnu (gcc -mabi={apcs-gnu,atpcs} passes -meabi=gnu to gas). For in ConstructJob()
835 A->ignoreTargetSpecific(); in ConstructJob()
841 getToolChain().getArch() == llvm::Triple::aarch64_be ? "-EB" : "-EL"); in ConstructJob()
851 CmdArgs.push_back(Args.MakeArgString("-mabi=" + ABIName)); in ConstructJob()
863 CmdArgs.push_back("-march"); in ConstructJob()
866 CmdArgs.push_back("-mabi"); in ConstructJob()
869 // -mno-shared should be emitted unless -fpic, -fpie, -fPIC, -fPIE, in ConstructJob()
870 // or -mshared (not implemented) is in effect. in ConstructJob()
872 CmdArgs.push_back("-mno-shared"); in ConstructJob()
874 // LLVM doesn't support -mplt yet and acts as if it is always given. in ConstructJob()
875 // However, -mplt has no effect with the N64 ABI. in ConstructJob()
877 CmdArgs.push_back("-call_nonpic"); in ConstructJob()
880 CmdArgs.push_back("-EL"); in ConstructJob()
882 CmdArgs.push_back("-EB"); in ConstructJob()
885 if (StringRef(A->getValue()) == "2008") in ConstructJob()
886 CmdArgs.push_back(Args.MakeArgString("-mnan=2008")); in ConstructJob()
889 // Add the last -mfp32/-mfpxx/-mfp64 or -mfpxx if it is enabled by default. in ConstructJob()
892 A->claim(); in ConstructJob()
893 A->render(Args, CmdArgs); in ConstructJob()
898 CmdArgs.push_back("-mfpxx"); in ConstructJob()
900 // Pass on -mmips16 or -mno-mips16. However, the assembler equivalent of in ConstructJob()
901 // -mno-mips16 is actually -no-mips16. in ConstructJob()
904 if (A->getOption().matches(options::OPT_mips16)) { in ConstructJob()
905 A->claim(); in ConstructJob()
906 A->render(Args, CmdArgs); in ConstructJob()
908 A->claim(); in ConstructJob()
909 CmdArgs.push_back("-no-mips16"); in ConstructJob()
920 // support -mmsa / -mno-msa options. in ConstructJob()
921 if (A->getOption().matches(options::OPT_mmsa)) in ConstructJob()
922 CmdArgs.push_back(Args.MakeArgString("-mmsa")); in ConstructJob()
938 // Always pass an -march option, since our default of z10 is later in ConstructJob()
941 CmdArgs.push_back(Args.MakeArgString("-march=" + CPUName)); in ConstructJob()
950 StringRef Map = A->getValue(); in ConstructJob()
953 << Map << A->getOption().getName(); in ConstructJob()
955 CmdArgs.push_back(Args.MakeArgString("--debug-prefix-map")); in ConstructJob()
958 A->claim(); in ConstructJob()
964 CmdArgs.push_back("-o"); in ConstructJob()
974 if (!A->getOption().matches(options::OPT_g0)) { in ConstructJob()
978 CmdArgs.push_back(Args.MakeArgString("-gdwarf-" + Twine(DwarfVersion))); in ConstructJob()
1017 return A->getOption().matches(options::OPT_msoft_float) || in isSoftFloatABI()
1018 (A->getOption().matches(options::OPT_mfloat_abi_EQ) && in isSoftFloatABI()
1019 A->getValue() == StringRef("soft")); in isSoftFloatABI()
1032 return A && A->getOption().matches(options::OPT_mips16); in isMips16()
1037 return A && A->getOption().matches(options::OPT_mmicromips); in isMicroMips()
1050 auto MArchMips16 = MultilibBuilder("/mips16").flag("-m32").flag("-mips16"); in findMipsCsMultilibs()
1053 MultilibBuilder("/micromips").flag("-m32").flag("-mmicromips"); in findMipsCsMultilibs()
1056 .flag("-mips16", /*Disallow=*/true) in findMipsCsMultilibs()
1057 .flag("-mmicromips", /*Disallow=*/true); in findMipsCsMultilibs()
1059 auto UCLibc = MultilibBuilder("/uclibc").flag("-muclibc"); in findMipsCsMultilibs()
1061 auto SoftFloat = MultilibBuilder("/soft-float").flag("-msoft-float"); in findMipsCsMultilibs()
1063 auto Nan2008 = MultilibBuilder("/nan2008").flag("-mnan=2008"); in findMipsCsMultilibs()
1066 .flag("-msoft-float", /*Disallow=*/true) in findMipsCsMultilibs()
1067 .flag("-mnan=2008", /*Disallow=*/true); in findMipsCsMultilibs()
1070 MultilibBuilder("").flag("-EB").flag("-EL", /*Disallow=*/true); in findMipsCsMultilibs()
1073 MultilibBuilder("/el").flag("-EL").flag("-EB", /*Disallow=*/true); in findMipsCsMultilibs()
1079 .flag("-mabi=n64") in findMipsCsMultilibs()
1080 .flag("-mabi=n32", /*Disallow=*/true) in findMipsCsMultilibs()
1081 .flag("-m32", /*Disallow=*/true); in findMipsCsMultilibs()
1100 "/../../../../mips-linux-gnu/libc/uclibc/usr/include"); in findMipsCsMultilibs()
1102 Dirs.push_back("/../../../../mips-linux-gnu/libc/usr/include"); in findMipsCsMultilibs()
1111 "-mabi=n32"); in findMipsCsMultilibs()
1116 .flag("-m64") in findMipsCsMultilibs()
1117 .flag("-m32", /*Disallow=*/true) in findMipsCsMultilibs()
1118 .flag("-mabi=n32", /*Disallow=*/true); in findMipsCsMultilibs()
1122 .flag("-m64", /*Disallow=*/true) in findMipsCsMultilibs()
1123 .flag("-m32") in findMipsCsMultilibs()
1124 .flag("-mabi=n32", /*Disallow=*/true); in findMipsCsMultilibs()
1138 if (Candidate->select(Flags, Result.SelectedMultilibs)) { in findMipsCsMultilibs()
1155 .Maybe(MultilibBuilder("/mips-r2", {}, {}).flag("-march=mips32r2")) in findMipsAndroidMultilibs()
1156 .Maybe(MultilibBuilder("/mips-r6", {}, {}).flag("-march=mips32r6")) in findMipsAndroidMultilibs()
1162 .Either(MultilibBuilder().flag("-march=mips32"), in findMipsAndroidMultilibs()
1163 MultilibBuilder("/mips-r2", "", "/mips-r2") in findMipsAndroidMultilibs()
1164 .flag("-march=mips32r2"), in findMipsAndroidMultilibs()
1165 MultilibBuilder("/mips-r6", "", "/mips-r6") in findMipsAndroidMultilibs()
1166 .flag("-march=mips32r6")) in findMipsAndroidMultilibs()
1172 .Either(MultilibBuilder().flag("-march=mips64r6"), in findMipsAndroidMultilibs()
1173 MultilibBuilder("/32/mips-r1", "", "/mips-r1") in findMipsAndroidMultilibs()
1174 .flag("-march=mips32"), in findMipsAndroidMultilibs()
1175 MultilibBuilder("/32/mips-r2", "", "/mips-r2") in findMipsAndroidMultilibs()
1176 .flag("-march=mips32r2"), in findMipsAndroidMultilibs()
1177 MultilibBuilder("/32/mips-r6", "", "/mips-r6") in findMipsAndroidMultilibs()
1178 .flag("-march=mips32r6")) in findMipsAndroidMultilibs()
1183 if (VFS.exists(Path + "/mips-r6")) in findMipsAndroidMultilibs()
1187 if (MS->select(Flags, Result.SelectedMultilibs)) { in findMipsAndroidMultilibs()
1201 .osSuffix("/mips-r2-hard-musl") in findMipsMuslMultilibs()
1202 .flag("-EB") in findMipsMuslMultilibs()
1203 .flag("-EL", /*Disallow=*/true) in findMipsMuslMultilibs()
1204 .flag("-march=mips32r2"); in findMipsMuslMultilibs()
1206 auto MArchMipselR2 = MultilibBuilder("/mipsel-r2-hard-musl") in findMipsMuslMultilibs()
1207 .flag("-EB", /*Disallow=*/true) in findMipsMuslMultilibs()
1208 .flag("-EL") in findMipsMuslMultilibs()
1209 .flag("-march=mips32r2"); in findMipsMuslMultilibs()
1235 .flag("-m32") in findMipsMtiMultilibs()
1236 .flag("-m64", /*Disallow=*/true) in findMipsMtiMultilibs()
1237 .flag("-mmicromips", /*Disallow=*/true) in findMipsMtiMultilibs()
1238 .flag("-march=mips32"); in findMipsMtiMultilibs()
1241 .flag("-m32") in findMipsMtiMultilibs()
1242 .flag("-m64", /*Disallow=*/true) in findMipsMtiMultilibs()
1243 .flag("-mmicromips"); in findMipsMtiMultilibs()
1246 .flag("-m32", /*Disallow=*/true) in findMipsMtiMultilibs()
1247 .flag("-m64") in findMipsMtiMultilibs()
1248 .flag("-march=mips64r2"); in findMipsMtiMultilibs()
1251 .flag("-m32", /*Disallow=*/true) in findMipsMtiMultilibs()
1252 .flag("-m64") in findMipsMtiMultilibs()
1253 .flag("-march=mips64r2", /*Disallow=*/true); in findMipsMtiMultilibs()
1256 .flag("-m32") in findMipsMtiMultilibs()
1257 .flag("-m64", /*Disallow=*/true) in findMipsMtiMultilibs()
1258 .flag("-mmicromips", /*Disallow=*/true) in findMipsMtiMultilibs()
1259 .flag("-march=mips32r2"); in findMipsMtiMultilibs()
1261 auto Mips16 = MultilibBuilder("/mips16").flag("-mips16"); in findMipsMtiMultilibs()
1263 auto UCLibc = MultilibBuilder("/uclibc").flag("-muclibc"); in findMipsMtiMultilibs()
1266 .flag("-mabi=n64") in findMipsMtiMultilibs()
1267 .flag("-mabi=n32", /*Disallow=*/true) in findMipsMtiMultilibs()
1268 .flag("-m32", /*Disallow=*/true); in findMipsMtiMultilibs()
1271 MultilibBuilder("").flag("-EB").flag("-EL", /*Disallow=*/true); in findMipsMtiMultilibs()
1274 MultilibBuilder("/el").flag("-EL").flag("-EB", /*Disallow=*/true); in findMipsMtiMultilibs()
1276 auto SoftFloat = MultilibBuilder("/sof").flag("-msoft-float"); in findMipsMtiMultilibs()
1278 auto Nan2008 = MultilibBuilder("/nan2008").flag("-mnan=2008"); in findMipsMtiMultilibs()
1313 auto BeHard = MultilibBuilder("/mips-r2-hard") in findMipsMtiMultilibs()
1314 .flag("-EB") in findMipsMtiMultilibs()
1315 .flag("-msoft-float", /*Disallow=*/true) in findMipsMtiMultilibs()
1316 .flag("-mnan=2008", /*Disallow=*/true) in findMipsMtiMultilibs()
1317 .flag("-muclibc", /*Disallow=*/true); in findMipsMtiMultilibs()
1318 auto BeSoft = MultilibBuilder("/mips-r2-soft") in findMipsMtiMultilibs()
1319 .flag("-EB") in findMipsMtiMultilibs()
1320 .flag("-msoft-float") in findMipsMtiMultilibs()
1321 .flag("-mnan=2008", /*Disallow=*/true); in findMipsMtiMultilibs()
1322 auto ElHard = MultilibBuilder("/mipsel-r2-hard") in findMipsMtiMultilibs()
1323 .flag("-EL") in findMipsMtiMultilibs()
1324 .flag("-msoft-float", /*Disallow=*/true) in findMipsMtiMultilibs()
1325 .flag("-mnan=2008", /*Disallow=*/true) in findMipsMtiMultilibs()
1326 .flag("-muclibc", /*Disallow=*/true); in findMipsMtiMultilibs()
1327 auto ElSoft = MultilibBuilder("/mipsel-r2-soft") in findMipsMtiMultilibs()
1328 .flag("-EL") in findMipsMtiMultilibs()
1329 .flag("-msoft-float") in findMipsMtiMultilibs()
1330 .flag("-mnan=2008", /*Disallow=*/true) in findMipsMtiMultilibs()
1331 .flag("-mmicromips", /*Disallow=*/true); in findMipsMtiMultilibs()
1332 auto BeHardNan = MultilibBuilder("/mips-r2-hard-nan2008") in findMipsMtiMultilibs()
1333 .flag("-EB") in findMipsMtiMultilibs()
1334 .flag("-msoft-float", /*Disallow=*/true) in findMipsMtiMultilibs()
1335 .flag("-mnan=2008") in findMipsMtiMultilibs()
1336 .flag("-muclibc", /*Disallow=*/true); in findMipsMtiMultilibs()
1337 auto ElHardNan = MultilibBuilder("/mipsel-r2-hard-nan2008") in findMipsMtiMultilibs()
1338 .flag("-EL") in findMipsMtiMultilibs()
1339 .flag("-msoft-float", /*Disallow=*/true) in findMipsMtiMultilibs()
1340 .flag("-mnan=2008") in findMipsMtiMultilibs()
1341 .flag("-muclibc", /*Disallow=*/true) in findMipsMtiMultilibs()
1342 .flag("-mmicromips", /*Disallow=*/true); in findMipsMtiMultilibs()
1343 auto BeHardNanUclibc = MultilibBuilder("/mips-r2-hard-nan2008-uclibc") in findMipsMtiMultilibs()
1344 .flag("-EB") in findMipsMtiMultilibs()
1345 .flag("-msoft-float", /*Disallow=*/true) in findMipsMtiMultilibs()
1346 .flag("-mnan=2008") in findMipsMtiMultilibs()
1347 .flag("-muclibc"); in findMipsMtiMultilibs()
1348 auto ElHardNanUclibc = MultilibBuilder("/mipsel-r2-hard-nan2008-uclibc") in findMipsMtiMultilibs()
1349 .flag("-EL") in findMipsMtiMultilibs()
1350 .flag("-msoft-float", /*Disallow=*/true) in findMipsMtiMultilibs()
1351 .flag("-mnan=2008") in findMipsMtiMultilibs()
1352 .flag("-muclibc"); in findMipsMtiMultilibs()
1353 auto BeHardUclibc = MultilibBuilder("/mips-r2-hard-uclibc") in findMipsMtiMultilibs()
1354 .flag("-EB") in findMipsMtiMultilibs()
1355 .flag("-msoft-float", /*Disallow=*/true) in findMipsMtiMultilibs()
1356 .flag("-mnan=2008", /*Disallow=*/true) in findMipsMtiMultilibs()
1357 .flag("-muclibc"); in findMipsMtiMultilibs()
1358 auto ElHardUclibc = MultilibBuilder("/mipsel-r2-hard-uclibc") in findMipsMtiMultilibs()
1359 .flag("-EL") in findMipsMtiMultilibs()
1360 .flag("-msoft-float", /*Disallow=*/true) in findMipsMtiMultilibs()
1361 .flag("-mnan=2008", /*Disallow=*/true) in findMipsMtiMultilibs()
1362 .flag("-muclibc"); in findMipsMtiMultilibs()
1363 auto ElMicroHardNan = MultilibBuilder("/micromipsel-r2-hard-nan2008") in findMipsMtiMultilibs()
1364 .flag("-EL") in findMipsMtiMultilibs()
1365 .flag("-msoft-float", /*Disallow=*/true) in findMipsMtiMultilibs()
1366 .flag("-mnan=2008") in findMipsMtiMultilibs()
1367 .flag("-mmicromips"); in findMipsMtiMultilibs()
1368 auto ElMicroSoft = MultilibBuilder("/micromipsel-r2-soft") in findMipsMtiMultilibs()
1369 .flag("-EL") in findMipsMtiMultilibs()
1370 .flag("-msoft-float") in findMipsMtiMultilibs()
1371 .flag("-mnan=2008", /*Disallow=*/true) in findMipsMtiMultilibs()
1372 .flag("-mmicromips"); in findMipsMtiMultilibs()
1376 .flag("-mabi=n32", /*Disallow=*/true) in findMipsMtiMultilibs()
1377 .flag("-mabi=n64", /*Disallow=*/true); in findMipsMtiMultilibs()
1380 .flag("-mabi=n32") in findMipsMtiMultilibs()
1381 .flag("-mabi=n64", /*Disallow=*/true); in findMipsMtiMultilibs()
1384 .flag("-mabi=n32", /*Disallow=*/true) in findMipsMtiMultilibs()
1385 .flag("-mabi=n64"); in findMipsMtiMultilibs()
1402 {"/../../../../mips-mti-linux-gnu/lib" + M.gccSuffix()}); in findMipsMtiMultilibs()
1406 if (Candidate->select(Flags, Result.SelectedMultilibs)) { in findMipsMtiMultilibs()
1421 .flag("-m64") in findMipsImgMultilibs()
1422 .flag("-m32", /*Disallow=*/true); in findMipsImgMultilibs()
1425 MultilibBuilder("/el").flag("-EL").flag("-EB", /*Disallow=*/true); in findMipsImgMultilibs()
1428 .flag("-mabi=n64") in findMipsImgMultilibs()
1429 .flag("-mabi=n32", /*Disallow=*/true) in findMipsImgMultilibs()
1430 .flag("-m32", /*Disallow=*/true); in findMipsImgMultilibs()
1448 auto BeHard = MultilibBuilder("/mips-r6-hard") in findMipsImgMultilibs()
1449 .flag("-EB") in findMipsImgMultilibs()
1450 .flag("-msoft-float", /*Disallow=*/true) in findMipsImgMultilibs()
1451 .flag("-mmicromips", /*Disallow=*/true); in findMipsImgMultilibs()
1452 auto BeSoft = MultilibBuilder("/mips-r6-soft") in findMipsImgMultilibs()
1453 .flag("-EB") in findMipsImgMultilibs()
1454 .flag("-msoft-float") in findMipsImgMultilibs()
1455 .flag("-mmicromips", /*Disallow=*/true); in findMipsImgMultilibs()
1456 auto ElHard = MultilibBuilder("/mipsel-r6-hard") in findMipsImgMultilibs()
1457 .flag("-EL") in findMipsImgMultilibs()
1458 .flag("-msoft-float", /*Disallow=*/true) in findMipsImgMultilibs()
1459 .flag("-mmicromips", /*Disallow=*/true); in findMipsImgMultilibs()
1460 auto ElSoft = MultilibBuilder("/mipsel-r6-soft") in findMipsImgMultilibs()
1461 .flag("-EL") in findMipsImgMultilibs()
1462 .flag("-msoft-float") in findMipsImgMultilibs()
1463 .flag("-mmicromips", /*Disallow=*/true); in findMipsImgMultilibs()
1464 auto BeMicroHard = MultilibBuilder("/micromips-r6-hard") in findMipsImgMultilibs()
1465 .flag("-EB") in findMipsImgMultilibs()
1466 .flag("-msoft-float", /*Disallow=*/true) in findMipsImgMultilibs()
1467 .flag("-mmicromips"); in findMipsImgMultilibs()
1468 auto BeMicroSoft = MultilibBuilder("/micromips-r6-soft") in findMipsImgMultilibs()
1469 .flag("-EB") in findMipsImgMultilibs()
1470 .flag("-msoft-float") in findMipsImgMultilibs()
1471 .flag("-mmicromips"); in findMipsImgMultilibs()
1472 auto ElMicroHard = MultilibBuilder("/micromipsel-r6-hard") in findMipsImgMultilibs()
1473 .flag("-EL") in findMipsImgMultilibs()
1474 .flag("-msoft-float", /*Disallow=*/true) in findMipsImgMultilibs()
1475 .flag("-mmicromips"); in findMipsImgMultilibs()
1476 auto ElMicroSoft = MultilibBuilder("/micromipsel-r6-soft") in findMipsImgMultilibs()
1477 .flag("-EL") in findMipsImgMultilibs()
1478 .flag("-msoft-float") in findMipsImgMultilibs()
1479 .flag("-mmicromips"); in findMipsImgMultilibs()
1483 .flag("-mabi=n32", /*Disallow=*/true) in findMipsImgMultilibs()
1484 .flag("-mabi=n64", /*Disallow=*/true); in findMipsImgMultilibs()
1487 .flag("-mabi=n32") in findMipsImgMultilibs()
1488 .flag("-mabi=n64", /*Disallow=*/true); in findMipsImgMultilibs()
1491 .flag("-mabi=n32", /*Disallow=*/true) in findMipsImgMultilibs()
1492 .flag("-mabi=n64"); in findMipsImgMultilibs()
1508 {"/../../../../mips-img-linux-gnu/lib" + M.gccSuffix()}); in findMipsImgMultilibs()
1512 if (Candidate->select(Flags, Result.SelectedMultilibs)) { in findMipsImgMultilibs()
1533 addMultilibFlag(TargetTriple.isMIPS32(), "-m32", Flags); in findMIPSMultilibs()
1534 addMultilibFlag(TargetTriple.isMIPS64(), "-m64", Flags); in findMIPSMultilibs()
1535 addMultilibFlag(isMips16(Args), "-mips16", Flags); in findMIPSMultilibs()
1536 addMultilibFlag(CPUName == "mips32", "-march=mips32", Flags); in findMIPSMultilibs()
1539 "-march=mips32r2", Flags); in findMIPSMultilibs()
1540 addMultilibFlag(CPUName == "mips32r6", "-march=mips32r6", Flags); in findMIPSMultilibs()
1541 addMultilibFlag(CPUName == "mips64", "-march=mips64", Flags); in findMIPSMultilibs()
1545 "-march=mips64r2", Flags); in findMIPSMultilibs()
1546 addMultilibFlag(CPUName == "mips64r6", "-march=mips64r6", Flags); in findMIPSMultilibs()
1547 addMultilibFlag(isMicroMips(Args), "-mmicromips", Flags); in findMIPSMultilibs()
1548 addMultilibFlag(tools::mips::isUCLibc(Args), "-muclibc", Flags); in findMIPSMultilibs()
1549 addMultilibFlag(tools::mips::isNaN2008(D, Args, TargetTriple), "-mnan=2008", in findMIPSMultilibs()
1551 addMultilibFlag(ABIName == "n32", "-mabi=n32", Flags); in findMIPSMultilibs()
1552 addMultilibFlag(ABIName == "n64", "-mabi=n64", Flags); in findMIPSMultilibs()
1553 addMultilibFlag(isSoftFloatABI(Args), "-msoft-float", Flags); in findMIPSMultilibs()
1554 addMultilibFlag(!isSoftFloatABI(Args), "-mhard-float", Flags); in findMIPSMultilibs()
1555 addMultilibFlag(isMipsEL(TargetArch), "-EL", Flags); in findMIPSMultilibs()
1556 addMultilibFlag(!isMipsEL(TargetArch), "-EB", Flags); in findMIPSMultilibs()
1580 // Fallback to the regular toolchain-tree structure. in findMIPSMultilibs()
1597 // Find multilibs with subdirectories like armv7-a, thumb, armv7-a/thumb. in findAndroidArmMultilibs()
1599 MultilibBuilder ArmV7Multilib = MultilibBuilder("/armv7-a") in findAndroidArmMultilibs()
1600 .flag("-march=armv7-a") in findAndroidArmMultilibs()
1601 .flag("-mthumb", /*Disallow=*/true); in findAndroidArmMultilibs()
1603 .flag("-march=armv7-a", /*Disallow=*/true) in findAndroidArmMultilibs()
1604 .flag("-mthumb"); in findAndroidArmMultilibs()
1606 MultilibBuilder("/armv7-a/thumb").flag("-march=armv7-a").flag("-mthumb"); in findAndroidArmMultilibs()
1609 .flag("-march=armv7-a", /*Disallow=*/true) in findAndroidArmMultilibs()
1610 .flag("-mthumb", /*Disallow=*/true); in findAndroidArmMultilibs()
1629 addMultilibFlag(IsArmV7Mode, "-march=armv7-a", Flags); in findAndroidArmMultilibs()
1630 addMultilibFlag(IsThumbMode, "-mthumb", Flags); in findAndroidArmMultilibs()
1642 MultilibBuilder("/430").flag("-exceptions", /*Disallow=*/true); in findMSP430Multilibs()
1644 MultilibBuilder("/430/exceptions").flag("-exceptions"); in findMSP430Multilibs()
1657 "-exceptions", Flags); in findMSP430Multilibs()
1678 addMultilibFlag(TheFloatABI == tools::csky::FloatABI::Hard, "-hard-fp", in findCSKYMultilibs()
1680 addMultilibFlag(TheFloatABI == tools::csky::FloatABI::SoftFP, "-soft-fp", in findCSKYMultilibs()
1682 addMultilibFlag(TheFloatABI == tools::csky::FloatABI::Soft, "-soft", Flags); in findCSKYMultilibs()
1683 addMultilibFlag(ARCHName == "ck801", "-march=ck801", Flags); in findCSKYMultilibs()
1684 addMultilibFlag(ARCHName == "ck802", "-march=ck802", Flags); in findCSKYMultilibs()
1685 addMultilibFlag(ARCHName == "ck803", "-march=ck803", Flags); in findCSKYMultilibs()
1686 addMultilibFlag(ARCHName == "ck804", "-march=ck804", Flags); in findCSKYMultilibs()
1687 addMultilibFlag(ARCHName == "ck805", "-march=ck805", Flags); in findCSKYMultilibs()
1688 addMultilibFlag(ARCHName == "ck807", "-march=ck807", Flags); in findCSKYMultilibs()
1689 addMultilibFlag(ARCHName == "ck810", "-march=ck810", Flags); in findCSKYMultilibs()
1690 addMultilibFlag(ARCHName == "ck810v", "-march=ck810v", Flags); in findCSKYMultilibs()
1691 addMultilibFlag(ARCHName == "ck860", "-march=ck860", Flags); in findCSKYMultilibs()
1692 addMultilibFlag(ARCHName == "ck860v", "-march=ck860v", Flags); in findCSKYMultilibs()
1697 isBigEndian = !A->getOption().matches(options::OPT_mlittle_endian); in findCSKYMultilibs()
1698 addMultilibFlag(isBigEndian, "-EB", Flags); in findCSKYMultilibs()
1700 auto HardFloat = MultilibBuilder("/hard-fp").flag("-hard-fp"); in findCSKYMultilibs()
1701 auto SoftFpFloat = MultilibBuilder("/soft-fp").flag("-soft-fp"); in findCSKYMultilibs()
1702 auto SoftFloat = MultilibBuilder("").flag("-soft"); in findCSKYMultilibs()
1703 auto Arch801 = MultilibBuilder("/ck801").flag("-march=ck801"); in findCSKYMultilibs()
1704 auto Arch802 = MultilibBuilder("/ck802").flag("-march=ck802"); in findCSKYMultilibs()
1705 auto Arch803 = MultilibBuilder("/ck803").flag("-march=ck803"); in findCSKYMultilibs()
1707 auto Arch804 = MultilibBuilder("/ck803").flag("-march=ck804"); in findCSKYMultilibs()
1708 auto Arch805 = MultilibBuilder("/ck805").flag("-march=ck805"); in findCSKYMultilibs()
1709 auto Arch807 = MultilibBuilder("/ck807").flag("-march=ck807"); in findCSKYMultilibs()
1710 auto Arch810 = MultilibBuilder("").flag("-march=ck810"); in findCSKYMultilibs()
1711 auto Arch810v = MultilibBuilder("/ck810v").flag("-march=ck810v"); in findCSKYMultilibs()
1712 auto Arch860 = MultilibBuilder("/ck860").flag("-march=ck860"); in findCSKYMultilibs()
1713 auto Arch860v = MultilibBuilder("/ck860v").flag("-march=ck860v"); in findCSKYMultilibs()
1714 auto BigEndian = MultilibBuilder("/big").flag("-EB"); in findCSKYMultilibs()
1729 /// Extend the multi-lib re-use selection mechanism for RISC-V.
1730 /// This function will try to re-use multi-lib if they are compatible.
1732 /// - ABI must be the same.
1733 /// - multi-lib is a subset of current arch, e.g. multi-lib=march=rv32im
1735 /// - march that contains atomic extension can't reuse multi-lib that
1736 /// doesn't have atomic, vice versa. e.g. multi-lib=march=rv32im and
1743 // Try to find the perfect matching multi-lib first. in selectRISCVMultilib()
1760 addMultilibFlag(ISAInfo->getXLen() == 32, "-m32", NewFlags); in selectRISCVMultilib()
1761 addMultilibFlag(ISAInfo->getXLen() == 64, "-m64", NewFlags); in selectRISCVMultilib()
1765 if (Flag.starts_with("!march=") || Flag.starts_with("-march=")) in selectRISCVMultilib()
1772 // Reconstruct multi-lib list, and break march option into separated in selectRISCVMultilib()
1773 // extension. e.g. march=rv32im -> +i +m in selectRISCVMultilib()
1780 // Add back all flags except -march. in selectRISCVMultilib()
1781 if (!Flag.consume_front("-march=")) { in selectRISCVMultilib()
1786 // Break down -march into individual extension. in selectRISCVMultilib()
1794 // that and process the rest of multi-lib configs. in selectRISCVMultilib()
1800 for (auto &MLConfigArchExt : MLConfigISAInfo->getExtensions()) { in selectRISCVMultilib()
1802 NewMultilib.flag(Twine("-", ExtName).str()); in selectRISCVMultilib()
1805 addMultilibFlag(ISAInfo->hasExtension(ExtName), in selectRISCVMultilib()
1806 Twine("-", ExtName).str(), NewFlags); in selectRISCVMultilib()
1811 if (MLConfigISAInfo->getXLen() == 32) { in selectRISCVMultilib()
1812 NewMultilib.flag("-m32"); in selectRISCVMultilib()
1813 NewMultilib.flag("-m64", /*Disallow*/ true); in selectRISCVMultilib()
1815 NewMultilib.flag("-m32", /*Disallow*/ true); in selectRISCVMultilib()
1816 NewMultilib.flag("-m64"); in selectRISCVMultilib()
1820 // operation never co-work correctly. in selectRISCVMultilib()
1821 if (!MLConfigISAInfo->hasExtension("a")) in selectRISCVMultilib()
1822 NewMultilib.flag("-a", /*Disallow*/ true); in selectRISCVMultilib()
1831 // Build an internal used only multi-lib list, used for checking any in selectRISCVMultilib()
1832 // compatible multi-lib. in selectRISCVMultilib()
1839 // Look up the corresponding multi-lib entry in original multi-lib set. in selectRISCVMultilib()
1855 // currently only support the set of multilibs like riscv-gnu-toolchain does. in findRISCVBareMetalMultilibs()
1868 .flag(Twine("-march=", Element.march).str()) in findRISCVBareMetalMultilibs()
1869 .flag(Twine("-mabi=", Element.mabi).str())); in findRISCVBareMetalMultilibs()
1879 "/../../../../riscv64-unknown-elf/lib" + M.gccSuffix(), in findRISCVBareMetalMultilibs()
1880 "/../../../../riscv32-unknown-elf/lib" + M.gccSuffix()}); in findRISCVBareMetalMultilibs()
1889 Twine("-march=", Element.march).str().c_str(), Flags); in findRISCVBareMetalMultilibs()
1893 Twine("-mabi=", Element.mabi).str().c_str(), Flags); in findRISCVBareMetalMultilibs()
1910 MultilibBuilder("lib32/ilp32").flag("-m32").flag("-mabi=ilp32"); in findRISCVMultilibs()
1912 MultilibBuilder("lib32/ilp32f").flag("-m32").flag("-mabi=ilp32f"); in findRISCVMultilibs()
1914 MultilibBuilder("lib32/ilp32d").flag("-m32").flag("-mabi=ilp32d"); in findRISCVMultilibs()
1916 MultilibBuilder("lib64/lp64").flag("-m64").flag("-mabi=lp64"); in findRISCVMultilibs()
1918 MultilibBuilder("lib64/lp64f").flag("-m64").flag("-mabi=lp64f"); in findRISCVMultilibs()
1920 MultilibBuilder("lib64/lp64d").flag("-m64").flag("-mabi=lp64d"); in findRISCVMultilibs()
1931 addMultilibFlag(!IsRV64, "-m32", Flags); in findRISCVMultilibs()
1932 addMultilibFlag(IsRV64, "-m64", Flags); in findRISCVMultilibs()
1933 addMultilibFlag(ABIName == "ilp32", "-mabi=ilp32", Flags); in findRISCVMultilibs()
1934 addMultilibFlag(ABIName == "ilp32f", "-mabi=ilp32f", Flags); in findRISCVMultilibs()
1935 addMultilibFlag(ABIName == "ilp32d", "-mabi=ilp32d", Flags); in findRISCVMultilibs()
1936 addMultilibFlag(ABIName == "lp64", "-mabi=lp64", Flags); in findRISCVMultilibs()
1937 addMultilibFlag(ABIName == "lp64f", "-mabi=lp64f", Flags); in findRISCVMultilibs()
1938 addMultilibFlag(ABIName == "lp64d", "-mabi=lp64d", Flags); in findRISCVMultilibs()
1951 // Some versions of SUSE and Fedora on ppc64 put 32-bit libs in findBiarchMultilibs()
1952 // in what would normally be GCCInstallPath and put the 64-bit in findBiarchMultilibs()
1959 // Solaris uses platform-specific suffixes instead of /64. in findBiarchMultilibs()
1978 .flag("-m32", /*Disallow=*/true) in findBiarchMultilibs()
1979 .flag("-m64") in findBiarchMultilibs()
1980 .flag("-mx32", /*Disallow=*/true) in findBiarchMultilibs()
1985 .flag("-m32") in findBiarchMultilibs()
1986 .flag("-m64", /*Disallow=*/true) in findBiarchMultilibs()
1987 .flag("-mx32", /*Disallow=*/true) in findBiarchMultilibs()
1992 .flag("-m32", /*Disallow=*/true) in findBiarchMultilibs()
1993 .flag("-m64", /*Disallow=*/true) in findBiarchMultilibs()
1994 .flag("-mx32") in findBiarchMultilibs()
1999 .flag("-m32") in findBiarchMultilibs()
2000 .flag("-m64", /*Disallow=*/true) in findBiarchMultilibs()
2031 DefaultBuilder.flag("-m32") in findBiarchMultilibs()
2032 .flag("-m64", /*Disallow=*/true) in findBiarchMultilibs()
2033 .flag("-mx32", /*Disallow=*/true); in findBiarchMultilibs()
2035 DefaultBuilder.flag("-m32", /*Disallow=*/true) in findBiarchMultilibs()
2036 .flag("-m64") in findBiarchMultilibs()
2037 .flag("-mx32", /*Disallow=*/true); in findBiarchMultilibs()
2039 DefaultBuilder.flag("-m32", /*Disallow=*/true) in findBiarchMultilibs()
2040 .flag("-m64", /*Disallow=*/true) in findBiarchMultilibs()
2041 .flag("-mx32"); in findBiarchMultilibs()
2056 addMultilibFlag(TargetTriple.isArch64Bit() && !IsX32, "-m64", Flags); in findBiarchMultilibs()
2057 addMultilibFlag(TargetTriple.isArch32Bit(), "-m32", Flags); in findBiarchMultilibs()
2058 addMultilibFlag(TargetTriple.isArch64Bit() && IsX32, "-mx32", Flags); in findBiarchMultilibs()
2072 /// Generic_GCC - A tool chain using the 'gcc' command to perform
2076 /// Less-than for GCCVersion, implementing a Strict Weak Ordering.
2085 if (RHSMinor == -1) in isOlderThan()
2087 if (Minor == -1) in isOlderThan()
2094 if (RHSPatch == -1) in isOlderThan()
2096 if (Patch == -1) in isOlderThan()
2122 const GCCVersion BadVersion = {VersionText.str(), -1, -1, -1, "", "", ""}; in Parse()
2130 GCCVersion GoodVersion = {VersionText.str(), -1, -1, -1, "", "", ""}; in Parse()
2135 // 4.4-patched in Parse()
2138 // 4.4.2-rc4 in Parse()
2139 // 4.4.x-patched in Parse()
2140 // 10-win32 in Parse()
2142 // purely a number, except for the last one, where a non-number suffix in Parse()
2147 std::string &OutStr) -> bool { in Parse()
2161 auto TryParseNumber = [](StringRef Segment, int &Number) -> bool { in Parse()
2199 return A->getValue(); in getGCCToolchainDir()
2235 OSEnv = "linux-gnu"; in init()
2236 TripleNoVendor = (TargetTriple.getArchName().str() + '-' + OSEnv).str(); in init()
2240 (BiarchVariantTriple.getArchName().str() + '-' + OSEnv).str(); in init()
2249 // If --gcc-install-dir= is specified, skip filesystem detection. in init()
2252 A && A->getValue()[0]) { in init()
2253 StringRef InstallDir = A->getValue(); in init()
2271 // If --gcc-triple is specified use this instead of trying to in init()
2272 // auto-detect a triple. in init()
2275 StringRef GCCTriple = A->getValue(); in init()
2298 // Next, look for prefix(es) that correspond to distribution-supplied gcc in init()
2305 // Try to respect gcc-config on Gentoo if --gcc-toolchain is not provided. in init()
2310 // e.g. crossdev -S x86_64-gentoo-linux-gnu will install gcc libs for in init()
2311 // x86_64-gentoo-linux-gnu. But "clang -target x86_64-gentoo-linux-gnu" in init()
2312 // may pick the libraries for x86_64-pc-linux-gnu even when exact matching in init()
2313 // triple x86_64-gentoo-linux-gnu is present. in init()
2334 // Maybe filter out <libdir>/gcc and <libdir>/gcc-cross. in init()
2336 bool GCCCrossDirExists = VFS.exists(LibDir + "/gcc-cross"); in init()
2346 bool GCCCrossDirExists = VFS.exists(LibDir + "/gcc-cross"); in init()
2402 StringRef VersionText = llvm::sys::path::filename(LI->path()); in AddDefaultGCCPrefixes()
2406 if (CandidateVersion.Major == -1 || CandidateVersion.isOlderThan(4, 1, 1)) in AddDefaultGCCPrefixes()
2424 // For Linux, if --sysroot is not specified, look for RHEL/CentOS devtoolsets in AddDefaultGCCPrefixes()
2425 // and gcc-toolsets. in AddDefaultGCCPrefixes()
2430 Prefixes.push_back("/opt/rh/gcc-toolset-12/root/usr"); in AddDefaultGCCPrefixes()
2431 Prefixes.push_back("/opt/rh/gcc-toolset-11/root/usr"); in AddDefaultGCCPrefixes()
2432 Prefixes.push_back("/opt/rh/gcc-toolset-10/root/usr"); in AddDefaultGCCPrefixes()
2433 Prefixes.push_back("/opt/rh/devtoolset-12/root/usr"); in AddDefaultGCCPrefixes()
2434 Prefixes.push_back("/opt/rh/devtoolset-11/root/usr"); in AddDefaultGCCPrefixes()
2435 Prefixes.push_back("/opt/rh/devtoolset-10/root/usr"); in AddDefaultGCCPrefixes()
2436 Prefixes.push_back("/opt/rh/devtoolset-9/root/usr"); in AddDefaultGCCPrefixes()
2437 Prefixes.push_back("/opt/rh/devtoolset-8/root/usr"); in AddDefaultGCCPrefixes()
2438 Prefixes.push_back("/opt/rh/devtoolset-7/root/usr"); in AddDefaultGCCPrefixes()
2439 Prefixes.push_back("/opt/rh/devtoolset-6/root/usr"); in AddDefaultGCCPrefixes()
2440 Prefixes.push_back("/opt/rh/devtoolset-4/root/usr"); in AddDefaultGCCPrefixes()
2441 Prefixes.push_back("/opt/rh/devtoolset-3/root/usr"); in AddDefaultGCCPrefixes()
2442 Prefixes.push_back("/opt/rh/devtoolset-2/root/usr"); in AddDefaultGCCPrefixes()
2445 // Fall back to /usr which is used by most non-Solaris systems. in AddDefaultGCCPrefixes()
2460 // --target=aarch64 (incomplete triple) can detect lib/aarch64-linux-gnu. in CollectLibDirsAndTriples()
2462 // and always uses the full --target (e.g. --target=aarch64-linux-gnu). The in CollectLibDirsAndTriples()
2466 "aarch64-none-linux-gnu", "aarch64-linux-gnu", "aarch64-redhat-linux", in CollectLibDirsAndTriples()
2467 "aarch64-suse-linux"}; in CollectLibDirsAndTriples()
2469 static const char *const AArch64beTriples[] = {"aarch64_be-none-linux-gnu"}; in CollectLibDirsAndTriples()
2472 static const char *const ARMTriples[] = {"arm-linux-gnueabi"}; in CollectLibDirsAndTriples()
2473 static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf", in CollectLibDirsAndTriples()
2474 "armv7hl-redhat-linux-gnueabi", in CollectLibDirsAndTriples()
2475 "armv6hl-suse-linux-gnueabi", in CollectLibDirsAndTriples()
2476 "armv7hl-suse-linux-gnueabi"}; in CollectLibDirsAndTriples()
2478 static const char *const ARMebTriples[] = {"armeb-linux-gnueabi"}; in CollectLibDirsAndTriples()
2480 "armeb-linux-gnueabihf", "armebv7hl-redhat-linux-gnueabi"}; in CollectLibDirsAndTriples()
2487 "csky-linux-gnuabiv2", "csky-linux-uclibcabiv2", "csky-elf-noneabiv2"}; in CollectLibDirsAndTriples()
2491 "x86_64-linux-gnu", "x86_64-unknown-linux-gnu", in CollectLibDirsAndTriples()
2492 "x86_64-pc-linux-gnu", "x86_64-redhat-linux6E", in CollectLibDirsAndTriples()
2493 "x86_64-redhat-linux", "x86_64-suse-linux", in CollectLibDirsAndTriples()
2494 "x86_64-manbo-linux-gnu", "x86_64-slackware-linux", in CollectLibDirsAndTriples()
2495 "x86_64-unknown-linux", "x86_64-amazon-linux"}; in CollectLibDirsAndTriples()
2496 static const char *const X32Triples[] = {"x86_64-linux-gnux32", in CollectLibDirsAndTriples()
2497 "x86_64-pc-linux-gnux32"}; in CollectLibDirsAndTriples()
2501 "i586-linux-gnu", "i686-linux-gnu", "i686-pc-linux-gnu", in CollectLibDirsAndTriples()
2502 "i386-redhat-linux6E", "i686-redhat-linux", "i386-redhat-linux", in CollectLibDirsAndTriples()
2503 "i586-suse-linux", "i686-montavista-linux", in CollectLibDirsAndTriples()
2508 "loongarch64-linux-gnu", "loongarch64-unknown-linux-gnu"}; in CollectLibDirsAndTriples()
2511 static const char *const M68kTriples[] = {"m68k-unknown-linux-gnu", in CollectLibDirsAndTriples()
2512 "m68k-suse-linux"}; in CollectLibDirsAndTriples()
2516 "mips-linux-gnu", "mips-mti-linux", "mips-mti-linux-gnu", in CollectLibDirsAndTriples()
2517 "mips-img-linux-gnu", "mipsisa32r6-linux-gnu"}; in CollectLibDirsAndTriples()
2519 static const char *const MIPSELTriples[] = {"mipsel-linux-gnu", in CollectLibDirsAndTriples()
2520 "mips-img-linux-gnu"}; in CollectLibDirsAndTriples()
2524 "mips-mti-linux-gnu", "mips-img-linux-gnu", "mips64-linux-gnuabi64", in CollectLibDirsAndTriples()
2525 "mipsisa64r6-linux-gnu", "mipsisa64r6-linux-gnuabi64"}; in CollectLibDirsAndTriples()
2528 "mips-mti-linux-gnu", "mips-img-linux-gnu", "mips64el-linux-gnuabi64", in CollectLibDirsAndTriples()
2529 "mipsisa64r6el-linux-gnu", "mipsisa64r6el-linux-gnuabi64"}; in CollectLibDirsAndTriples()
2532 static const char *const MIPSN32Triples[] = {"mips64-linux-gnuabin32", in CollectLibDirsAndTriples()
2533 "mipsisa64r6-linux-gnuabin32"}; in CollectLibDirsAndTriples()
2536 "mips64el-linux-gnuabin32", "mipsisa64r6el-linux-gnuabin32"}; in CollectLibDirsAndTriples()
2539 static const char *const MSP430Triples[] = {"msp430-elf"}; in CollectLibDirsAndTriples()
2543 "powerpc-unknown-linux-gnu", in CollectLibDirsAndTriples()
2544 // On 32-bit PowerPC systems running SUSE Linux, gcc is configured as a in CollectLibDirsAndTriples()
2545 // 64-bit compiler which defaults to "-m32", hence "powerpc64-suse-linux". in CollectLibDirsAndTriples()
2546 "powerpc64-suse-linux", "powerpc-montavista-linuxspe"}; in CollectLibDirsAndTriples()
2548 static const char *const PPCLETriples[] = {"powerpcle-unknown-linux-gnu", in CollectLibDirsAndTriples()
2549 "powerpcle-linux-musl"}; in CollectLibDirsAndTriples()
2552 static const char *const PPC64Triples[] = {"powerpc64-unknown-linux-gnu", in CollectLibDirsAndTriples()
2553 "powerpc64-suse-linux", in CollectLibDirsAndTriples()
2554 "ppc64-redhat-linux"}; in CollectLibDirsAndTriples()
2557 "powerpc64le-unknown-linux-gnu", "powerpc64le-none-linux-gnu", in CollectLibDirsAndTriples()
2558 "powerpc64le-suse-linux", "ppc64le-redhat-linux"}; in CollectLibDirsAndTriples()
2561 static const char *const RISCV32Triples[] = {"riscv32-unknown-linux-gnu", in CollectLibDirsAndTriples()
2562 "riscv32-unknown-elf"}; in CollectLibDirsAndTriples()
2564 static const char *const RISCV64Triples[] = {"riscv64-unknown-linux-gnu", in CollectLibDirsAndTriples()
2565 "riscv64-unknown-elf"}; in CollectLibDirsAndTriples()
2568 static const char *const SPARCv8Triples[] = {"sparc-linux-gnu", in CollectLibDirsAndTriples()
2569 "sparcv8-linux-gnu"}; in CollectLibDirsAndTriples()
2571 static const char *const SPARCv9Triples[] = {"sparc64-linux-gnu", in CollectLibDirsAndTriples()
2572 "sparcv9-linux-gnu"}; in CollectLibDirsAndTriples()
2576 "s390x-unknown-linux-gnu", "s390x-ibm-linux-gnu", "s390x-suse-linux", in CollectLibDirsAndTriples()
2577 "s390x-redhat-linux"}; in CollectLibDirsAndTriples()
2585 "sparc-sun-solaris2.11"}; in CollectLibDirsAndTriples()
2587 "sparcv9-sun-solaris2.11"}; in CollectLibDirsAndTriples()
2588 static const char *const SolarisX86Triples[] = {"i386-pc-solaris2.11"}; in CollectLibDirsAndTriples()
2589 static const char *const SolarisX86_64Triples[] = {"x86_64-pc-solaris2.11"}; in CollectLibDirsAndTriples()
2625 "aarch64-linux-android"}; in CollectLibDirsAndTriples()
2626 static const char *const ARMAndroidTriples[] = {"arm-linux-androideabi"}; in CollectLibDirsAndTriples()
2627 static const char *const X86AndroidTriples[] = {"i686-linux-android"}; in CollectLibDirsAndTriples()
2628 static const char *const X86_64AndroidTriples[] = {"x86_64-linux-android"}; in CollectLibDirsAndTriples()
2667 TripleAliases.push_back("x86_64-gnu"); in CollectLibDirsAndTriples()
2671 TripleAliases.push_back("i686-gnu"); in CollectLibDirsAndTriples()
2870 // Debian mips multilibs behave more like the rest of the biarch ones, in ScanGCCForMultilibs()
2904 // Locations relative to the system lib directory where GCC's triple-specific in ScanLibDirForGCCTriple()
2907 // Path from system lib directory to GCC triple-specific directory. in ScanLibDirForGCCTriple()
2909 // Path from GCC triple-specific directory back to system lib directory. in ScanLibDirForGCCTriple()
2918 // Debian puts cross-compilers in gcc-cross. in ScanLibDirForGCCTriple()
2919 {"gcc-cross/" + CandidateTriple.str(), "../..", GCCCrossDirExists}, in ScanLibDirForGCCTriple()
2939 StringRef VersionText = llvm::sys::path::filename(LI->path()); in ScanLibDirForGCCTriple()
2941 if (CandidateVersion.Major != -1) // Filter obviously bad entries. in ScanLibDirForGCCTriple()
2942 if (!CandidateGCCInstallPaths.insert(std::string(LI->path())).second) in ScanLibDirForGCCTriple()
2949 if (!ScanGCCForMultilibs(TargetTriple, Args, LI->path(), in ScanLibDirForGCCTriple()
2989 "/config-" + CandidateTriple.str())); in ScanGentooGccConfig()
2992 File.get()->getBuffer().split(Lines, "\n"); in ScanGentooGccConfig()
2995 // CURRENT=triple-version in ScanGentooGccConfig()
3002 std::pair<StringRef, StringRef> ActiveVersion = Line.rsplit('-'); in ScanGentooGccConfig()
3007 // LDPATH="/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.x:/usr/lib/gcc/ in ScanGentooGccConfig()
3008 // (continued from previous line) x86_64-pc-linux-gnu/4.9.x/32" in ScanGentooGccConfig()
3009 // MANPATH="/usr/share/gcc-data/x86_64-pc-linux-gnu/4.9.x/man" in ScanGentooGccConfig()
3010 // INFOPATH="/usr/share/gcc-data/x86_64-pc-linux-gnu/4.9.x/info" in ScanGentooGccConfig()
3011 // STDCXX_INCDIR="/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.x/include/g++-v4" in ScanGentooGccConfig()
3015 ConfigFile.get()->getBuffer().split(ConfigLines, "\n"); in ScanGentooGccConfig()
3023 ConfLine.split(GentooScanPaths, ':', -1, /*AllowEmpty*/ false); in ScanGentooGccConfig()
3027 // Test the path based on the version in /etc/env.d/gcc/config-{tuple}. in ScanGentooGccConfig()
3087 CudaInstallation->print(OS); in printVerboseInfo()
3088 RocmInstallation->print(OS); in printVerboseInfo()
3142 // Cross-compiling binutils and GCC installations (vanilla and openSUSE at in PushPPaths()
3143 // least) put various tools in a triple-prefixed directory off of the parent in PushPPaths()
3147 // targeting x86_64, but it is a bi-arch GCC installation, it can also be in PushPPaths()
3169 // a biarch-like suffix of the GCC installation. in AddMultilibPaths()
3181 // For GCC built with --enable-version-specific-runtime-libs. in AddMultilibPaths()
3286 // First add the per-target include path if it exists. in addLibCxxIncludePaths()
3308 // they contain an Android-specific target include path, otherwise they're in addLibCxxIncludePaths()
3315 // If this is a development, non-installed, clang, libcxx will in addLibCxxIncludePaths()
3336 // Debian native gcc uses g++-multiarch-incdir.diff which uses in addLibStdCXXIncludePaths()
3337 // include/x86_64-linux-gnu/c++/10$IncludeSuffix instead of in addLibStdCXXIncludePaths()
3338 // include/c++/10/x86_64-linux-gnu$IncludeSuffix. in addLibStdCXXIncludePaths()
3350 // GPLUSPLUS_TOOL_INCLUDE_DIR. If Triple is not empty, add a target-dependent in addLibStdCXXIncludePaths()
3376 // Try /../$triple/include/c++/$version (gcc --print-multiarch is not empty). in addGCCLibStdCxxIncludePaths()
3382 // Try /gcc/$triple/$version/include/c++/ (gcc --print-multiarch is not in addGCCLibStdCxxIncludePaths()
3384 // --enable-version-specific-runtime-libs. in addGCCLibStdCxxIncludePaths()
3391 // Detect Debian g++-multiarch-incdir.diff. in addGCCLibStdCxxIncludePaths()
3394 DriverArgs, CC1Args, /*Debian=*/true)) in addGCCLibStdCxxIncludePaths()
3397 // Try /../include/c++/$version (gcc --print-multiarch is empty). in addGCCLibStdCxxIncludePaths()
3408 InstallDir.str() + "/include/g++-v" + Version.Text, in addGCCLibStdCxxIncludePaths()
3409 InstallDir.str() + "/include/g++-v" + Version.MajorStr + "." + in addGCCLibStdCxxIncludePaths()
3411 InstallDir.str() + "/include/g++-v" + Version.MajorStr, in addGCCLibStdCxxIncludePaths()
3445 DAL->AddFlagArg(/*BaseArg=*/nullptr, Opts.getOption(options::OPT_shared)); in TranslateArgs()
3446 DAL->AddFlagArg(/*BaseArg=*/nullptr, Opts.getOption(options::OPT_fPIC)); in TranslateArgs()
3451 switch ((options::ID)A->getOption().getID()) { in TranslateArgs()
3453 DAL->append(A); in TranslateArgs()
3481 CC1Args.push_back("-fno-use-init-array"); in addClangTargetOptions()