diff options
| author | Rue <78876133+IOKG04@users.noreply.github.com> | 2025-07-28 14:54:52 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-28 14:54:52 +0200 |
| commit | 5381e7891dcdd7b6a9e74250cdcce221fe464cdc (patch) | |
| tree | 4c74744ed84120dccae6dc9811ce945911108a17 /src/target.zig | |
| parent | 84ae54fbe64a15301317716e7f901d81585332d5 (diff) | |
| parent | dea3ed7f59347e87a1b8fa237202873988084ae8 (diff) | |
| download | zig-5381e7891dcdd7b6a9e74250cdcce221fe464cdc.tar.gz zig-5381e7891dcdd7b6a9e74250cdcce221fe464cdc.zip | |
Merge branch 'ziglang:master' into some-documentation-updates-0
Diffstat (limited to 'src/target.zig')
| -rw-r--r-- | src/target.zig | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/src/target.zig b/src/target.zig index dcacc65fad..ad83414c23 100644 --- a/src/target.zig +++ b/src/target.zig @@ -248,9 +248,13 @@ pub fn selfHostedBackendIsAsRobustAsLlvm(target: *const std.Target) bool { return false; } -pub fn supportsStackProbing(target: *const std.Target) bool { - return target.os.tag != .windows and target.os.tag != .uefi and - (target.cpu.arch == .x86 or target.cpu.arch == .x86_64); +pub fn supportsStackProbing(target: *const std.Target, backend: std.builtin.CompilerBackend) bool { + return switch (backend) { + .stage2_aarch64, .stage2_x86_64 => true, + .stage2_llvm => target.os.tag != .windows and target.os.tag != .uefi and + (target.cpu.arch == .x86 or target.cpu.arch == .x86_64), + else => false, + }; } pub fn supportsStackProtector(target: *const std.Target, backend: std.builtin.CompilerBackend) bool { @@ -359,6 +363,7 @@ pub fn canBuildLibCompilerRt(target: *const std.Target, use_llvm: bool, have_llv else => {}, } return switch (zigBackend(target, use_llvm)) { + .stage2_aarch64 => true, .stage2_llvm => true, .stage2_x86_64 => switch (target.ofmt) { .elf, .macho => true, @@ -368,13 +373,22 @@ pub fn canBuildLibCompilerRt(target: *const std.Target, use_llvm: bool, have_llv }; } -pub fn canBuildLibUbsanRt(target: *const std.Target) bool { +pub fn canBuildLibUbsanRt(target: *const std.Target, use_llvm: bool, have_llvm: bool) bool { switch (target.cpu.arch) { .spirv32, .spirv64 => return false, // Remove this once https://github.com/ziglang/zig/issues/23715 is fixed .nvptx, .nvptx64 => return false, - else => return true, + else => {}, } + return switch (zigBackend(target, use_llvm)) { + .stage2_llvm => true, + .stage2_wasm => false, + .stage2_x86_64 => switch (target.ofmt) { + .elf, .macho => true, + else => have_llvm, + }, + else => have_llvm, + }; } pub fn hasRedZone(target: *const std.Target) bool { @@ -405,6 +419,8 @@ pub fn libcFullLinkFlags(target: *const std.Target) []const []const u8 { .android, .androideabi, .ohos, .ohoseabi => &.{ "-lm", "-lc", "-ldl" }, else => &.{ "-lm", "-lpthread", "-lc", "-ldl", "-lrt", "-lutil" }, }, + // On SerenityOS libc includes libm, libpthread, libdl, and libssp. + .serenity => &.{"-lc"}, else => &.{}, }; return result; @@ -767,6 +783,7 @@ pub fn supportsTailCall(target: *const std.Target, backend: std.builtin.Compiler pub fn supportsThreads(target: *const std.Target, backend: std.builtin.CompilerBackend) bool { return switch (backend) { + .stage2_aarch64 => false, .stage2_powerpc => true, .stage2_x86_64 => target.ofmt == .macho or target.ofmt == .elf, else => true, @@ -844,6 +861,7 @@ pub fn zigBackend(target: *const std.Target, use_llvm: bool) std.builtin.Compile pub inline fn backendSupportsFeature(backend: std.builtin.CompilerBackend, comptime feature: Feature) bool { return switch (feature) { .panic_fn => switch (backend) { + .stage2_aarch64, .stage2_c, .stage2_llvm, .stage2_x86_64, @@ -864,7 +882,7 @@ pub inline fn backendSupportsFeature(backend: std.builtin.CompilerBackend, compt else => false, }, .field_reordering => switch (backend) { - .stage2_c, .stage2_llvm, .stage2_x86_64 => true, + .stage2_aarch64, .stage2_c, .stage2_llvm, .stage2_x86_64 => true, else => false, }, .separate_thread => switch (backend) { |
