From 0d0f311df1e31102f4138c1a28110f86dcf60fca Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Thu, 29 May 2025 19:02:46 +0200 Subject: Always provide /PDB option to linker if generating debug info. radlink by default places the .PDB file in the working directory, even if /OUT says to place it elsewhere, unlike link.exe, which places it next to the executable by default. So, if compiling using -debug, we generate a PDB path even if -pdb-name wasn't used to override it. --- src/build_settings.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'src/build_settings.cpp') diff --git a/src/build_settings.cpp b/src/build_settings.cpp index 9d1685cd7..e46670528 100644 --- a/src/build_settings.cpp +++ b/src/build_settings.cpp @@ -2066,10 +2066,6 @@ gb_internal bool init_build_paths(String init_filename) { } } - if (bc->pdb_filepath.len > 0) { - bc->build_paths[BuildPath_PDB] = path_from_string(ha, bc->pdb_filepath); - } - if ((bc->command_kind & Command__does_build) && (!bc->ignore_microsoft_magic)) { // NOTE(ic): It would be nice to extend this so that we could specify the Visual Studio version that we want instead of defaulting to the latest. Find_Result find_result = find_visual_studio_and_windows_sdk(); @@ -2268,6 +2264,18 @@ gb_internal bool init_build_paths(String init_filename) { bc->build_paths[BuildPath_Output] = output_path; } + if (build_context.metrics.os == TargetOs_windows && build_context.ODIN_DEBUG) { + if (bc->pdb_filepath.len > 0) { + bc->build_paths[BuildPath_PDB] = path_from_string(ha, bc->pdb_filepath); + } else { + Path pdb_path; + pdb_path.basename = copy_string(ha, bc->build_paths[BuildPath_Output].basename); + pdb_path.name = copy_string(ha, bc->build_paths[BuildPath_Output].name); + pdb_path.ext = copy_string(ha, STR_LIT("pdb")); + bc->build_paths[BuildPath_PDB] = pdb_path; + } + } + // Do we have an extension? We might not if the output filename was supplied. if (bc->build_paths[BuildPath_Output].ext.len == 0) { if (build_context.metrics.os == TargetOs_windows || is_arch_wasm() || build_context.build_mode != BuildMode_Executable) { -- cgit v1.2.3