aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeroen van Rijn <Kelimion@users.noreply.github.com>2024-01-02 21:35:41 +0100
committerGitHub <noreply@github.com>2024-01-02 21:35:41 +0100
commitcb1c10ce83b9a51244ad50dc7a8beb4f3271ae09 (patch)
treedcbd95a129f9badfb54b7cc1e15a7e4d5cb270f9
parentee97c5958f9c39730652bd7365b106e4cfbd7c87 (diff)
parent37c2e9bec39be9f5e38baaa9648e9f4c357db7f3 (diff)
Merge pull request #3067 from Platin21/fix/macos-no-duplicated-linkage
Fix/macos no duplicated linkage
-rw-r--r--src/linker.cpp20
-rw-r--r--src/llvm_backend_general.cpp4
-rw-r--r--src/tilde.cpp4
3 files changed, 27 insertions, 1 deletions
diff --git a/src/linker.cpp b/src/linker.cpp
index 6ef6c0386..ef9fa8e59 100644
--- a/src/linker.cpp
+++ b/src/linker.cpp
@@ -7,10 +7,19 @@ struct LinkerData {
Array<String> output_temp_paths;
String output_base;
String output_name;
+#if defined(GB_SYSTEM_OSX)
+ b8 needs_system_library_linked;
+#endif
};
gb_internal i32 system_exec_command_line_app(char const *name, char const *fmt, ...);
+#if defined(GB_SYSTEM_OSX)
+gb_internal void linker_enable_system_library_linking(LinkerData *ld) {
+ ld->needs_system_library_linked = 1;
+}
+#endif
+
gb_internal void linker_data_init(LinkerData *ld, CheckerInfo *info, String const &init_fullpath) {
gbAllocator ha = heap_allocator();
array_init(&ld->output_object_paths, ha);
@@ -18,6 +27,10 @@ gb_internal void linker_data_init(LinkerData *ld, CheckerInfo *info, String cons
array_init(&ld->foreign_libraries, ha, 0, 1024);
ptr_set_init(&ld->foreign_libraries_set, 1024);
+#if defined(GB_SYSTEM_OSX)
+ ld->needs_system_library_linked = 0;
+#endif
+
if (build_context.out_filepath.len == 0) {
ld->output_name = remove_directory_from_path(init_fullpath);
ld->output_name = remove_extension_from_path(ld->output_name);
@@ -470,7 +483,12 @@ gb_internal i32 linker_stage(LinkerData *gen) {
gbString platform_lib_str = gb_string_make(heap_allocator(), "");
defer (gb_string_free(platform_lib_str));
if (build_context.metrics.os == TargetOs_darwin) {
- platform_lib_str = gb_string_appendc(platform_lib_str, "-lSystem -lm -Wl,-syslibroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -L/usr/local/lib");
+ platform_lib_str = gb_string_appendc(platform_lib_str, "-lm -Wl,-syslibroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -L/usr/local/lib");
+ #if defined(GB_SYSTEM_OSX)
+ if(gen->needs_system_library_linked == 1) {
+ platform_lib_str = gb_string_appendc(platform_lib_str, " -lSystem ");
+ }
+ #endif
} else {
platform_lib_str = gb_string_appendc(platform_lib_str, "-lc -lm");
}
diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp
index c149ec853..54327cc54 100644
--- a/src/llvm_backend_general.cpp
+++ b/src/llvm_backend_general.cpp
@@ -107,6 +107,10 @@ gb_internal bool lb_init_generator(lbGenerator *gen, Checker *c) {
String init_fullpath = c->parser->init_fullpath;
linker_data_init(gen, &c->info, init_fullpath);
+ #if defined(GB_SYSTEM_OSX) && (LLVM_VERSION_MAJOR < 14)
+ linker_enable_system_library_linking(gen);
+ #endif
+
gen->info = &c->info;
map_init(&gen->modules, gen->info->packages.count*2);
diff --git a/src/tilde.cpp b/src/tilde.cpp
index 8e3e25836..06428f317 100644
--- a/src/tilde.cpp
+++ b/src/tilde.cpp
@@ -726,6 +726,10 @@ gb_internal bool cg_generate_code(Checker *c, LinkerData *linker_data) {
linker_data_init(linker_data, info, c->parser->init_fullpath);
+ #if defined(GB_SYSTEM_OSX)
+ linker_enable_system_library_linking(linker_data);
+ #endif
+
cg_global_arena_init();
cgModule *m = cg_module_create(c);