From 9e8be055c1152bd42f533f544308355de87a361e Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 29 Sep 2025 16:16:19 +0100 Subject: Rename to `-build-diagnostics` --- src/main.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/main.cpp') diff --git a/src/main.cpp b/src/main.cpp index 707b85232..6ad20cf26 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -394,7 +394,7 @@ enum BuildFlagKind { BuildFlag_IntegerDivisionByZero, - BuildFlag_ParaPolyDiagnostics, + BuildFlag_BuildDiagnostics, // internal use only BuildFlag_InternalFastISel, @@ -621,7 +621,7 @@ gb_internal bool parse_build_flags(Array args) { add_flag(&build_flags, BuildFlag_IntegerDivisionByZero, str_lit("integer-division-by-zero"), BuildFlagParam_String, Command__does_check); - add_flag(&build_flags, BuildFlag_ParaPolyDiagnostics, str_lit("para-poly-diagnostics"), BuildFlagParam_None, Command__does_build); + add_flag(&build_flags, BuildFlag_BuildDiagnostics, str_lit("build-diagnostics"), BuildFlagParam_None, Command__does_build); add_flag(&build_flags, BuildFlag_InternalFastISel, str_lit("internal-fast-isel"), BuildFlagParam_None, Command_all); add_flag(&build_flags, BuildFlag_InternalIgnoreLazy, str_lit("internal-ignore-lazy"), BuildFlagParam_None, Command_all); @@ -1565,8 +1565,8 @@ gb_internal bool parse_build_flags(Array args) { } break; - case BuildFlag_ParaPolyDiagnostics: - build_context.para_poly_diagnostics = true; + case BuildFlag_BuildDiagnostics: + build_context.build_diagnostics = true; break; case BuildFlag_InternalFastISel: -- cgit v1.2.3 From a672c68f03223efcab8f487d1bef05edaf5cf266 Mon Sep 17 00:00:00 2001 From: Yhya Ibrahim Date: Sat, 11 Oct 2025 15:26:01 +0300 Subject: Make `-target-features` flag support disabling of a feature --- src/llvm_backend.cpp | 5 ++++- src/main.cpp | 5 +++++ 2 files changed, 9 insertions(+), 1 deletion(-) (limited to 'src/main.cpp') diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index c2decf091..9256acbb2 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -3055,7 +3055,10 @@ gb_internal bool lb_generate_code(lbGenerator *gen) { } first = false; - llvm_features = gb_string_appendc(llvm_features, "+"); + if (*str.text != '+' && *str.text != '-') { + llvm_features = gb_string_appendc(llvm_features, "+"); + } + llvm_features = gb_string_append_length(llvm_features, str.text, str.len); } diff --git a/src/main.cpp b/src/main.cpp index 6ad20cf26..2d58cf218 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3719,6 +3719,11 @@ int main(int arg_count, char const **arg_ptr) { String item = string_split_iterator(&target_it, ','); if (item == "") break; + if (*item.text == '+' || *item.text == '-') { + item.text++; + item.len--; + } + String invalid; if (!check_target_feature_is_valid_for_target_arch(item, &invalid) && item != str_lit("help")) { if (item != str_lit("?")) { -- cgit v1.2.3 From 937161f68d39296e00215067c9d51737ac110a3e Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Sun, 12 Oct 2025 00:50:39 -0400 Subject: Add `-export-linked-libs-file` build flag. This build flag writes a list of the libraries that were linked during the build to the specified file. --- src/build_settings.cpp | 2 ++ src/main.cpp | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) (limited to 'src/main.cpp') diff --git a/src/build_settings.cpp b/src/build_settings.cpp index 53953600e..29a738c5a 100644 --- a/src/build_settings.cpp +++ b/src/build_settings.cpp @@ -575,6 +575,8 @@ struct BuildContext { bool min_link_libs; + String export_linked_libs_path; + bool print_linker_flags; RelocMode reloc_mode; diff --git a/src/main.cpp b/src/main.cpp index 6ad20cf26..1f619499c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -391,6 +391,7 @@ enum BuildFlagKind { BuildFlag_MinLinkLibs, BuildFlag_PrintLinkerFlags, + BuildFlag_ExportLinkedLibraries, BuildFlag_IntegerDivisionByZero, @@ -616,6 +617,7 @@ gb_internal bool parse_build_flags(Array args) { add_flag(&build_flags, BuildFlag_MaxErrorCount, str_lit("max-error-count"), BuildFlagParam_Integer, Command_all); add_flag(&build_flags, BuildFlag_MinLinkLibs, str_lit("min-link-libs"), BuildFlagParam_None, Command__does_build); + add_flag(&build_flags, BuildFlag_ExportLinkedLibraries, str_lit("export-linked-libs-file"), BuildFlagParam_String, Command__does_check); add_flag(&build_flags, BuildFlag_PrintLinkerFlags, str_lit("print-linker-flags"), BuildFlagParam_None, Command_build); @@ -1547,6 +1549,14 @@ gb_internal bool parse_build_flags(Array args) { build_context.min_link_libs = true; break; + case BuildFlag_ExportLinkedLibraries: + build_context.export_linked_libs_path = string_trim_whitespace(value.value_string); + if (build_context.export_linked_libs_path.len == 0) { + gb_printf_err("-%.*s specified an empty path\n", LIT(name)); + bad_flags = true; + } + break; + case BuildFlag_PrintLinkerFlags: build_context.print_linker_flags = true; break; @@ -2262,6 +2272,63 @@ gb_internal void export_dependencies(Checker *c) { } } +gb_internal void export_linked_libraries(LinkerData *gen) { + gbFile f = {}; + char * fileName = (char *)build_context.export_linked_libs_path.text; + gbFileError err = gb_file_open_mode(&f, gbFileMode_Write, fileName); + if (err != gbFileError_None) { + gb_printf_err("Failed to export linked library list to: %s\n", fileName); + exit_with_errors(); + return; + } + defer (gb_file_close(&f)); + + StringSet min_libs_set = {}; + string_set_init(&min_libs_set, 64); + defer (string_set_destroy(&min_libs_set)); + + for (auto *e : gen->foreign_libraries) { + GB_ASSERT(e->kind == Entity_LibraryName); + + for (auto lib_path : e->LibraryName.paths) { + lib_path = string_trim_whitespace(lib_path); + if (lib_path.len == 0) { + continue; + } + + if (string_set_update(&min_libs_set, lib_path)) { + continue; + } + + gb_fprintf(&f, "%.*s\t", LIT(lib_path)); + + String ext = path_extension(lib_path, false); + if (str_eq_ignore_case(ext, "a") || str_eq_ignore_case(ext, "lib") || + str_eq_ignore_case(ext, "o") || str_eq_ignore_case(ext, "obj") + ) { + gb_fprintf(&f, "static"); + } else { + gb_fprintf(&f, "dynamic"); + } + + gb_fprintf(&f, "\t"); + ast_node(imp, ForeignImportDecl, e->LibraryName.decl); + for (Ast* file_path : imp->filepaths) { + GB_ASSERT(file_path->kind == Ast_BasicLit); + + String file_path_str = file_path->BasicLit.token.string; + if (string_starts_with(file_path_str, str_lit("\"system:"))) { + gb_fprintf(&f, "system"); + } else { + gb_fprintf(&f, "user"); + } + } + + gb_fprintf(&f, "\n"); + } + } +} + gb_internal void remove_temp_files(lbGenerator *gen) { if (build_context.keep_temp_files) return; @@ -3935,6 +4002,10 @@ int main(int arg_count, char const **arg_ptr) { export_dependencies(checker); } return result; + } else { + if (build_context.export_linked_libs_path != "") { + export_linked_libraries(gen); + } } break; } -- cgit v1.2.3 From 0de3de72571214c2cecc21d76121510c92192ce3 Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Sun, 12 Oct 2025 01:57:29 -0400 Subject: Use exact value to determine system linked libs with `-export-linked-libs-file` --- src/main.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/main.cpp') diff --git a/src/main.cpp b/src/main.cpp index 1f619499c..945f0c3cf 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2314,9 +2314,9 @@ gb_internal void export_linked_libraries(LinkerData *gen) { gb_fprintf(&f, "\t"); ast_node(imp, ForeignImportDecl, e->LibraryName.decl); for (Ast* file_path : imp->filepaths) { - GB_ASSERT(file_path->kind == Ast_BasicLit); + GB_ASSERT(file_path->tav.mode == Addressing_Constant && file_path->tav.value.kind == ExactValue_String); + String file_path_str = file_path->tav.value.value_string; - String file_path_str = file_path->BasicLit.token.string; if (string_starts_with(file_path_str, str_lit("\"system:"))) { gb_fprintf(&f, "system"); } else { -- cgit v1.2.3 From 612b219230db3e0d9a56087f18780dffa5a163d0 Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Sun, 12 Oct 2025 02:00:18 -0400 Subject: Fix `-export-linked-libs-file` system lib check --- src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main.cpp') diff --git a/src/main.cpp b/src/main.cpp index 945f0c3cf..7a41abdf8 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2317,7 +2317,7 @@ gb_internal void export_linked_libraries(LinkerData *gen) { GB_ASSERT(file_path->tav.mode == Addressing_Constant && file_path->tav.value.kind == ExactValue_String); String file_path_str = file_path->tav.value.value_string; - if (string_starts_with(file_path_str, str_lit("\"system:"))) { + if (string_starts_with(file_path_str, str_lit("system:"))) { gb_fprintf(&f, "system"); } else { gb_fprintf(&f, "user"); -- cgit v1.2.3