diff options
| author | gingerBill <bill@gingerbill.org> | 2024-11-14 17:04:45 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2024-11-14 17:04:45 +0000 |
| commit | b9886dfcc79fd40c077feab2f81aa3b4d8ebbc6f (patch) | |
| tree | e1ba199331725591ad959d2af51fb598c8506438 /src/linker.cpp | |
| parent | 26f67416749e45287057702af94abaae23c44e8a (diff) | |
Add `-linker:<string>` to replace `-lld` and `-radlink`
Diffstat (limited to 'src/linker.cpp')
| -rw-r--r-- | src/linker.cpp | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/linker.cpp b/src/linker.cpp index 200bd9429..261d6e7a4 100644 --- a/src/linker.cpp +++ b/src/linker.cpp @@ -167,10 +167,10 @@ gb_internal i32 linker_stage(LinkerData *gen) { if (is_windows) { String section_name = str_lit("msvc-link"); - if (build_context.use_lld) { - section_name = str_lit("lld-link"); - } else if (build_context.use_radlink) { - section_name = str_lit("rad-link"); + switch (build_context.linker_choice) { + case Linker_Default: break; + case Linker_lld: section_name = str_lit("lld-link"); break; + case Linker_radlink: section_name = str_lit("rad-link"); break; } timings_start_section(timings, section_name); @@ -306,7 +306,8 @@ gb_internal i32 linker_stage(LinkerData *gen) { String windows_sdk_bin_path = path_to_string(heap_allocator(), build_context.build_paths[BuildPath_Win_SDK_Bin_Path]); defer (gb_free(heap_allocator(), windows_sdk_bin_path.text)); - if (build_context.use_lld) { // lld + switch (build_context.linker_choice) { + case Linker_lld: result = system_exec_command_line_app("msvc-lld-link", "\"%.*s\\bin\\lld-link\" %s -OUT:\"%.*s\" %s " "/nologo /incremental:no /opt:ref /subsystem:%.*s " @@ -325,7 +326,8 @@ gb_internal i32 linker_stage(LinkerData *gen) { if (result) { return result; } - } else if (build_context.use_radlink) { + break; + case Linker_radlink: result = system_exec_command_line_app("msvc-rad-link", "\"%.*s\\bin\\radlink\" %s -OUT:\"%.*s\" %s " "/nologo /incremental:no /opt:ref /subsystem:%.*s " @@ -344,7 +346,8 @@ gb_internal i32 linker_stage(LinkerData *gen) { if (result) { return result; } - } else { // msvc + break; + default: { // msvc String res_path = quote_path(heap_allocator(), build_context.build_paths[BuildPath_RES]); String rc_path = quote_path(heap_allocator(), build_context.build_paths[BuildPath_RC]); defer (gb_free(heap_allocator(), res_path.text)); @@ -405,6 +408,8 @@ gb_internal i32 linker_stage(LinkerData *gen) { if (result) { return result; } + break; + } } } else { timings_start_section(timings, str_lit("ld-link")); @@ -700,7 +705,7 @@ gb_internal i32 linker_stage(LinkerData *gen) { link_command_line = gb_string_append_fmt(link_command_line, " %.*s ", LIT(build_context.extra_linker_flags)); link_command_line = gb_string_append_fmt(link_command_line, " %s ", link_settings); - if (build_context.use_lld) { + if (build_context.linker_choice == Linker_lld) { link_command_line = gb_string_append_fmt(link_command_line, " -fuse-ld=lld"); result = system_exec_command_line_app("lld-link", link_command_line); } else { |