Commit 7688100b17

Andrew Kelley <andrew@ziglang.org>
2019-10-07 23:22:28
stage1: enable PIC for libuserland
we don't really have a way to determine whether the stage1 zig compiler requires PIC so to be safe we always enable it when building libuserland. fixes build on some configurations of alpine linux.
1 parent 1547153
Changed files (2)
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 {
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;
     }