mirror of
https://github.com/odin-lang/Odin.git
synced 2025-12-30 01:44:36 +00:00
Adds new flag for linker to know if it should link the system library or not
This commit is contained in:
@@ -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,10 @@ 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(gen->needs_system_library_linked) {
|
||||
platform_lib_str = gb_string_appendc(platform_lib_str, "-lSystem");
|
||||
}
|
||||
} else {
|
||||
platform_lib_str = gb_string_appendc(platform_lib_str, "-lc -lm");
|
||||
}
|
||||
|
||||
@@ -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_MAJOR_VERSION < 14)
|
||||
linker_enable_system_library_linking(gen);
|
||||
#endif
|
||||
|
||||
gen->info = &c->info;
|
||||
|
||||
map_init(&gen->modules, gen->info->packages.count*2);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user