aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2023-05-02 14:44:56 +0100
committergingerBill <bill@gingerbill.org>2023-05-02 14:44:56 +0100
commitfda1e4409c0e2ce5311bd37888171b948df985fd (patch)
treedf6d1f64794d19bbcdb21d122793fff8ef166d6e /src
parentf8bdd42027835b26ed648aa5932faa131fe6da9d (diff)
When using `-debug`, default to `-o:none` unless explicitly specified
Diffstat (limited to 'src')
-rw-r--r--src/build_settings.cpp10
-rw-r--r--src/main.cpp4
2 files changed, 11 insertions, 3 deletions
diff --git a/src/build_settings.cpp b/src/build_settings.cpp
index ac033df71..78b1bd6c4 100644
--- a/src/build_settings.cpp
+++ b/src/build_settings.cpp
@@ -262,6 +262,7 @@ struct BuildContext {
String microarch;
BuildModeKind build_mode;
bool generate_docs;
+ bool custom_optimization_level;
i32 optimization_level;
bool show_timings;
TimingsExportFormat export_timings_format;
@@ -1272,6 +1273,12 @@ gb_internal void init_build_context(TargetMetrics *cross_target) {
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);
// ENFORCE DYNAMIC MAP CALLS
@@ -1285,9 +1292,6 @@ gb_internal void init_build_context(TargetMetrics *cross_target) {
break;
}
}
-
- #undef LINK_FLAG_X64
- #undef LINK_FLAG_386
}
#if defined(GB_SYSTEM_WINDOWS)
diff --git a/src/main.cpp b/src/main.cpp
index 33ee65c6b..162cd309e 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1035,12 +1035,16 @@ gb_internal bool parse_build_flags(Array<String> args) {
case BuildFlag_OptimizationMode: {
GB_ASSERT(value.kind == ExactValue_String);
if (value.value_string == "none") {
+ build_context.custom_optimization_level = true;
build_context.optimization_level = -1;
} else if (value.value_string == "minimal") {
+ build_context.custom_optimization_level = true;
build_context.optimization_level = 0;
} else if (value.value_string == "size") {
+ build_context.custom_optimization_level = true;
build_context.optimization_level = 1;
} else if (value.value_string == "speed") {
+ build_context.custom_optimization_level = true;
build_context.optimization_level = 2;
} else {
gb_printf_err("Invalid optimization mode for -o:<string>, got %.*s\n", LIT(value.value_string));