فهرست منبع

Also clean up .dSym on Darwin

Jeroen van Rijn 3 ماه پیش
والد
کامیت
405bf7cd55
3فایلهای تغییر یافته به همراه28 افزوده شده و 18 حذف شده
  1. 18 10
      src/build_settings.cpp
  2. 3 3
      src/linker.cpp
  3. 7 5
      src/main.cpp

+ 18 - 10
src/build_settings.cpp

@@ -288,7 +288,7 @@ enum BuildPath : u8 {
 	BuildPath_VS_LIB,           // vs_library_path
 
 	BuildPath_Output,           // Output Path for .exe, .dll, .so, etc. Can be overridden with `-out:`.
-	BuildPath_PDB,              // Output Path for .pdb file, can be overridden with `-pdb-name:`.
+	BuildPath_Symbols,          // Output Path for .pdb or .dSym file, can be overridden with `-pdb-name:`.
 
 	BuildPathCOUNT,
 };
@@ -2292,15 +2292,23 @@ 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;
+	if (build_context.ODIN_DEBUG) {
+		if (build_context.metrics.os == TargetOs_windows) {
+			if (bc->pdb_filepath.len > 0) {
+				bc->build_paths[BuildPath_Symbols] = path_from_string(ha, bc->pdb_filepath);
+			} else {
+				Path symbol_path;
+				symbol_path.basename = copy_string(ha, bc->build_paths[BuildPath_Output].basename);
+				symbol_path.name     = copy_string(ha, bc->build_paths[BuildPath_Output].name);
+				symbol_path.ext      = copy_string(ha, STR_LIT("pdb"));
+				bc->build_paths[BuildPath_Symbols] = symbol_path;
+			}
+		} else if (build_context.metrics.os == TargetOs_darwin) {
+			Path symbol_path;
+			symbol_path.basename = copy_string(ha, bc->build_paths[BuildPath_Output].basename);
+			symbol_path.name     = copy_string(ha, bc->build_paths[BuildPath_Output].name);
+			symbol_path.ext      = copy_string(ha, STR_LIT("dSym"));
+			bc->build_paths[BuildPath_Symbols] = symbol_path;
 		}
 	}
 

+ 3 - 3
src/linker.cpp

@@ -281,9 +281,9 @@ try_cross_linking:;
 				link_settings = gb_string_append_fmt(link_settings, " /ENTRY:mainCRTStartup");
 			}
 
-			if (build_context.build_paths[BuildPath_PDB].name != "") {
-				String pdb_path = path_to_string(heap_allocator(), build_context.build_paths[BuildPath_PDB]);
-				link_settings = gb_string_append_fmt(link_settings, " /PDB:\"%.*s\"", LIT(pdb_path));
+			if (build_context.build_paths[BuildPath_Symbols].name != "") {
+				String symbol_path = path_to_string(heap_allocator(), build_context.build_paths[BuildPath_Symbols]);
+				link_settings = gb_string_append_fmt(link_settings, " /PDB:\"%.*s\"", LIT(symbol_path));
 			}
 
 			if (build_context.build_mode != BuildMode_StaticLibrary) {

+ 7 - 5
src/main.cpp

@@ -3890,12 +3890,14 @@ end_of_code_gen:;
 			char const *filename = cast(char const *)exe_name.text;
 			gb_file_remove(filename);
 
-			if (build_context.metrics.os == TargetOs_windows && build_context.ODIN_DEBUG) {
-				String pdb_path = path_to_string(heap_allocator(), build_context.build_paths[BuildPath_PDB]);
-				defer (gb_free(heap_allocator(), pdb_path.text));
+			if (build_context.ODIN_DEBUG) {
+				if (build_context.metrics.os == TargetOs_windows || build_context.metrics.os == TargetOs_darwin) {
+					String symbol_path = path_to_string(heap_allocator(), build_context.build_paths[BuildPath_Symbols]);
+					defer (gb_free(heap_allocator(), symbol_path.text));
 
-				filename = cast(char const *)pdb_path.text;
-				gb_file_remove(filename);
+					filename = cast(char const *)symbol_path.text;
+					gb_file_remove(filename);
+				}
 			}
 		}
 	}