Browse Source

When using `-debug`, default to `-o:none` unless explicitly specified

gingerBill 2 years ago
parent
commit
fda1e4409c
2 changed files with 11 additions and 3 deletions
  1. 7 3
      src/build_settings.cpp
  2. 4 0
      src/main.cpp

+ 7 - 3
src/build_settings.cpp

@@ -262,6 +262,7 @@ struct BuildContext {
 	String microarch;
 	String microarch;
 	BuildModeKind build_mode;
 	BuildModeKind build_mode;
 	bool   generate_docs;
 	bool   generate_docs;
+	bool   custom_optimization_level;
 	i32    optimization_level;
 	i32    optimization_level;
 	bool   show_timings;
 	bool   show_timings;
 	TimingsExportFormat export_timings_format;
 	TimingsExportFormat export_timings_format;
@@ -1272,6 +1273,12 @@ gb_internal void init_build_context(TargetMetrics *cross_target) {
 		gb_exit(1);
 		gb_exit(1);
 	}
 	}
 
 
+	if (bc->ODIN_DEBUG && !bc->custom_optimization_level) {
+		// NOTE(bill): when building with `-debug` but not specifying an optimization level
+		// default to `-o:none` to improve the debug symbol generation by default
+		bc->optimization_level = -1; // -o:none
+	}
+
 	bc->optimization_level = gb_clamp(bc->optimization_level, -1, 2);
 	bc->optimization_level = gb_clamp(bc->optimization_level, -1, 2);
 
 
 	// ENFORCE DYNAMIC MAP CALLS
 	// ENFORCE DYNAMIC MAP CALLS
@@ -1285,9 +1292,6 @@ gb_internal void init_build_context(TargetMetrics *cross_target) {
 			break;
 			break;
 		}
 		}
 	}
 	}
-
-	#undef LINK_FLAG_X64
-	#undef LINK_FLAG_386
 }
 }
 
 
 #if defined(GB_SYSTEM_WINDOWS)
 #if defined(GB_SYSTEM_WINDOWS)

+ 4 - 0
src/main.cpp

@@ -1035,12 +1035,16 @@ gb_internal bool parse_build_flags(Array<String> args) {
 						case BuildFlag_OptimizationMode: {
 						case BuildFlag_OptimizationMode: {
 							GB_ASSERT(value.kind == ExactValue_String);
 							GB_ASSERT(value.kind == ExactValue_String);
 							if (value.value_string == "none") {
 							if (value.value_string == "none") {
+								build_context.custom_optimization_level = true;
 								build_context.optimization_level = -1;
 								build_context.optimization_level = -1;
 							} else if (value.value_string == "minimal") {
 							} else if (value.value_string == "minimal") {
+								build_context.custom_optimization_level = true;
 								build_context.optimization_level = 0;
 								build_context.optimization_level = 0;
 							} else if (value.value_string == "size") {
 							} else if (value.value_string == "size") {
+								build_context.custom_optimization_level = true;
 								build_context.optimization_level = 1;
 								build_context.optimization_level = 1;
 							} else if (value.value_string == "speed") {
 							} else if (value.value_string == "speed") {
+								build_context.custom_optimization_level = true;
 								build_context.optimization_level = 2;
 								build_context.optimization_level = 2;
 							} else {
 							} else {
 								gb_printf_err("Invalid optimization mode for -o:<string>, got %.*s\n", LIT(value.value_string));
 								gb_printf_err("Invalid optimization mode for -o:<string>, got %.*s\n", LIT(value.value_string));