diff --git a/build.zig b/build.zig index 390f1594..ca78bdf1 100644 --- a/build.zig +++ b/build.zig @@ -373,6 +373,7 @@ fn addLibUserlandStep(b: *Builder, mode: builtin.Mode) void { artifact.bundle_compiler_rt = true; artifact.setTarget(builtin.arch, builtin.os, builtin.abi); artifact.setBuildMode(mode); + artifact.force_pic = true; if (mode != .Debug) { artifact.strip = true; } diff --git a/lib/std/build.zig b/lib/std/build.zig index c640f6e8..cc062f3a 100644 --- a/lib/std/build.zig +++ b/lib/std/build.zig @@ -1488,6 +1488,9 @@ pub const LibExeObjStep = struct { dynamic_linker: ?[]const u8 = null, + /// Position Independent Code + force_pic: ?bool = null, + const LinkObject = union(enum) { StaticPath: []const u8, OtherStep: *LibExeObjStep, @@ -2314,6 +2317,14 @@ pub const LibExeObjStep = struct { try zig_args.append(builder.pathFromRoot(dir)); } + if (self.force_pic) |pic| { + if (pic) { + try zig_args.append("-fPIC"); + } else { + try zig_args.append("-fno-PIC"); + } + } + if (self.kind == Kind.Test) { try builder.spawnChild(zig_args.toSliceConst()); } else {