diff options
| author | gingerBill <bill@gingerbill.org> | 2024-11-14 16:32:26 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2024-11-14 16:32:26 +0000 |
| commit | 21a25bddde9781a1e4c678e1c680435075d6080a (patch) | |
| tree | bbe95e2051213d38db3ae65e6b26bde06d6f7529 /src/linker.cpp | |
| parent | c440122d93240652000757bc4dfd232a69a47cef (diff) | |
Add `-radlink`
Diffstat (limited to 'src/linker.cpp')
| -rw-r--r-- | src/linker.cpp | 61 |
1 files changed, 41 insertions, 20 deletions
diff --git a/src/linker.cpp b/src/linker.cpp index 1ffec3bf7..200bd9429 100644 --- a/src/linker.cpp +++ b/src/linker.cpp @@ -169,6 +169,8 @@ gb_internal i32 linker_stage(LinkerData *gen) { 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"); } timings_start_section(timings, section_name); @@ -304,7 +306,45 @@ 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) { // msvc + if (build_context.use_lld) { // 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 " + "%.*s " + "%.*s " + "%s " + "", + LIT(build_context.ODIN_ROOT), object_files, LIT(output_filename), + link_settings, + LIT(build_context.ODIN_WINDOWS_SUBSYSTEM), + LIT(build_context.link_flags), + LIT(build_context.extra_linker_flags), + lib_str + ); + + if (result) { + return result; + } + } else if (build_context.use_radlink) { + result = system_exec_command_line_app("msvc-rad-link", + "\"%.*s\\bin\\radlink\" %s -OUT:\"%.*s\" %s " + "/nologo /incremental:no /opt:ref /subsystem:%.*s " + "%.*s " + "%.*s " + "%s " + "", + LIT(build_context.ODIN_ROOT), object_files, LIT(output_filename), + link_settings, + LIT(build_context.ODIN_WINDOWS_SUBSYSTEM), + LIT(build_context.link_flags), + LIT(build_context.extra_linker_flags), + lib_str + ); + + if (result) { + return result; + } + } else { // 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)); @@ -365,25 +405,6 @@ gb_internal i32 linker_stage(LinkerData *gen) { if (result) { return result; } - } else { // 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 " - "%.*s " - "%.*s " - "%s " - "", - LIT(build_context.ODIN_ROOT), object_files, LIT(output_filename), - link_settings, - LIT(build_context.ODIN_WINDOWS_SUBSYSTEM), - LIT(build_context.link_flags), - LIT(build_context.extra_linker_flags), - lib_str - ); - - if (result) { - return result; - } } } else { timings_start_section(timings, str_lit("ld-link")); |