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; }