aboutsummaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2024-07-08 10:40:04 +0100
committergingerBill <bill@gingerbill.org>2024-07-08 10:40:04 +0100
commit86c58167ed2cef39c64268f30b748f003a5a2969 (patch)
tree6a71492b6ffbdd0ca5b21406f7f7ad2deff8df27 /src/main.cpp
parent212906ecd29b247093818c10a21b522e56840903 (diff)
Add `-print-linker-flags`
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp52
1 files changed, 50 insertions, 2 deletions
diff --git a/src/main.cpp b/src/main.cpp
index c4fccedbc..f80da8c68 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -103,6 +103,31 @@ gb_internal i32 system_exec_command_line_app_internal(bool exit_on_err, char con
cmd_len = gb_snprintf_va(cmd_line, cmd_cap-1, fmt, va);
+ if (build_context.print_linker_flags) {
+ // NOTE(bill): remove the first argument (the executable) from the executable list
+ // and then print it for the "linker flags"
+ while (*cmd_line && gb_char_is_space(*cmd_line)) {
+ cmd_line++;
+ }
+ if (*cmd_line == '\"') for (cmd_line++; *cmd_line; cmd_line++) {
+ if (*cmd_line == '\\') {
+ cmd_line++;
+ if (*cmd_line == '\"') {
+ cmd_line++;
+ }
+ } else if (*cmd_line == '\"') {
+ cmd_line++;
+ break;
+ }
+ }
+ while (*cmd_line && gb_char_is_space(*cmd_line)) {
+ cmd_line++;
+ }
+
+ fprintf(stdout, "%s\n", cmd_line);
+ return exit_code;
+ }
+
#if defined(GB_SYSTEM_WINDOWS)
STARTUPINFOW start_info = {gb_size_of(STARTUPINFOW)};
PROCESS_INFORMATION pi = {0};
@@ -359,6 +384,8 @@ enum BuildFlagKind {
BuildFlag_MinLinkLibs,
+ BuildFlag_PrintLinkerFlags,
+
// internal use only
BuildFlag_InternalIgnoreLazy,
BuildFlag_InternalIgnoreLLVMBuild,
@@ -560,6 +587,8 @@ gb_internal bool parse_build_flags(Array<String> args) {
add_flag(&build_flags, BuildFlag_MinLinkLibs, str_lit("min-link-libs"), BuildFlagParam_None, Command__does_build);
+ add_flag(&build_flags, BuildFlag_PrintLinkerFlags, str_lit("print-linker-flags"), BuildFlagParam_None, Command_build);
+
add_flag(&build_flags, BuildFlag_InternalIgnoreLazy, str_lit("internal-ignore-lazy"), BuildFlagParam_None, Command_all);
add_flag(&build_flags, BuildFlag_InternalIgnoreLLVMBuild, str_lit("internal-ignore-llvm-build"),BuildFlagParam_None, Command_all);
add_flag(&build_flags, BuildFlag_InternalIgnorePanic, str_lit("internal-ignore-panic"), BuildFlagParam_None, Command_all);
@@ -828,8 +857,7 @@ gb_internal bool parse_build_flags(Array<String> args) {
gb_printf_err("\tjson\n");
bad_flags = true;
}
-
- break;
+ break;
}
case BuildFlag_ExportDependenciesFile: {
GB_ASSERT(value.kind == ExactValue_String);
@@ -1367,6 +1395,10 @@ gb_internal bool parse_build_flags(Array<String> args) {
build_context.min_link_libs = true;
break;
+ case BuildFlag_PrintLinkerFlags:
+ build_context.print_linker_flags = true;
+ break;
+
case BuildFlag_InternalIgnoreLazy:
build_context.ignore_lazy = true;
break;
@@ -1535,6 +1567,16 @@ gb_internal bool parse_build_flags(Array<String> args) {
gb_printf_err("`-export-timings:<format>` requires `-show-timings` or `-show-more-timings` to be present\n");
bad_flags = true;
}
+
+
+ if (build_context.export_dependencies_format != DependenciesExportUnspecified && build_context.print_linker_flags) {
+ gb_printf_err("-export-dependencies cannot be used with -print-linker-flags\n");
+ bad_flags = true;
+ } else if (build_context.show_timings && build_context.print_linker_flags) {
+ gb_printf_err("-show-timings/-show-more-timings cannot be used with -print-linker-flags\n");
+ bad_flags = true;
+ }
+
return !bad_flags;
}
@@ -2361,6 +2403,12 @@ gb_internal void print_show_help(String const arg0, String const &command) {
print_usage_line(0, "");
}
+ if (build) {
+ print_usage_line(1, "-print-linker-flags");
+ print_usage_line(2, "Prints the all of the flags/arguments that will be passed to the linker.");
+ print_usage_line(0, "");
+ }
+
if (check) {
print_usage_line(1, "-disallow-do");
print_usage_line(2, "Disallows the 'do' keyword in the project.");