authorgravatar for mail@isaacfreund.comIsaac Freund <mail@isaacfreund.com> 2023-03-08 14:21:33+01:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-03-08 17:47:36-05:00
log3e99afdbfe9a66bc5461148a4754c1e88b33fb88
tree580d0b66d24850d82ae4780ef1559c505dd306bc
parent06b263825a67e68cec128c640a6287fa1716dc63

build: add -Dpie option

It is becoming increasingly common for distributions to want to enable PIE for all binaries and zig currently does not provide any way to do so aside from patching the build.zig.

2 files changed, 9 insertions(+), 0 deletions(-)

CMakeLists.txt+7
......@@ -827,6 +827,12 @@ else()
827827 set(ZIG_STATIC_ARG "")
828828endif()
829829
830if(CMAKE_POSITION_INDEPENDENT_CODE)
831 set(ZIG_PIE_ARG="-Dpie")
832else()
833 set(ZIG_PIE_ARG="")
834endif()
835
830836set(ZIG_BUILD_ARGS
831837 --zig-lib-dir "${CMAKE_SOURCE_DIR}/lib"
832838 "-Dconfig_h=${ZIG_CONFIG_H_OUT}"
......@@ -835,6 +841,7 @@ set(ZIG_BUILD_ARGS
835841 ${ZIG_STATIC_ARG}
836842 ${ZIG_NO_LIB_ARG}
837843 ${ZIG_SINGLE_THREADED_ARG}
844 ${ZIG_PIE_ARG}
838845 "-Dtarget=${ZIG_TARGET_TRIPLE}"
839846 "-Dcpu=${ZIG_TARGET_MCPU}"
840847 "-Dversion-string=${RESOLVED_ZIG_VERSION}"
build.zig+2
......@@ -152,6 +152,7 @@ pub fn build(b: *std.Build) !void {
152152 const link_libc = b.option(bool, "force-link-libc", "Force self-hosted compiler to link libc") orelse (enable_llvm or only_c);
153153 const sanitize_thread = b.option(bool, "sanitize-thread", "Enable thread-sanitization") orelse false;
154154 const strip = b.option(bool, "strip", "Omit debug information");
155 const pie = b.option(bool, "pie", "Produce a Position Independent Executable");
155156 const value_tracing = b.option(bool, "value-tracing", "Enable extra state tracking to help troubleshoot bugs in the compiler (using the std.debug.Trace API)") orelse false;
156157
157158 const mem_leak_frames: u32 = b.option(u32, "mem-leak-frames", "How many stack frames to print when a memory leak occurs. Tests get 2x this amount.") orelse blk: {
......@@ -162,6 +163,7 @@ pub fn build(b: *std.Build) !void {
162163
163164 const exe = addCompilerStep(b, optimize, target);
164165 exe.strip = strip;
166 exe.pie = pie;
165167 exe.sanitize_thread = sanitize_thread;
166168 exe.build_id = b.option(bool, "build-id", "Include a build id note") orelse false;
167169 exe.install();