aboutsummaryrefslogtreecommitdiff
path: root/src/linker.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2025-01-28 10:34:41 +0000
committergingerBill <bill@gingerbill.org>2025-01-28 10:34:41 +0000
commit15ece42e74acd7d62fc65bbc611e6766ec34187a (patch)
treef3a247cca0c5aefc9e82fd456d37b448e6791552 /src/linker.cpp
parent868ab277209908a3857c874014bced9e0fae6949 (diff)
Print frameworks first on Darwin targets
Diffstat (limited to 'src/linker.cpp')
-rw-r--r--src/linker.cpp24
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;
}