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 {
249249 if (options.link_mode == .dynamic) return error.TargetCannotDynamicLink;
250250 break :b .static;
251251 }
252 if (target.os.tag == .fuchsia and options.output_mode == .Exe) {
252 if (!target_util.canStaticLinkExe(target) and options.output_mode == .Exe) {
253253 if (options.link_mode == .static) return error.TargetCannotStaticLinkExecutables;
254254 break :b .dynamic;
255255 }
src/target.zig+9
......@@ -31,6 +31,15 @@ pub fn canDynamicLink(target: *const std.Target) bool {
3131 };
3232}
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
3443pub fn libCNeedsLibUnwind(target: *const std.Target, link_mode: std.lang.LinkMode) bool {
3544 return target.isGnuLibC() and link_mode == .static;
3645}