diff --git a/build.zig b/build.zig index 390f1594f8255d5f0e8c42ac1a7ca14f1b0c0096..ca78bdf1979715272bd1addcf223d79dc83acbb9 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 c640f6e8f3d8ba72aa9c670ebf92b906c3626e58..cc062f3af8830d3ebf24b1e0ab2e4fd802c58493 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 {