diff options
| author | gingerBill <bill@gingerbill.org> | 2025-01-28 10:34:41 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2025-01-28 10:34:41 +0000 |
| commit | 15ece42e74acd7d62fc65bbc611e6766ec34187a (patch) | |
| tree | f3a247cca0c5aefc9e82fd456d37b448e6791552 /src/linker.cpp | |
| parent | 868ab277209908a3857c874014bced9e0fae6949 (diff) | |
Print frameworks first on Darwin targets
Diffstat (limited to 'src/linker.cpp')
| -rw-r--r-- | src/linker.cpp | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/linker.cpp b/src/linker.cpp index 59e6d8dc1..cf2ef638d 100644 --- a/src/linker.cpp +++ b/src/linker.cpp @@ -449,6 +449,26 @@ gb_internal i32 linker_stage(LinkerData *gen) { if (extra_linker_flags.len != 0) { lib_str = gb_string_append_fmt(lib_str, " %.*s", LIT(extra_linker_flags)); } + + if (build_context.metrics.os == TargetOs_darwin) { + // Print frameworks first + for (String lib : e->LibraryName.paths) { + lib = string_trim_whitespace(lib); + if (lib.len == 0) { + continue; + } + if (string_ends_with(lib, str_lit(".framework"))) { + if (string_set_update(&min_libs_set, lib)) { + continue; + } + + String lib_name = lib; + lib_name = remove_extension_from_path(lib_name); + lib_str = gb_string_append_fmt(lib_str, " -framework %.*s ", LIT(lib_name)); + } + } + } + for (String lib : e->LibraryName.paths) { lib = string_trim_whitespace(lib); if (lib.len == 0) { @@ -541,7 +561,9 @@ gb_internal i32 linker_stage(LinkerData *gen) { short_circuit = true; } else if (string_ends_with(lib, str_lit(".dylib"))) { short_circuit = true; - } else if (string_ends_with(lib, str_lit(".so"))) { + } else if (string_ends_with(lib, str_lit(".so"))) { + short_circuit = true; + } else if (e->LibraryName.ignore_duplicates) { short_circuit = true; } |