From b83822fd354835e596ef7fb1dca85fd7ce721851 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 9 Jul 2024 15:41:05 +0100 Subject: [PATCH] #3892 - Use temporary directory for asm file generation --- src/linker.cpp | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/linker.cpp b/src/linker.cpp index 34c0af7e5..890a74e5a 100644 --- a/src/linker.cpp +++ b/src/linker.cpp @@ -222,7 +222,21 @@ gb_internal i32 linker_stage(LinkerData *gen) { if (has_asm_extension(lib)) { if (!string_set_update(&asm_files, lib)) { String asm_file = lib; - String obj_file = concatenate_strings(permanent_allocator(), asm_file, str_lit(".obj")); + String obj_file = {}; + String temp_dir = temporary_directory(temporary_allocator()); + if (temp_dir.len != 0) { + String filename = filename_without_directory(asm_file); + + gbString str = gb_string_make(heap_allocator(), ""); + str = gb_string_append_length(str, temp_dir.text, temp_dir.len); + str = gb_string_appendc(str, "/"); + str = gb_string_append_length(str, filename.text, filename.len); + str = gb_string_append_fmt(str, "-%p.obj", asm_file.text); + obj_file = make_string_c(str); + } else { + obj_file = concatenate_strings(permanent_allocator(), asm_file, str_lit(".obj")); + } + String obj_format = str_lit("win64"); #if defined(GB_ARCH_32_BIT) obj_format = str_lit("win32"); @@ -413,7 +427,22 @@ gb_internal i32 linker_stage(LinkerData *gen) { continue; // already handled } String asm_file = lib; - String obj_file = concatenate_strings(permanent_allocator(), asm_file, str_lit(".o")); + String obj_file = {}; + + String temp_dir = temporary_directory(temporary_allocator()); + if (temp_dir.len != 0) { + String filename = filename_without_directory(asm_file); + + gbString str = gb_string_make(heap_allocator(), ""); + str = gb_string_append_length(str, temp_dir.text, temp_dir.len); + str = gb_string_appendc(str, "/"); + str = gb_string_append_length(str, filename.text, filename.len); + str = gb_string_append_fmt(str, "-%p.o", asm_file.text); + obj_file = make_string_c(str); + } else { + obj_file = concatenate_strings(permanent_allocator(), asm_file, str_lit(".o")); + } + String obj_format; #if defined(GB_ARCH_64_BIT) if (is_osx) {