From e919a0d175f15b9a3882259101954d77d12e6a5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Sun, 24 May 2026 21:33:29 +0200 Subject: [PATCH] compiler: don't allow statically linking executables on Haiku Haiku always loads executables through its dynamic linker. --- src/Compilation/Config.zig | 2 +- src/target.zig | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Compilation/Config.zig b/src/Compilation/Config.zig index bb646f3c942f2f2f43cf88e25d5cf5e559a3256b..5d64173cb9d72ccdf5d9b78b8d11d2844c475ec0 100644 --- a/src/Compilation/Config.zig +++ b/src/Compilation/Config.zig @@ -249,7 +249,7 @@ pub fn resolve(options: Options) ResolveError!Config { if (options.link_mode == .dynamic) return error.TargetCannotDynamicLink; break :b .static; } - if (target.os.tag == .fuchsia and options.output_mode == .Exe) { + if (!target_util.canStaticLinkExe(target) and options.output_mode == .Exe) { if (options.link_mode == .static) return error.TargetCannotStaticLinkExecutables; break :b .dynamic; } diff --git a/src/target.zig b/src/target.zig index 41aed7cd03d30b8bdb16087e235461962621b1da..56c429a13496f37f2f66c16a97d1c497992476f3 100644 --- a/src/target.zig +++ b/src/target.zig @@ -31,6 +31,15 @@ pub fn canDynamicLink(target: *const std.Target) bool { }; } +pub fn canStaticLinkExe(target: *const std.Target) bool { + return switch (target.os.tag) { + .fuchsia, + .haiku, + => false, + else => true, + }; +} + pub fn libCNeedsLibUnwind(target: *const std.Target, link_mode: std.lang.LinkMode) bool { return target.isGnuLibC() and link_mode == .static; } -- 2.54.0