From 35f1b0f11ebb97910f3b4c82abd4a87dd52985f9 Mon Sep 17 00:00:00 2001 From: 0dminnimda <0dminnimda@gmail.com> Date: Mon, 4 Nov 2024 02:17:21 +0300 Subject: Add support for linking as pie --- src/main.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src/main.cpp') diff --git a/src/main.cpp b/src/main.cpp index 1574ac544..5d017d51a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -360,6 +360,7 @@ enum BuildFlagKind { BuildFlag_NoThreadLocal, BuildFlag_RelocMode, + BuildFlag_LinkPIE, BuildFlag_DisableRedZone, BuildFlag_DisallowDo, @@ -570,6 +571,7 @@ gb_internal bool parse_build_flags(Array args) { add_flag(&build_flags, BuildFlag_MinimumOSVersion, str_lit("minimum-os-version"), BuildFlagParam_String, Command__does_build); add_flag(&build_flags, BuildFlag_RelocMode, str_lit("reloc-mode"), BuildFlagParam_String, Command__does_build); + add_flag(&build_flags, BuildFlag_LinkPIE, str_lit("link-pie"), BuildFlagParam_String, Command__does_build); add_flag(&build_flags, BuildFlag_DisableRedZone, str_lit("disable-red-zone"), BuildFlagParam_None, Command__does_build); add_flag(&build_flags, BuildFlag_DisallowDo, str_lit("disallow-do"), BuildFlagParam_None, Command__does_check); @@ -1332,6 +1334,25 @@ gb_internal bool parse_build_flags(Array args) { break; } + case BuildFlag_LinkPIE: { + GB_ASSERT(value.kind == ExactValue_String); + String v = value.value_string; + if (v == "default") { + build_context.link_pie = LinkPIE_Default; + } else if (v == "yes" || v == "true") { + build_context.link_pie = LinkPIE_Yes; + } else if (v == "no" || v == "false") { + build_context.link_pie = LinkPIE_No; + } else { + gb_printf_err("-link-pie flag expected one of the following\n"); + gb_printf_err("\tdefault\n"); + gb_printf_err("\tyes, true\n"); + gb_printf_err("\tno, false\n"); + bad_flags = true; + } + + break; + } case BuildFlag_DisableRedZone: build_context.disable_red_zone = true; break; -- cgit v1.2.3