From 7688100b1770a7d688348b8f31282c3a6a69e9f9 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Mon, 7 Oct 2019 17:22:28 -0400 Subject: [PATCH] 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. --- build.zig | 1 + lib/std/build.zig | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/build.zig b/build.zig index 390f1594f8..ca78bdf197 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 c640f6e8f3..cc062f3af8 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 {