From 701cae9d6b54f180fb2e2d62e55a0d890af8b182 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Sun, 16 Aug 2026 09:38:30 +0200 Subject: [PATCH] compiler: don't require PIC when linking libc This allows linking statically against native libc with -fno-PIC. --- src/Module.zig | 2 +- src/target.zig | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/Module.zig b/src/Module.zig index e66982fa3af97ce9d4ff70522d8bd2073560ed51..6e8efa1591a0cb05910ae3aa6efb68ce085af7b8 100644 --- a/src/Module.zig +++ b/src/Module.zig @@ -174,7 +174,7 @@ pub fn create(arena: Allocator, options: CreateOptions) !*Module { }; const pic = b: { - if (target_util.requiresPic(target, options.global.link_libc)) { + if (target_util.requiresPic(target)) { if (options.inherited.pic == false) return error.TargetRequiresPic; break :b true; diff --git a/src/target.zig b/src/target.zig index 244b95d154fa12af2e70b8cc3cd39f0322272def..f3fe06954f6789aec3a18bb1d91f2fb1ef6642b2 100644 --- a/src/target.zig +++ b/src/target.zig @@ -72,10 +72,8 @@ pub fn requiresPie(target: *const std.Target, link_mode: std.lang.LinkMode) bool } /// This function returns whether non-pic code is completely invalid on the given target. -pub fn requiresPic(target: *const std.Target, linking_libc: bool) bool { - return ((target.os.tag == .windows or target.os.tag == .uefi) and (target.cpu.arch == .aarch64 or target.cpu.arch == .x86_64)) or - target.requiresLibC() or - (linking_libc and target.isGnuLibC()); +pub fn requiresPic(target: *const std.Target) bool { + return (target.os.tag == .windows or target.os.tag == .uefi) and (target.cpu.arch == .aarch64 or target.cpu.arch == .x86_64); } pub fn requiresPicForDynamicLink(target: *const std.Target) bool { -- 2.54.0