authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-05-24 21:33:29+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-05-24 21:38:04+02:00
loge919a0d175f15b9a3882259101954d77d12e6a5d
tree58f7d24af1265e228123a7b77ed49c840ff6fd9a
parent31f157d8079b020b6212256ea702ea0a15738408
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

compiler: don't allow statically linking executables on Haiku

Haiku always loads executables through its dynamic linker.

2 files changed, 10 insertions(+), 1 deletions(-)

src/Compilation/Config.zig+1-1
...@@ -249,7 +249,7 @@ pub fn resolve(options: Options) ResolveError!Config {...@@ -249,7 +249,7 @@ pub fn resolve(options: Options) ResolveError!Config {
249 if (options.link_mode == .dynamic) return error.TargetCannotDynamicLink;249 if (options.link_mode == .dynamic) return error.TargetCannotDynamicLink;
250 break :b .static;250 break :b .static;
251 }251 }
252 if (target.os.tag == .fuchsia and options.output_mode == .Exe) {252 if (!target_util.canStaticLinkExe(target) and options.output_mode == .Exe) {
253 if (options.link_mode == .static) return error.TargetCannotStaticLinkExecutables;253 if (options.link_mode == .static) return error.TargetCannotStaticLinkExecutables;
254 break :b .dynamic;254 break :b .dynamic;
255 }255 }
src/target.zig+9
...@@ -31,6 +31,15 @@ pub fn canDynamicLink(target: *const std.Target) bool {...@@ -31,6 +31,15 @@ pub fn canDynamicLink(target: *const std.Target) bool {
31 };31 };
32}32}
3333
34pub fn canStaticLinkExe(target: *const std.Target) bool {
35 return switch (target.os.tag) {
36 .fuchsia,
37 .haiku,
38 => false,
39 else => true,
40 };
41}
42
34pub fn libCNeedsLibUnwind(target: *const std.Target, link_mode: std.lang.LinkMode) bool {43pub fn libCNeedsLibUnwind(target: *const std.Target, link_mode: std.lang.LinkMode) bool {
35 return target.isGnuLibC() and link_mode == .static;44 return target.isGnuLibC() and link_mode == .static;
36}45}