@zigc/lib 0.16.0-test.1 → 0.17.0-dev.131
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +19 -0
- package/c/fcntl.zig +6 -1
- package/c/inttypes.zig +0 -10
- package/c/math.zig +138 -114
- package/c/pthread.zig +57 -0
- package/c/search.zig +1 -27
- package/c/stdlib/drand48.zig +0 -57
- package/c/stdlib.zig +0 -100
- package/c/string.zig +20 -7
- package/c/strings.zig +0 -38
- package/c/stropts.zig +17 -0
- package/c/unistd.zig +27 -26
- package/c/wchar.zig +10 -0
- package/c.zig +3 -2
- package/compiler/aro/aro/Attribute/names.zig +604 -589
- package/compiler/aro/aro/Attribute.zig +202 -116
- package/compiler/aro/aro/Builtins/common.zig +874 -863
- package/compiler/aro/aro/Builtins/eval.zig +15 -7
- package/compiler/aro/aro/Builtins.zig +0 -1
- package/compiler/aro/aro/CodeGen.zig +8 -7
- package/compiler/aro/aro/Compilation.zig +137 -111
- package/compiler/aro/aro/Diagnostics.zig +21 -17
- package/compiler/aro/aro/Driver/GCCDetector.zig +635 -0
- package/compiler/aro/aro/Driver.zig +138 -63
- package/compiler/aro/aro/LangOpts.zig +12 -2
- package/compiler/aro/aro/Parser/Diagnostic.zig +79 -19
- package/compiler/aro/aro/Parser.zig +352 -153
- package/compiler/aro/aro/Pragma.zig +3 -2
- package/compiler/aro/aro/Preprocessor/Diagnostic.zig +21 -0
- package/compiler/aro/aro/Preprocessor.zig +136 -62
- package/compiler/aro/aro/Target.zig +17 -12
- package/compiler/aro/aro/Tokenizer.zig +31 -14
- package/compiler/aro/aro/Toolchain.zig +4 -7
- package/compiler/aro/aro/Tree.zig +178 -148
- package/compiler/aro/aro/TypeStore.zig +82 -24
- package/compiler/aro/aro/Value.zig +13 -17
- package/compiler/aro/aro/features.zig +1 -0
- package/compiler/aro/aro/pragmas/message.zig +3 -2
- package/compiler/aro/aro/pragmas/once.zig +0 -1
- package/compiler/aro/aro/record_layout.zig +3 -3
- package/compiler/aro/aro/text_literal.zig +3 -2
- package/compiler/aro/assembly_backend/x86_64.zig +7 -8
- package/compiler/aro/backend/Assembly.zig +1 -2
- package/compiler/aro/backend/Interner.zig +2 -2
- package/compiler/aro/backend/Ir.zig +100 -92
- package/compiler/aro/include/ptrcheck.h +49 -0
- package/compiler/aro/main.zig +26 -10
- package/compiler/build_runner.zig +1 -2
- package/compiler/objdump.zig +93 -0
- package/compiler/reduce/Walk.zig +7 -7
- package/compiler/reduce.zig +5 -1
- package/compiler/resinator/compile.zig +2 -2
- package/compiler/resinator/main.zig +7 -1
- package/compiler/resinator/preprocess.zig +1 -3
- package/compiler/std-docs.zig +8 -1
- package/compiler/test_runner.zig +194 -62
- package/compiler/translate-c/MacroTranslator.zig +80 -11
- package/compiler/translate-c/PatternList.zig +1 -9
- package/compiler/translate-c/Scope.zig +43 -6
- package/compiler/translate-c/Translator.zig +369 -127
- package/compiler/translate-c/ast.zig +19 -11
- package/compiler/translate-c/main.zig +76 -17
- package/compiler_rt/cos.zig +140 -53
- package/compiler_rt/divmodei4.zig +40 -17
- package/compiler_rt/exp.zig +1 -6
- package/compiler_rt/exp2.zig +1 -6
- package/compiler_rt/exp_f128.zig +377 -0
- package/compiler_rt/fabs.zig +0 -2
- package/compiler_rt/fma.zig +0 -2
- package/compiler_rt/fmax.zig +0 -2
- package/compiler_rt/fmin.zig +0 -2
- package/compiler_rt/fmod.zig +0 -2
- package/compiler_rt/limb64.zig +1127 -0
- package/compiler_rt/log.zig +0 -2
- package/compiler_rt/log10.zig +0 -2
- package/compiler_rt/log2.zig +0 -2
- package/compiler_rt/long_double.zig +37 -0
- package/compiler_rt/mulXi3.zig +1 -1
- package/compiler_rt/mulo.zig +6 -1
- package/compiler_rt/rem_pio2l.zig +173 -0
- package/compiler_rt/round.zig +0 -2
- package/compiler_rt/sin.zig +139 -56
- package/compiler_rt/sincos.zig +277 -72
- package/compiler_rt/sqrt.zig +0 -2
- package/compiler_rt/ssp.zig +1 -1
- package/compiler_rt/tan.zig +117 -48
- package/compiler_rt/trig.zig +256 -6
- package/compiler_rt/trunc.zig +0 -2
- package/compiler_rt/udivmodei4.zig +28 -0
- package/compiler_rt.zig +2 -0
- package/fuzzer.zig +857 -307
- package/libc/musl/arch/mipsn32/syscall_arch.h +35 -32
- package/libc/musl/src/math/pow.c +343 -0
- package/package.json +1 -1
- package/std/Build/Cache.zig +6 -6
- package/std/Build/Fuzz.zig +6 -19
- package/std/Build/Module.zig +1 -1
- package/std/Build/Step/CheckObject.zig +3 -3
- package/std/Build/Step/Compile.zig +18 -1
- package/std/Build/Step/ConfigHeader.zig +49 -33
- package/std/Build/Step/InstallArtifact.zig +18 -0
- package/std/Build/Step/Run.zig +538 -89
- package/std/Build/Step/TranslateC.zig +0 -6
- package/std/Build/Step.zig +10 -19
- package/std/Build/WebServer.zig +31 -19
- package/std/Build/abi.zig +47 -11
- package/std/Build.zig +17 -17
- package/std/Io/Dir.zig +7 -2
- package/std/Io/Dispatch.zig +5 -13
- package/std/Io/File/Reader.zig +3 -1
- package/std/Io/File/Writer.zig +8 -6
- package/std/Io/File.zig +1 -0
- package/std/Io/Kqueue.zig +2 -2
- package/std/Io/Reader.zig +8 -9
- package/std/Io/Semaphore.zig +112 -17
- package/std/Io/Terminal.zig +1 -1
- package/std/Io/Threaded.zig +352 -180
- package/std/Io/Uring.zig +15 -16
- package/std/Io/Writer.zig +46 -42
- package/std/Io/net.zig +11 -11
- package/std/Io.zig +1052 -20
- package/std/SemanticVersion.zig +1 -1
- package/std/Target/Query.zig +2 -2
- package/std/Target.zig +53 -7
- package/std/Thread.zig +8 -3
- package/std/array_hash_map.zig +105 -573
- package/std/array_list.zig +22 -31
- package/std/bit_set.zig +22 -6
- package/std/builtin/assembly.zig +68 -0
- package/std/builtin.zig +4 -0
- package/std/c/haiku.zig +3 -0
- package/std/c/serenity.zig +1 -6
- package/std/c.zig +106 -24
- package/std/compress/flate/Compress.zig +3 -3
- package/std/compress/flate/Decompress.zig +2 -3
- package/std/compress/zstd/Decompress.zig +2 -4
- package/std/crypto/Certificate/Bundle.zig +15 -1
- package/std/crypto/Certificate.zig +13 -1
- package/std/crypto/ascon.zig +75 -33
- package/std/crypto/codecs/asn1/Oid.zig +12 -1
- package/std/crypto/codecs/asn1.zig +33 -18
- package/std/crypto/codecs/base64_hex_ct.zig +16 -8
- package/std/crypto/ml_kem.zig +2 -9
- package/std/crypto/tls/Client.zig +79 -4
- package/std/crypto/tls.zig +1 -1
- package/std/crypto.zig +1 -0
- package/std/debug/Dwarf.zig +29 -9
- package/std/debug/Info.zig +4 -0
- package/std/debug/MachOFile.zig +46 -8
- package/std/debug/Pdb.zig +540 -37
- package/std/debug/SelfInfo/Elf.zig +19 -18
- package/std/debug/SelfInfo/MachO.zig +18 -7
- package/std/debug/SelfInfo/Windows.zig +138 -36
- package/std/debug.zig +181 -66
- package/std/enums.zig +25 -19
- package/std/fmt.zig +8 -3
- package/std/fs/path.zig +6 -4
- package/std/heap/ArenaAllocator.zig +145 -154
- package/std/heap/BufferFirstAllocator.zig +165 -0
- package/std/heap/debug_allocator.zig +7 -7
- package/std/heap.zig +2 -126
- package/std/http/Client.zig +31 -30
- package/std/http.zig +14 -13
- package/std/json/Scanner.zig +2 -2
- package/std/json/Stringify.zig +3 -3
- package/std/json/dynamic.zig +4 -4
- package/std/math/big/int.zig +16 -17
- package/std/mem/Allocator.zig +4 -5
- package/std/mem.zig +48 -0
- package/std/os/emscripten.zig +2 -18
- package/std/os/linux/IoUring.zig +2 -0
- package/std/os/linux/aarch64.zig +41 -12
- package/std/os/linux/arc.zig +173 -0
- package/std/os/linux/arm.zig +41 -12
- package/std/os/linux/hexagon.zig +33 -11
- package/std/os/linux/loongarch32.zig +41 -13
- package/std/os/linux/loongarch64.zig +41 -12
- package/std/os/linux/m68k.zig +41 -13
- package/std/os/linux/mips.zig +67 -36
- package/std/os/linux/mips64.zig +60 -29
- package/std/os/linux/mipsn32.zig +60 -29
- package/std/os/linux/or1k.zig +41 -12
- package/std/os/linux/powerpc.zig +41 -12
- package/std/os/linux/powerpc64.zig +41 -12
- package/std/os/linux/riscv32.zig +41 -12
- package/std/os/linux/riscv64.zig +41 -12
- package/std/os/linux/s390x.zig +44 -7
- package/std/os/linux/sparc64.zig +83 -52
- package/std/os/linux/thumb.zig +52 -36
- package/std/os/linux/x32.zig +41 -12
- package/std/os/linux/x86.zig +42 -13
- package/std/os/linux/x86_64.zig +41 -12
- package/std/os/linux.zig +419 -438
- package/std/os/uefi/tables/boot_services.zig +9 -8
- package/std/os/windows.zig +2 -2
- package/std/os.zig +41 -0
- package/std/pdb.zig +143 -4
- package/std/posix.zig +6 -12
- package/std/priority_dequeue.zig +13 -12
- package/std/priority_queue.zig +5 -4
- package/std/process/Child.zig +1 -1
- package/std/process/Environ.zig +1 -1
- package/std/process.zig +1 -1
- package/std/sort.zig +3 -3
- package/std/start.zig +17 -4
- package/std/std.zig +19 -6
- package/std/testing/FailingAllocator.zig +4 -4
- package/std/testing/Smith.zig +37 -2
- package/std/zig/Ast/Render.zig +187 -459
- package/std/zig/Ast.zig +0 -4
- package/std/zig/AstGen.zig +86 -103
- package/std/zig/AstRlAnnotate.zig +0 -11
- package/std/zig/AstSmith.zig +2602 -0
- package/std/zig/BuiltinFn.zig +0 -32
- package/std/zig/Client.zig +8 -3
- package/std/zig/LibCInstallation.zig +4 -3
- package/std/zig/Parse.zig +90 -81
- package/std/zig/Server.zig +26 -0
- package/std/zig/WindowsSdk.zig +13 -13
- package/std/zig/Zir.zig +66 -62
- package/std/zig/ZonGen.zig +6 -5
- package/std/zig/c_translation/helpers.zig +14 -9
- package/std/zig/llvm/Builder.zig +119 -60
- package/std/zig/system.zig +20 -4
- package/std/zig/tokenizer.zig +2 -1
- package/std/zig.zig +7 -10
- package/std/zip.zig +5 -5
- package/zig.h +340 -1
- package/compiler/aro/aro/Driver/Filesystem.zig +0 -241
- package/libc/mingw/complex/cabs.c +0 -48
- package/libc/mingw/complex/cabsf.c +0 -48
- package/libc/mingw/complex/cacos.c +0 -50
- package/libc/mingw/complex/cacosf.c +0 -50
- package/libc/mingw/complex/carg.c +0 -48
- package/libc/mingw/complex/cargf.c +0 -48
- package/libc/mingw/complex/casin.c +0 -50
- package/libc/mingw/complex/casinf.c +0 -50
- package/libc/mingw/complex/catan.c +0 -50
- package/libc/mingw/complex/catanf.c +0 -50
- package/libc/mingw/complex/ccos.c +0 -50
- package/libc/mingw/complex/ccosf.c +0 -50
- package/libc/mingw/complex/cexp.c +0 -48
- package/libc/mingw/complex/cexpf.c +0 -48
- package/libc/mingw/complex/cimag.c +0 -48
- package/libc/mingw/complex/cimagf.c +0 -48
- package/libc/mingw/complex/clog.c +0 -48
- package/libc/mingw/complex/clog10.c +0 -49
- package/libc/mingw/complex/clog10f.c +0 -49
- package/libc/mingw/complex/clogf.c +0 -48
- package/libc/mingw/complex/conj.c +0 -48
- package/libc/mingw/complex/conjf.c +0 -48
- package/libc/mingw/complex/cpow.c +0 -48
- package/libc/mingw/complex/cpowf.c +0 -48
- package/libc/mingw/complex/cproj.c +0 -48
- package/libc/mingw/complex/cprojf.c +0 -48
- package/libc/mingw/complex/creal.c +0 -48
- package/libc/mingw/complex/crealf.c +0 -48
- package/libc/mingw/complex/csin.c +0 -50
- package/libc/mingw/complex/csinf.c +0 -50
- package/libc/mingw/complex/csqrt.c +0 -48
- package/libc/mingw/complex/csqrtf.c +0 -48
- package/libc/mingw/complex/ctan.c +0 -50
- package/libc/mingw/complex/ctanf.c +0 -50
- package/libc/mingw/math/arm/s_rint.c +0 -86
- package/libc/mingw/math/arm/s_rintf.c +0 -51
- package/libc/mingw/math/arm/sincos.S +0 -30
- package/libc/mingw/math/arm-common/sincosl.c +0 -13
- package/libc/mingw/math/arm64/rint.c +0 -12
- package/libc/mingw/math/arm64/rintf.c +0 -12
- package/libc/mingw/math/arm64/sincos.S +0 -32
- package/libc/mingw/math/bsd_private_base.h +0 -148
- package/libc/mingw/math/fdiml.c +0 -24
- package/libc/mingw/math/frexpf.c +0 -13
- package/libc/mingw/math/frexpl.c +0 -71
- package/libc/mingw/math/x86/acosf.c +0 -29
- package/libc/mingw/math/x86/atanf.c +0 -23
- package/libc/mingw/math/x86/atanl.c +0 -18
- package/libc/mingw/math/x86/cos.def.h +0 -65
- package/libc/mingw/math/x86/cosl.c +0 -46
- package/libc/mingw/math/x86/cosl_internal.S +0 -55
- package/libc/mingw/math/x86/ldexp.c +0 -23
- package/libc/mingw/math/x86/scalbn.S +0 -41
- package/libc/mingw/math/x86/scalbnf.S +0 -40
- package/libc/mingw/math/x86/sin.def.h +0 -65
- package/libc/mingw/math/x86/sinl.c +0 -46
- package/libc/mingw/math/x86/sinl_internal.S +0 -58
- package/libc/mingw/math/x86/tanl.S +0 -62
- package/libc/mingw/misc/btowc.c +0 -28
- package/libc/mingw/misc/wcstof.c +0 -66
- package/libc/mingw/misc/wcstoimax.c +0 -132
- package/libc/mingw/misc/wcstoumax.c +0 -126
- package/libc/mingw/misc/wctob.c +0 -29
- package/libc/mingw/misc/winbs_uint64.c +0 -6
- package/libc/mingw/misc/winbs_ulong.c +0 -6
- package/libc/mingw/misc/winbs_ushort.c +0 -6
- package/libc/mingw/stdio/_Exit.c +0 -10
- package/libc/mingw/stdio/_findfirst64i32.c +0 -21
- package/libc/mingw/stdio/_findnext64i32.c +0 -21
- package/libc/mingw/stdio/_fstat64i32.c +0 -37
- package/libc/mingw/stdio/_stat64i32.c +0 -37
- package/libc/mingw/stdio/_wfindfirst64i32.c +0 -21
- package/libc/mingw/stdio/_wfindnext64i32.c +0 -21
- package/libc/mingw/stdio/_wstat64i32.c +0 -37
- package/libc/mingw/winpthreads/spinlock.c +0 -82
- package/libc/musl/src/legacy/isastream.c +0 -7
- package/libc/musl/src/legacy/valloc.c +0 -8
- package/libc/musl/src/linux/tee.c +0 -8
- package/libc/musl/src/math/__cosl.c +0 -96
- package/libc/musl/src/math/__sinl.c +0 -78
- package/libc/musl/src/math/__tanl.c +0 -143
- package/libc/musl/src/math/aarch64/lrint.c +0 -10
- package/libc/musl/src/math/aarch64/lrintf.c +0 -10
- package/libc/musl/src/math/aarch64/rintf.c +0 -7
- package/libc/musl/src/math/cosl.c +0 -39
- package/libc/musl/src/math/fdim.c +0 -10
- package/libc/musl/src/math/fdimf.c +0 -10
- package/libc/musl/src/math/fdiml.c +0 -18
- package/libc/musl/src/math/finite.c +0 -7
- package/libc/musl/src/math/finitef.c +0 -7
- package/libc/musl/src/math/frexp.c +0 -23
- package/libc/musl/src/math/frexpf.c +0 -23
- package/libc/musl/src/math/frexpl.c +0 -29
- package/libc/musl/src/math/i386/lrint.c +0 -8
- package/libc/musl/src/math/i386/lrintf.c +0 -8
- package/libc/musl/src/math/i386/rintf.c +0 -7
- package/libc/musl/src/math/lrint.c +0 -72
- package/libc/musl/src/math/lrintf.c +0 -8
- package/libc/musl/src/math/powerpc64/lrint.c +0 -16
- package/libc/musl/src/math/powerpc64/lrintf.c +0 -16
- package/libc/musl/src/math/rintf.c +0 -30
- package/libc/musl/src/math/s390x/rintf.c +0 -15
- package/libc/musl/src/math/sincosl.c +0 -60
- package/libc/musl/src/math/sinl.c +0 -41
- package/libc/musl/src/math/tanl.c +0 -29
- package/libc/musl/src/math/x32/lrint.s +0 -5
- package/libc/musl/src/math/x32/lrintf.s +0 -5
- package/libc/musl/src/math/x86_64/lrint.c +0 -8
- package/libc/musl/src/math/x86_64/lrintf.c +0 -8
- package/libc/musl/src/string/strdup.c +0 -10
- package/libc/musl/src/string/strndup.c +0 -12
- package/libc/musl/src/string/wcsdup.c +0 -10
- package/libc/musl/src/thread/pthread_spin_destroy.c +0 -6
- package/libc/musl/src/thread/pthread_spin_init.c +0 -6
- package/libc/musl/src/thread/pthread_spin_lock.c +0 -8
- package/libc/musl/src/thread/pthread_spin_trylock.c +0 -7
- package/libc/musl/src/thread/pthread_spin_unlock.c +0 -7
- package/libc/musl/src/unistd/dup2.c +0 -20
- package/libc/musl/src/unistd/dup3.c +0 -26
- package/libc/wasi/libc-bottom-half/sources/reallocarray.c +0 -14
- package/libc/wasi/thread-stub/pthread_spin_lock.c +0 -8
- package/libc/wasi/thread-stub/pthread_spin_trylock.c +0 -8
- package/libc/wasi/thread-stub/pthread_spin_unlock.c +0 -7
|
@@ -0,0 +1,635 @@
|
|
|
1
|
+
const std = @import("std");
|
|
2
|
+
|
|
3
|
+
const system_defaults = @import("system_defaults");
|
|
4
|
+
|
|
5
|
+
const GCCVersion = @import("GCCVersion.zig");
|
|
6
|
+
const Multilib = @import("Multilib.zig");
|
|
7
|
+
const Target = @import("../Target.zig");
|
|
8
|
+
const Toolchain = @import("../Toolchain.zig");
|
|
9
|
+
|
|
10
|
+
const GCCDetector = @This();
|
|
11
|
+
|
|
12
|
+
is_valid: bool = false,
|
|
13
|
+
install_path: []const u8 = "",
|
|
14
|
+
parent_lib_path: []const u8 = "",
|
|
15
|
+
version: GCCVersion = .{},
|
|
16
|
+
gcc_triple: []const u8 = "",
|
|
17
|
+
selected: Multilib = .{},
|
|
18
|
+
biarch_sibling: ?Multilib = null,
|
|
19
|
+
|
|
20
|
+
pub fn deinit(self: *GCCDetector) void {
|
|
21
|
+
if (!self.is_valid) return;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
pub fn appendToolPath(self: *const GCCDetector, tc: *Toolchain) !void {
|
|
25
|
+
if (!self.is_valid) return;
|
|
26
|
+
return tc.addPathFromComponents(&.{
|
|
27
|
+
self.parent_lib_path,
|
|
28
|
+
"..",
|
|
29
|
+
self.gcc_triple,
|
|
30
|
+
"bin",
|
|
31
|
+
}, .program);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
fn addDefaultGCCPrefixes(prefixes: *std.ArrayList([]const u8), tc: *const Toolchain) !void {
|
|
35
|
+
const sysroot = tc.getSysroot();
|
|
36
|
+
const target = tc.getTarget();
|
|
37
|
+
if (sysroot.len == 0 and target.os.tag == .linux and tc.exists("/opt/rh")) {
|
|
38
|
+
prefixes.appendAssumeCapacity("/opt/rh/gcc-toolset-12/root/usr");
|
|
39
|
+
prefixes.appendAssumeCapacity("/opt/rh/gcc-toolset-11/root/usr");
|
|
40
|
+
prefixes.appendAssumeCapacity("/opt/rh/gcc-toolset-10/root/usr");
|
|
41
|
+
prefixes.appendAssumeCapacity("/opt/rh/devtoolset-12/root/usr");
|
|
42
|
+
prefixes.appendAssumeCapacity("/opt/rh/devtoolset-11/root/usr");
|
|
43
|
+
prefixes.appendAssumeCapacity("/opt/rh/devtoolset-10/root/usr");
|
|
44
|
+
prefixes.appendAssumeCapacity("/opt/rh/devtoolset-9/root/usr");
|
|
45
|
+
prefixes.appendAssumeCapacity("/opt/rh/devtoolset-8/root/usr");
|
|
46
|
+
prefixes.appendAssumeCapacity("/opt/rh/devtoolset-7/root/usr");
|
|
47
|
+
prefixes.appendAssumeCapacity("/opt/rh/devtoolset-6/root/usr");
|
|
48
|
+
prefixes.appendAssumeCapacity("/opt/rh/devtoolset-4/root/usr");
|
|
49
|
+
prefixes.appendAssumeCapacity("/opt/rh/devtoolset-3/root/usr");
|
|
50
|
+
prefixes.appendAssumeCapacity("/opt/rh/devtoolset-2/root/usr");
|
|
51
|
+
}
|
|
52
|
+
if (sysroot.len == 0) {
|
|
53
|
+
prefixes.appendAssumeCapacity("/usr");
|
|
54
|
+
} else {
|
|
55
|
+
var usr_path = try tc.driver.comp.arena.alloc(u8, 4 + sysroot.len);
|
|
56
|
+
@memcpy(usr_path[0..4], "/usr");
|
|
57
|
+
@memcpy(usr_path[4..], sysroot);
|
|
58
|
+
prefixes.appendAssumeCapacity(usr_path);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
fn collectLibDirsAndTriples(
|
|
63
|
+
tc: *Toolchain,
|
|
64
|
+
lib_dirs: *std.ArrayList([]const u8),
|
|
65
|
+
triple_aliases: *std.ArrayList([]const u8),
|
|
66
|
+
biarch_libdirs: *std.ArrayList([]const u8),
|
|
67
|
+
biarch_triple_aliases: *std.ArrayList([]const u8),
|
|
68
|
+
) !void {
|
|
69
|
+
const AArch64LibDirs: [2][]const u8 = .{ "/lib64", "/lib" };
|
|
70
|
+
const AArch64Triples: [4][]const u8 = .{ "aarch64-none-linux-gnu", "aarch64-linux-gnu", "aarch64-redhat-linux", "aarch64-suse-linux" };
|
|
71
|
+
const AArch64beLibDirs: [1][]const u8 = .{"/lib"};
|
|
72
|
+
const AArch64beTriples: [2][]const u8 = .{ "aarch64_be-none-linux-gnu", "aarch64_be-linux-gnu" };
|
|
73
|
+
|
|
74
|
+
const ARMLibDirs: [1][]const u8 = .{"/lib"};
|
|
75
|
+
const ARMTriples: [1][]const u8 = .{"arm-linux-gnueabi"};
|
|
76
|
+
const ARMHFTriples: [4][]const u8 = .{ "arm-linux-gnueabihf", "armv7hl-redhat-linux-gnueabi", "armv6hl-suse-linux-gnueabi", "armv7hl-suse-linux-gnueabi" };
|
|
77
|
+
|
|
78
|
+
const ARMebLibDirs: [1][]const u8 = .{"/lib"};
|
|
79
|
+
const ARMebTriples: [1][]const u8 = .{"armeb-linux-gnueabi"};
|
|
80
|
+
const ARMebHFTriples: [2][]const u8 = .{ "armeb-linux-gnueabihf", "armebv7hl-redhat-linux-gnueabi" };
|
|
81
|
+
|
|
82
|
+
const AVRLibDirs: [1][]const u8 = .{"/lib"};
|
|
83
|
+
const AVRTriples: [1][]const u8 = .{"avr"};
|
|
84
|
+
|
|
85
|
+
const CSKYLibDirs: [1][]const u8 = .{"/lib"};
|
|
86
|
+
const CSKYTriples: [3][]const u8 = .{ "csky-linux-gnuabiv2", "csky-linux-uclibcabiv2", "csky-elf-noneabiv2" };
|
|
87
|
+
|
|
88
|
+
const X86_64LibDirs: [2][]const u8 = .{ "/lib64", "/lib" };
|
|
89
|
+
const X86_64Triples: [11][]const u8 = .{
|
|
90
|
+
"x86_64-linux-gnu", "x86_64-unknown-linux-gnu",
|
|
91
|
+
"x86_64-pc-linux-gnu", "x86_64-redhat-linux6E",
|
|
92
|
+
"x86_64-redhat-linux", "x86_64-suse-linux",
|
|
93
|
+
"x86_64-manbo-linux-gnu", "x86_64-linux-gnu",
|
|
94
|
+
"x86_64-slackware-linux", "x86_64-unknown-linux",
|
|
95
|
+
"x86_64-amazon-linux",
|
|
96
|
+
};
|
|
97
|
+
const X32Triples: [2][]const u8 = .{ "x86_64-linux-gnux32", "x86_64-pc-linux-gnux32" };
|
|
98
|
+
const X32LibDirs: [2][]const u8 = .{ "/libx32", "/lib" };
|
|
99
|
+
const X86LibDirs: [2][]const u8 = .{ "/lib32", "/lib" };
|
|
100
|
+
const X86Triples: [9][]const u8 = .{
|
|
101
|
+
"i586-linux-gnu", "i686-linux-gnu", "i686-pc-linux-gnu",
|
|
102
|
+
"i386-redhat-linux6E", "i686-redhat-linux", "i386-redhat-linux",
|
|
103
|
+
"i586-suse-linux", "i686-montavista-linux", "i686-gnu",
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
const LoongArch64LibDirs: [2][]const u8 = .{ "/lib64", "/lib" };
|
|
107
|
+
const LoongArch64Triples: [2][]const u8 = .{ "loongarch64-linux-gnu", "loongarch64-unknown-linux-gnu" };
|
|
108
|
+
|
|
109
|
+
const M68kLibDirs: [1][]const u8 = .{"/lib"};
|
|
110
|
+
const M68kTriples: [3][]const u8 = .{ "m68k-linux-gnu", "m68k-unknown-linux-gnu", "m68k-suse-linux" };
|
|
111
|
+
|
|
112
|
+
const MIPSLibDirs: [2][]const u8 = .{ "/libo32", "/lib" };
|
|
113
|
+
const MIPSTriples: [5][]const u8 = .{
|
|
114
|
+
"mips-linux-gnu", "mips-mti-linux",
|
|
115
|
+
"mips-mti-linux-gnu", "mips-img-linux-gnu",
|
|
116
|
+
"mipsisa32r6-linux-gnu",
|
|
117
|
+
};
|
|
118
|
+
const MIPSELLibDirs: [2][]const u8 = .{ "/libo32", "/lib" };
|
|
119
|
+
const MIPSELTriples: [3][]const u8 = .{ "mipsel-linux-gnu", "mips-img-linux-gnu", "mipsisa32r6el-linux-gnu" };
|
|
120
|
+
|
|
121
|
+
const MIPS64LibDirs: [2][]const u8 = .{ "/lib64", "/lib" };
|
|
122
|
+
const MIPS64Triples: [6][]const u8 = .{
|
|
123
|
+
"mips64-linux-gnu", "mips-mti-linux-gnu",
|
|
124
|
+
"mips-img-linux-gnu", "mips64-linux-gnuabi64",
|
|
125
|
+
"mipsisa64r6-linux-gnu", "mipsisa64r6-linux-gnuabi64",
|
|
126
|
+
};
|
|
127
|
+
const MIPS64ELLibDirs: [2][]const u8 = .{ "/lib64", "/lib" };
|
|
128
|
+
const MIPS64ELTriples: [6][]const u8 = .{
|
|
129
|
+
"mips64el-linux-gnu", "mips-mti-linux-gnu",
|
|
130
|
+
"mips-img-linux-gnu", "mips64el-linux-gnuabi64",
|
|
131
|
+
"mipsisa64r6el-linux-gnu", "mipsisa64r6el-linux-gnuabi64",
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
const MIPSN32LibDirs: [1][]const u8 = .{"/lib32"};
|
|
135
|
+
const MIPSN32Triples: [2][]const u8 = .{ "mips64-linux-gnuabin32", "mipsisa64r6-linux-gnuabin32" };
|
|
136
|
+
const MIPSN32ELLibDirs: [1][]const u8 = .{"/lib32"};
|
|
137
|
+
const MIPSN32ELTriples: [2][]const u8 = .{ "mips64el-linux-gnuabin32", "mipsisa64r6el-linux-gnuabin32" };
|
|
138
|
+
|
|
139
|
+
const MSP430LibDirs: [1][]const u8 = .{"/lib"};
|
|
140
|
+
const MSP430Triples: [1][]const u8 = .{"msp430-elf"};
|
|
141
|
+
|
|
142
|
+
const PPCLibDirs: [2][]const u8 = .{ "/lib32", "/lib" };
|
|
143
|
+
const PPCTriples: [5][]const u8 = .{
|
|
144
|
+
"powerpc-linux-gnu", "powerpc-unknown-linux-gnu", "powerpc-linux-gnuspe",
|
|
145
|
+
// On 32-bit PowerPC systems running SUSE Linux, gcc is configured as a
|
|
146
|
+
// 64-bit compiler which defaults to "-m32", hence "powerpc64-suse-linux".
|
|
147
|
+
"powerpc64-suse-linux", "powerpc-montavista-linuxspe",
|
|
148
|
+
};
|
|
149
|
+
const PPCLELibDirs: [2][]const u8 = .{ "/lib32", "/lib" };
|
|
150
|
+
const PPCLETriples: [3][]const u8 = .{ "powerpcle-linux-gnu", "powerpcle-unknown-linux-gnu", "powerpcle-linux-musl" };
|
|
151
|
+
|
|
152
|
+
const PPC64LibDirs: [2][]const u8 = .{ "/lib64", "/lib" };
|
|
153
|
+
const PPC64Triples: [4][]const u8 = .{
|
|
154
|
+
"powerpc64-linux-gnu", "powerpc64-unknown-linux-gnu",
|
|
155
|
+
"powerpc64-suse-linux", "ppc64-redhat-linux",
|
|
156
|
+
};
|
|
157
|
+
const PPC64LELibDirs: [2][]const u8 = .{ "/lib64", "/lib" };
|
|
158
|
+
const PPC64LETriples: [5][]const u8 = .{
|
|
159
|
+
"powerpc64le-linux-gnu", "powerpc64le-unknown-linux-gnu",
|
|
160
|
+
"powerpc64le-none-linux-gnu", "powerpc64le-suse-linux",
|
|
161
|
+
"ppc64le-redhat-linux",
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
const RISCV32LibDirs: [2][]const u8 = .{ "/lib32", "/lib" };
|
|
165
|
+
const RISCV32Triples: [3][]const u8 = .{ "riscv32-unknown-linux-gnu", "riscv32-linux-gnu", "riscv32-unknown-elf" };
|
|
166
|
+
const RISCV64LibDirs: [2][]const u8 = .{ "/lib64", "/lib" };
|
|
167
|
+
const RISCV64Triples: [3][]const u8 = .{
|
|
168
|
+
"riscv64-unknown-linux-gnu",
|
|
169
|
+
"riscv64-linux-gnu",
|
|
170
|
+
"riscv64-unknown-elf",
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
const SPARCv8LibDirs: [2][]const u8 = .{ "/lib32", "/lib" };
|
|
174
|
+
const SPARCv8Triples: [2][]const u8 = .{ "sparc-linux-gnu", "sparcv8-linux-gnu" };
|
|
175
|
+
const SPARCv9LibDirs: [2][]const u8 = .{ "/lib64", "/lib" };
|
|
176
|
+
const SPARCv9Triples: [2][]const u8 = .{ "sparc64-linux-gnu", "sparcv9-linux-gnu" };
|
|
177
|
+
|
|
178
|
+
const SystemZLibDirs: [2][]const u8 = .{ "/lib64", "/lib" };
|
|
179
|
+
const SystemZTriples: [5][]const u8 = .{
|
|
180
|
+
"s390x-linux-gnu", "s390x-unknown-linux-gnu", "s390x-ibm-linux-gnu",
|
|
181
|
+
"s390x-suse-linux", "s390x-redhat-linux",
|
|
182
|
+
};
|
|
183
|
+
const target = tc.getTarget();
|
|
184
|
+
if (target.os.tag == .illumos) {
|
|
185
|
+
// TODO
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
if (target.abi.isAndroid()) {
|
|
189
|
+
const AArch64AndroidTriples: [1][]const u8 = .{"aarch64-linux-android"};
|
|
190
|
+
const ARMAndroidTriples: [1][]const u8 = .{"arm-linux-androideabi"};
|
|
191
|
+
const MIPSELAndroidTriples: [1][]const u8 = .{"mipsel-linux-android"};
|
|
192
|
+
const MIPS64ELAndroidTriples: [1][]const u8 = .{"mips64el-linux-android"};
|
|
193
|
+
const X86AndroidTriples: [1][]const u8 = .{"i686-linux-android"};
|
|
194
|
+
const X86_64AndroidTriples: [1][]const u8 = .{"x86_64-linux-android"};
|
|
195
|
+
|
|
196
|
+
switch (target.cpu.arch) {
|
|
197
|
+
.aarch64 => {
|
|
198
|
+
lib_dirs.appendSliceAssumeCapacity(&AArch64LibDirs);
|
|
199
|
+
triple_aliases.appendSliceAssumeCapacity(&AArch64AndroidTriples);
|
|
200
|
+
},
|
|
201
|
+
.arm,
|
|
202
|
+
.thumb,
|
|
203
|
+
=> {
|
|
204
|
+
lib_dirs.appendSliceAssumeCapacity(&ARMLibDirs);
|
|
205
|
+
triple_aliases.appendSliceAssumeCapacity(&ARMAndroidTriples);
|
|
206
|
+
},
|
|
207
|
+
.mipsel => {
|
|
208
|
+
lib_dirs.appendSliceAssumeCapacity(&MIPSELLibDirs);
|
|
209
|
+
triple_aliases.appendSliceAssumeCapacity(&MIPSELAndroidTriples);
|
|
210
|
+
biarch_libdirs.appendSliceAssumeCapacity(&MIPS64ELLibDirs);
|
|
211
|
+
biarch_triple_aliases.appendSliceAssumeCapacity(&MIPS64ELAndroidTriples);
|
|
212
|
+
},
|
|
213
|
+
.mips64el => {
|
|
214
|
+
lib_dirs.appendSliceAssumeCapacity(&MIPS64ELLibDirs);
|
|
215
|
+
triple_aliases.appendSliceAssumeCapacity(&MIPS64ELAndroidTriples);
|
|
216
|
+
biarch_libdirs.appendSliceAssumeCapacity(&MIPSELLibDirs);
|
|
217
|
+
biarch_triple_aliases.appendSliceAssumeCapacity(&MIPSELAndroidTriples);
|
|
218
|
+
},
|
|
219
|
+
.x86_64 => {
|
|
220
|
+
lib_dirs.appendSliceAssumeCapacity(&X86_64LibDirs);
|
|
221
|
+
triple_aliases.appendSliceAssumeCapacity(&X86_64AndroidTriples);
|
|
222
|
+
biarch_libdirs.appendSliceAssumeCapacity(&X86LibDirs);
|
|
223
|
+
biarch_triple_aliases.appendSliceAssumeCapacity(&X86AndroidTriples);
|
|
224
|
+
},
|
|
225
|
+
.x86 => {
|
|
226
|
+
lib_dirs.appendSliceAssumeCapacity(&X86LibDirs);
|
|
227
|
+
triple_aliases.appendSliceAssumeCapacity(&X86AndroidTriples);
|
|
228
|
+
biarch_libdirs.appendSliceAssumeCapacity(&X86_64LibDirs);
|
|
229
|
+
biarch_triple_aliases.appendSliceAssumeCapacity(&X86_64AndroidTriples);
|
|
230
|
+
},
|
|
231
|
+
else => {},
|
|
232
|
+
}
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
switch (target.cpu.arch) {
|
|
236
|
+
.aarch64 => {
|
|
237
|
+
lib_dirs.appendSliceAssumeCapacity(&AArch64LibDirs);
|
|
238
|
+
triple_aliases.appendSliceAssumeCapacity(&AArch64Triples);
|
|
239
|
+
biarch_libdirs.appendSliceAssumeCapacity(&AArch64LibDirs);
|
|
240
|
+
biarch_triple_aliases.appendSliceAssumeCapacity(&AArch64Triples);
|
|
241
|
+
},
|
|
242
|
+
.aarch64_be => {
|
|
243
|
+
lib_dirs.appendSliceAssumeCapacity(&AArch64beLibDirs);
|
|
244
|
+
triple_aliases.appendSliceAssumeCapacity(&AArch64beTriples);
|
|
245
|
+
biarch_libdirs.appendSliceAssumeCapacity(&AArch64beLibDirs);
|
|
246
|
+
biarch_triple_aliases.appendSliceAssumeCapacity(&AArch64beTriples);
|
|
247
|
+
},
|
|
248
|
+
.arm, .thumb => {
|
|
249
|
+
lib_dirs.appendSliceAssumeCapacity(&ARMLibDirs);
|
|
250
|
+
if (target.abi == .gnueabihf) {
|
|
251
|
+
triple_aliases.appendSliceAssumeCapacity(&ARMHFTriples);
|
|
252
|
+
} else {
|
|
253
|
+
triple_aliases.appendSliceAssumeCapacity(&ARMTriples);
|
|
254
|
+
}
|
|
255
|
+
},
|
|
256
|
+
.armeb, .thumbeb => {
|
|
257
|
+
lib_dirs.appendSliceAssumeCapacity(&ARMebLibDirs);
|
|
258
|
+
if (target.abi == .gnueabihf) {
|
|
259
|
+
triple_aliases.appendSliceAssumeCapacity(&ARMebHFTriples);
|
|
260
|
+
} else {
|
|
261
|
+
triple_aliases.appendSliceAssumeCapacity(&ARMebTriples);
|
|
262
|
+
}
|
|
263
|
+
},
|
|
264
|
+
.avr => {
|
|
265
|
+
lib_dirs.appendSliceAssumeCapacity(&AVRLibDirs);
|
|
266
|
+
triple_aliases.appendSliceAssumeCapacity(&AVRTriples);
|
|
267
|
+
},
|
|
268
|
+
.csky => {
|
|
269
|
+
lib_dirs.appendSliceAssumeCapacity(&CSKYLibDirs);
|
|
270
|
+
triple_aliases.appendSliceAssumeCapacity(&CSKYTriples);
|
|
271
|
+
},
|
|
272
|
+
.x86_64 => {
|
|
273
|
+
if (target.abi == .gnux32 or target.abi == .muslx32) {
|
|
274
|
+
lib_dirs.appendSliceAssumeCapacity(&X32LibDirs);
|
|
275
|
+
triple_aliases.appendSliceAssumeCapacity(&X32Triples);
|
|
276
|
+
biarch_libdirs.appendSliceAssumeCapacity(&X86_64LibDirs);
|
|
277
|
+
biarch_triple_aliases.appendSliceAssumeCapacity(&X86_64Triples);
|
|
278
|
+
} else {
|
|
279
|
+
lib_dirs.appendSliceAssumeCapacity(&X86_64LibDirs);
|
|
280
|
+
triple_aliases.appendSliceAssumeCapacity(&X86_64Triples);
|
|
281
|
+
biarch_libdirs.appendSliceAssumeCapacity(&X32LibDirs);
|
|
282
|
+
biarch_triple_aliases.appendSliceAssumeCapacity(&X32Triples);
|
|
283
|
+
}
|
|
284
|
+
biarch_libdirs.appendSliceAssumeCapacity(&X86LibDirs);
|
|
285
|
+
biarch_triple_aliases.appendSliceAssumeCapacity(&X86Triples);
|
|
286
|
+
},
|
|
287
|
+
.x86 => {
|
|
288
|
+
lib_dirs.appendSliceAssumeCapacity(&X86LibDirs);
|
|
289
|
+
},
|
|
290
|
+
.loongarch64 => {
|
|
291
|
+
lib_dirs.appendSliceAssumeCapacity(&LoongArch64LibDirs);
|
|
292
|
+
triple_aliases.appendSliceAssumeCapacity(&LoongArch64Triples);
|
|
293
|
+
},
|
|
294
|
+
.m68k => {
|
|
295
|
+
lib_dirs.appendSliceAssumeCapacity(&M68kLibDirs);
|
|
296
|
+
triple_aliases.appendSliceAssumeCapacity(&M68kTriples);
|
|
297
|
+
},
|
|
298
|
+
.mips => {
|
|
299
|
+
lib_dirs.appendSliceAssumeCapacity(&MIPSLibDirs);
|
|
300
|
+
triple_aliases.appendSliceAssumeCapacity(&MIPSTriples);
|
|
301
|
+
biarch_libdirs.appendSliceAssumeCapacity(&MIPS64LibDirs);
|
|
302
|
+
biarch_triple_aliases.appendSliceAssumeCapacity(&MIPS64Triples);
|
|
303
|
+
biarch_libdirs.appendSliceAssumeCapacity(&MIPSN32LibDirs);
|
|
304
|
+
biarch_triple_aliases.appendSliceAssumeCapacity(&MIPSN32Triples);
|
|
305
|
+
},
|
|
306
|
+
.mipsel => {
|
|
307
|
+
lib_dirs.appendSliceAssumeCapacity(&MIPSELLibDirs);
|
|
308
|
+
triple_aliases.appendSliceAssumeCapacity(&MIPSELTriples);
|
|
309
|
+
triple_aliases.appendSliceAssumeCapacity(&MIPSTriples);
|
|
310
|
+
biarch_libdirs.appendSliceAssumeCapacity(&MIPS64ELLibDirs);
|
|
311
|
+
biarch_triple_aliases.appendSliceAssumeCapacity(&MIPS64ELTriples);
|
|
312
|
+
biarch_libdirs.appendSliceAssumeCapacity(&MIPSN32ELLibDirs);
|
|
313
|
+
biarch_triple_aliases.appendSliceAssumeCapacity(&MIPSN32ELTriples);
|
|
314
|
+
},
|
|
315
|
+
.mips64 => {
|
|
316
|
+
lib_dirs.appendSliceAssumeCapacity(&MIPS64LibDirs);
|
|
317
|
+
triple_aliases.appendSliceAssumeCapacity(&MIPS64Triples);
|
|
318
|
+
biarch_libdirs.appendSliceAssumeCapacity(&MIPSLibDirs);
|
|
319
|
+
biarch_triple_aliases.appendSliceAssumeCapacity(&MIPSTriples);
|
|
320
|
+
biarch_libdirs.appendSliceAssumeCapacity(&MIPSN32LibDirs);
|
|
321
|
+
biarch_triple_aliases.appendSliceAssumeCapacity(&MIPSN32Triples);
|
|
322
|
+
},
|
|
323
|
+
.mips64el => {
|
|
324
|
+
lib_dirs.appendSliceAssumeCapacity(&MIPS64ELLibDirs);
|
|
325
|
+
triple_aliases.appendSliceAssumeCapacity(&MIPS64ELTriples);
|
|
326
|
+
biarch_libdirs.appendSliceAssumeCapacity(&MIPSELLibDirs);
|
|
327
|
+
biarch_triple_aliases.appendSliceAssumeCapacity(&MIPSELTriples);
|
|
328
|
+
biarch_libdirs.appendSliceAssumeCapacity(&MIPSN32ELLibDirs);
|
|
329
|
+
biarch_triple_aliases.appendSliceAssumeCapacity(&MIPSN32ELTriples);
|
|
330
|
+
biarch_triple_aliases.appendSliceAssumeCapacity(&MIPSTriples);
|
|
331
|
+
},
|
|
332
|
+
.msp430 => {
|
|
333
|
+
lib_dirs.appendSliceAssumeCapacity(&MSP430LibDirs);
|
|
334
|
+
triple_aliases.appendSliceAssumeCapacity(&MSP430Triples);
|
|
335
|
+
},
|
|
336
|
+
.powerpc => {
|
|
337
|
+
lib_dirs.appendSliceAssumeCapacity(&PPCLibDirs);
|
|
338
|
+
triple_aliases.appendSliceAssumeCapacity(&PPCTriples);
|
|
339
|
+
biarch_libdirs.appendSliceAssumeCapacity(&PPC64LibDirs);
|
|
340
|
+
biarch_triple_aliases.appendSliceAssumeCapacity(&PPC64Triples);
|
|
341
|
+
},
|
|
342
|
+
.powerpcle => {
|
|
343
|
+
lib_dirs.appendSliceAssumeCapacity(&PPCLELibDirs);
|
|
344
|
+
triple_aliases.appendSliceAssumeCapacity(&PPCLETriples);
|
|
345
|
+
biarch_libdirs.appendSliceAssumeCapacity(&PPC64LELibDirs);
|
|
346
|
+
biarch_triple_aliases.appendSliceAssumeCapacity(&PPC64LETriples);
|
|
347
|
+
},
|
|
348
|
+
.powerpc64 => {
|
|
349
|
+
lib_dirs.appendSliceAssumeCapacity(&PPC64LibDirs);
|
|
350
|
+
triple_aliases.appendSliceAssumeCapacity(&PPC64Triples);
|
|
351
|
+
biarch_libdirs.appendSliceAssumeCapacity(&PPCLibDirs);
|
|
352
|
+
biarch_triple_aliases.appendSliceAssumeCapacity(&PPCTriples);
|
|
353
|
+
},
|
|
354
|
+
.powerpc64le => {
|
|
355
|
+
lib_dirs.appendSliceAssumeCapacity(&PPC64LELibDirs);
|
|
356
|
+
triple_aliases.appendSliceAssumeCapacity(&PPC64LETriples);
|
|
357
|
+
biarch_libdirs.appendSliceAssumeCapacity(&PPCLELibDirs);
|
|
358
|
+
biarch_triple_aliases.appendSliceAssumeCapacity(&PPCLETriples);
|
|
359
|
+
},
|
|
360
|
+
.riscv32 => {
|
|
361
|
+
lib_dirs.appendSliceAssumeCapacity(&RISCV32LibDirs);
|
|
362
|
+
triple_aliases.appendSliceAssumeCapacity(&RISCV32Triples);
|
|
363
|
+
biarch_libdirs.appendSliceAssumeCapacity(&RISCV64LibDirs);
|
|
364
|
+
biarch_triple_aliases.appendSliceAssumeCapacity(&RISCV64Triples);
|
|
365
|
+
},
|
|
366
|
+
.riscv64 => {
|
|
367
|
+
lib_dirs.appendSliceAssumeCapacity(&RISCV64LibDirs);
|
|
368
|
+
triple_aliases.appendSliceAssumeCapacity(&RISCV64Triples);
|
|
369
|
+
biarch_libdirs.appendSliceAssumeCapacity(&RISCV32LibDirs);
|
|
370
|
+
biarch_triple_aliases.appendSliceAssumeCapacity(&RISCV32Triples);
|
|
371
|
+
},
|
|
372
|
+
.sparc => {
|
|
373
|
+
lib_dirs.appendSliceAssumeCapacity(&SPARCv8LibDirs);
|
|
374
|
+
triple_aliases.appendSliceAssumeCapacity(&SPARCv8Triples);
|
|
375
|
+
biarch_libdirs.appendSliceAssumeCapacity(&SPARCv9LibDirs);
|
|
376
|
+
biarch_triple_aliases.appendSliceAssumeCapacity(&SPARCv9Triples);
|
|
377
|
+
},
|
|
378
|
+
.sparc64 => {
|
|
379
|
+
lib_dirs.appendSliceAssumeCapacity(&SPARCv9LibDirs);
|
|
380
|
+
triple_aliases.appendSliceAssumeCapacity(&SPARCv9Triples);
|
|
381
|
+
biarch_libdirs.appendSliceAssumeCapacity(&SPARCv8LibDirs);
|
|
382
|
+
biarch_triple_aliases.appendSliceAssumeCapacity(&SPARCv8Triples);
|
|
383
|
+
},
|
|
384
|
+
.s390x => {
|
|
385
|
+
lib_dirs.appendSliceAssumeCapacity(&SystemZLibDirs);
|
|
386
|
+
triple_aliases.appendSliceAssumeCapacity(&SystemZTriples);
|
|
387
|
+
},
|
|
388
|
+
else => {},
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
pub fn discover(self: *GCCDetector, tc: *Toolchain) !void {
|
|
393
|
+
var path_buf: [std.fs.max_path_bytes]u8 = undefined;
|
|
394
|
+
var fib = std.heap.FixedBufferAllocator.init(&path_buf);
|
|
395
|
+
|
|
396
|
+
const target = tc.getTarget();
|
|
397
|
+
const biarch_variant_target = if (target.ptrBitWidth() == 32)
|
|
398
|
+
target.get64BitArchVariant()
|
|
399
|
+
else
|
|
400
|
+
target.get32BitArchVariant();
|
|
401
|
+
|
|
402
|
+
var candidate_lib_dirs_buffer: [16][]const u8 = undefined;
|
|
403
|
+
var candidate_lib_dirs = std.ArrayList([]const u8).initBuffer(&candidate_lib_dirs_buffer);
|
|
404
|
+
|
|
405
|
+
var candidate_triple_aliases_buffer: [16][]const u8 = undefined;
|
|
406
|
+
var candidate_triple_aliases = std.ArrayList([]const u8).initBuffer(&candidate_triple_aliases_buffer);
|
|
407
|
+
|
|
408
|
+
var candidate_biarch_lib_dirs_buffer: [16][]const u8 = undefined;
|
|
409
|
+
var candidate_biarch_lib_dirs = std.ArrayList([]const u8).initBuffer(&candidate_biarch_lib_dirs_buffer);
|
|
410
|
+
|
|
411
|
+
var candidate_biarch_triple_aliases_buffer: [20][]const u8 = undefined;
|
|
412
|
+
var candidate_biarch_triple_aliases = std.ArrayList([]const u8).initBuffer(&candidate_biarch_triple_aliases_buffer);
|
|
413
|
+
|
|
414
|
+
try collectLibDirsAndTriples(
|
|
415
|
+
tc,
|
|
416
|
+
&candidate_lib_dirs,
|
|
417
|
+
&candidate_triple_aliases,
|
|
418
|
+
&candidate_biarch_lib_dirs,
|
|
419
|
+
&candidate_biarch_triple_aliases,
|
|
420
|
+
);
|
|
421
|
+
|
|
422
|
+
var target_buf: [64]u8 = undefined;
|
|
423
|
+
const triple_str = target.toLLVMTriple(&target_buf);
|
|
424
|
+
candidate_triple_aliases.appendAssumeCapacity(triple_str);
|
|
425
|
+
|
|
426
|
+
// Also include the multiarch variant if it's different.
|
|
427
|
+
var biarch_buf: [64]u8 = undefined;
|
|
428
|
+
if (biarch_variant_target) |*biarch_target| {
|
|
429
|
+
const biarch_triple_str = biarch_target.toLLVMTriple(&biarch_buf);
|
|
430
|
+
if (!std.mem.eql(u8, biarch_triple_str, triple_str)) {
|
|
431
|
+
candidate_triple_aliases.appendAssumeCapacity(biarch_triple_str);
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
var prefixes_buf: [16][]const u8 = undefined;
|
|
436
|
+
var prefixes = std.ArrayList([]const u8).initBuffer(&prefixes_buf);
|
|
437
|
+
const gcc_toolchain_dir = gccToolchainDir(tc);
|
|
438
|
+
if (gcc_toolchain_dir.len != 0) {
|
|
439
|
+
const adjusted = if (gcc_toolchain_dir[gcc_toolchain_dir.len - 1] == '/')
|
|
440
|
+
gcc_toolchain_dir[0 .. gcc_toolchain_dir.len - 1]
|
|
441
|
+
else
|
|
442
|
+
gcc_toolchain_dir;
|
|
443
|
+
prefixes.appendAssumeCapacity(adjusted);
|
|
444
|
+
} else {
|
|
445
|
+
const sysroot = tc.getSysroot();
|
|
446
|
+
if (sysroot.len > 0) {
|
|
447
|
+
prefixes.appendAssumeCapacity(sysroot);
|
|
448
|
+
try addDefaultGCCPrefixes(&prefixes, tc);
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
if (sysroot.len == 0) {
|
|
452
|
+
try addDefaultGCCPrefixes(&prefixes, tc);
|
|
453
|
+
}
|
|
454
|
+
// TODO: Special-case handling for Gentoo
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
const v0 = GCCVersion.parse("0.0.0");
|
|
458
|
+
for (prefixes.items) |prefix| {
|
|
459
|
+
if (!tc.exists(prefix)) continue;
|
|
460
|
+
|
|
461
|
+
for (candidate_lib_dirs.items) |suffix| {
|
|
462
|
+
defer fib.reset();
|
|
463
|
+
const lib_dir = std.fs.path.join(fib.allocator(), &.{ prefix, suffix }) catch continue;
|
|
464
|
+
if (!tc.exists(lib_dir)) continue;
|
|
465
|
+
|
|
466
|
+
const gcc_dir_exists = tc.joinedExists(&.{ lib_dir, "/gcc" });
|
|
467
|
+
const gcc_cross_dir_exists = tc.joinedExists(&.{ lib_dir, "/gcc-cross" });
|
|
468
|
+
|
|
469
|
+
try self.scanLibDirForGCCTriple(tc, target, lib_dir, triple_str, false, gcc_dir_exists, gcc_cross_dir_exists);
|
|
470
|
+
for (candidate_triple_aliases.items) |candidate| {
|
|
471
|
+
try self.scanLibDirForGCCTriple(tc, target, lib_dir, candidate, false, gcc_dir_exists, gcc_cross_dir_exists);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
for (candidate_biarch_lib_dirs.items) |suffix| {
|
|
475
|
+
const lib_dir = std.fs.path.join(fib.allocator(), &.{ prefix, suffix }) catch continue;
|
|
476
|
+
if (!tc.exists(lib_dir)) continue;
|
|
477
|
+
|
|
478
|
+
const gcc_dir_exists = tc.joinedExists(&.{ lib_dir, "/gcc" });
|
|
479
|
+
const gcc_cross_dir_exists = tc.joinedExists(&.{ lib_dir, "/gcc-cross" });
|
|
480
|
+
for (candidate_biarch_triple_aliases.items) |candidate| {
|
|
481
|
+
try self.scanLibDirForGCCTriple(tc, target, lib_dir, candidate, true, gcc_dir_exists, gcc_cross_dir_exists);
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
if (self.version.order(v0) == .gt) break;
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
fn findBiarchMultilibs(
|
|
489
|
+
tc: *const Toolchain,
|
|
490
|
+
result: *Multilib.Detected,
|
|
491
|
+
target: *const Target,
|
|
492
|
+
path: [2][]const u8,
|
|
493
|
+
needs_biarch_suffix: bool,
|
|
494
|
+
) !bool {
|
|
495
|
+
const suff64 = if (target.os.tag == .illumos) switch (target.cpu.arch) {
|
|
496
|
+
.x86, .x86_64 => "/amd64",
|
|
497
|
+
.sparc => "/sparcv9",
|
|
498
|
+
else => "/64",
|
|
499
|
+
} else "/64";
|
|
500
|
+
|
|
501
|
+
const alt_64 = Multilib.init(suff64, suff64, &.{ "-m32", "+m64", "-mx32" });
|
|
502
|
+
const alt_32 = Multilib.init("/32", "/32", &.{ "+m32", "-m64", "-mx32" });
|
|
503
|
+
const alt_x32 = Multilib.init("/x32", "/x32", &.{ "-m32", "-m64", "+mx32" });
|
|
504
|
+
|
|
505
|
+
const multilib_filter = Multilib.Filter{
|
|
506
|
+
.base = path,
|
|
507
|
+
.file = "crtbegin.o",
|
|
508
|
+
};
|
|
509
|
+
|
|
510
|
+
const Want = enum {
|
|
511
|
+
want32,
|
|
512
|
+
want64,
|
|
513
|
+
wantx32,
|
|
514
|
+
};
|
|
515
|
+
const is_x32 = target.abi == .gnux32 or target.abi == .muslx32;
|
|
516
|
+
const target_ptr_width = target.ptrBitWidth();
|
|
517
|
+
const want: Want = if (target_ptr_width == 32 and multilib_filter.exists(alt_32, tc))
|
|
518
|
+
.want64
|
|
519
|
+
else if (target_ptr_width == 64 and is_x32 and multilib_filter.exists(alt_x32, tc))
|
|
520
|
+
.want64
|
|
521
|
+
else if (target_ptr_width == 64 and !is_x32 and multilib_filter.exists(alt_64, tc))
|
|
522
|
+
.want32
|
|
523
|
+
else if (target_ptr_width == 32)
|
|
524
|
+
if (needs_biarch_suffix) .want64 else .want32
|
|
525
|
+
else if (is_x32)
|
|
526
|
+
if (needs_biarch_suffix) .want64 else .wantx32
|
|
527
|
+
else if (needs_biarch_suffix) .want32 else .want64;
|
|
528
|
+
|
|
529
|
+
const default = switch (want) {
|
|
530
|
+
.want32 => Multilib.init("", "", &.{ "+m32", "-m64", "-mx32" }),
|
|
531
|
+
.want64 => Multilib.init("", "", &.{ "-m32", "+m64", "-mx32" }),
|
|
532
|
+
.wantx32 => Multilib.init("", "", &.{ "-m32", "-m64", "+mx32" }),
|
|
533
|
+
};
|
|
534
|
+
result.multilib_buf[result.multilib_count..][0..4].* = .{
|
|
535
|
+
default,
|
|
536
|
+
alt_64,
|
|
537
|
+
alt_32,
|
|
538
|
+
alt_x32,
|
|
539
|
+
};
|
|
540
|
+
result.multilib_count += 4;
|
|
541
|
+
|
|
542
|
+
result.filter(multilib_filter, tc);
|
|
543
|
+
return result.select(&.{
|
|
544
|
+
if (target_ptr_width == 64 and !is_x32) "+m64" else "-m64",
|
|
545
|
+
if (target_ptr_width == 32) "+m32" else "-m32",
|
|
546
|
+
if (target_ptr_width == 64 and is_x32) "+mx32" else "-mx32",
|
|
547
|
+
});
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
fn scanGCCForMultilibs(
|
|
551
|
+
self: *GCCDetector,
|
|
552
|
+
tc: *const Toolchain,
|
|
553
|
+
target: *const Target,
|
|
554
|
+
path: [2][]const u8,
|
|
555
|
+
needs_biarch_suffix: bool,
|
|
556
|
+
) !bool {
|
|
557
|
+
var detected: Multilib.Detected = .{};
|
|
558
|
+
if (target.cpu.arch == .csky) {
|
|
559
|
+
// TODO
|
|
560
|
+
} else if (target.cpu.arch.isMIPS()) {
|
|
561
|
+
// TODO
|
|
562
|
+
} else if (target.cpu.arch.isRISCV()) {
|
|
563
|
+
// TODO
|
|
564
|
+
} else if (target.cpu.arch == .msp430) {
|
|
565
|
+
// TODO
|
|
566
|
+
} else if (target.cpu.arch == .avr) {
|
|
567
|
+
// No multilibs
|
|
568
|
+
} else if (!try findBiarchMultilibs(tc, &detected, target, path, needs_biarch_suffix)) {
|
|
569
|
+
return false;
|
|
570
|
+
}
|
|
571
|
+
self.selected = detected.selected;
|
|
572
|
+
self.biarch_sibling = detected.biarch_sibling;
|
|
573
|
+
return true;
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
fn scanLibDirForGCCTriple(
|
|
577
|
+
self: *GCCDetector,
|
|
578
|
+
tc: *const Toolchain,
|
|
579
|
+
target: *const Target,
|
|
580
|
+
lib_dir: []const u8,
|
|
581
|
+
candidate_triple: []const u8,
|
|
582
|
+
needs_biarch_suffix: bool,
|
|
583
|
+
gcc_dir_exists: bool,
|
|
584
|
+
gcc_cross_dir_exists: bool,
|
|
585
|
+
) !void {
|
|
586
|
+
var path_buf: [std.fs.max_path_bytes]u8 = undefined;
|
|
587
|
+
var fib = std.heap.FixedBufferAllocator.init(&path_buf);
|
|
588
|
+
const comp = tc.driver.comp;
|
|
589
|
+
const arena = comp.arena;
|
|
590
|
+
const io = comp.io;
|
|
591
|
+
for (0..2) |i| {
|
|
592
|
+
if (i == 0 and !gcc_dir_exists) continue;
|
|
593
|
+
if (i == 1 and !gcc_cross_dir_exists) continue;
|
|
594
|
+
defer fib.reset();
|
|
595
|
+
|
|
596
|
+
const base: []const u8 = if (i == 0) "gcc" else "gcc-cross";
|
|
597
|
+
var lib_suffix_buf: [64]u8 = undefined;
|
|
598
|
+
var suffix_buf_fib = std.heap.FixedBufferAllocator.init(&lib_suffix_buf);
|
|
599
|
+
const lib_suffix = std.fs.path.join(suffix_buf_fib.allocator(), &.{ base, candidate_triple }) catch continue;
|
|
600
|
+
|
|
601
|
+
const dir_name = std.fs.path.join(fib.allocator(), &.{ lib_dir, lib_suffix }) catch continue;
|
|
602
|
+
var parent_dir = comp.cwd.openDir(io, dir_name, .{ .access_sub_paths = false, .iterate = true }) catch continue;
|
|
603
|
+
defer parent_dir.close(io);
|
|
604
|
+
|
|
605
|
+
var it = parent_dir.iterate();
|
|
606
|
+
while (it.next(io) catch continue) |entry| {
|
|
607
|
+
if (entry.kind != .directory) continue;
|
|
608
|
+
|
|
609
|
+
const version_text = entry.name;
|
|
610
|
+
const candidate_version = GCCVersion.parse(version_text);
|
|
611
|
+
if (candidate_version.major != -1) {
|
|
612
|
+
// TODO: cache path so we're not repeatedly scanning
|
|
613
|
+
}
|
|
614
|
+
if (candidate_version.isLessThan(4, 1, 1, "")) continue;
|
|
615
|
+
switch (candidate_version.order(self.version)) {
|
|
616
|
+
.lt, .eq => continue,
|
|
617
|
+
.gt => {},
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
if (!try self.scanGCCForMultilibs(tc, target, .{ dir_name, version_text }, needs_biarch_suffix)) continue;
|
|
621
|
+
|
|
622
|
+
self.version = candidate_version;
|
|
623
|
+
self.gcc_triple = try arena.dupe(u8, candidate_triple);
|
|
624
|
+
self.install_path = try std.fs.path.join(arena, &.{ lib_dir, lib_suffix, version_text });
|
|
625
|
+
self.parent_lib_path = try std.fs.path.join(arena, &.{ self.install_path, "..", "..", ".." });
|
|
626
|
+
self.is_valid = true;
|
|
627
|
+
}
|
|
628
|
+
}
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
fn gccToolchainDir(tc: *const Toolchain) []const u8 {
|
|
632
|
+
const sysroot = tc.getSysroot();
|
|
633
|
+
if (sysroot.len != 0) return "";
|
|
634
|
+
return system_defaults.gcc_install_prefix;
|
|
635
|
+
}
|