aboutsummaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
authorJeroen van Rijn <Kelimion@users.noreply.github.com>2022-05-03 14:01:22 +0200
committerGitHub <noreply@github.com>2022-05-03 14:01:22 +0200
commit6aaab4988e650a1de8ee01ca3b2935a86cb9016f (patch)
treee230f02631491c95a29518ad123a7afb0f53f957 /src/main.cpp
parent8bac82320fbba53a440bf42b117c702e726db093 (diff)
parentd9b0c05acf72206d00068e708c1e2ebd872b2586 (diff)
Merge pull request #1765 from Kelimion/more_opt_handling
Handle negative integer flags, add deprecation warnings.
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp40
1 files changed, 21 insertions, 19 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 86c1544a4..2633f8e55 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -825,11 +825,19 @@ bool parse_build_flags(Array<String> args) {
String name = substring(flag, 1, flag.len);
isize end = 0;
+ bool have_equals = false;
for (; end < name.len; end++) {
if (name[end] == ':') break;
- if (name[end] == '=') break; // IMPORTANT TODO(bill): DEPRECATE THIS!!!!
+ if (name[end] == '=') {
+ have_equals = true;
+ break;
+ }
}
name = substring(name, 0, end);
+ if (have_equals && name != "opt") {
+ gb_printf_err("`flag=value` has been deprecated and will be removed next release. Use `%.*s:` instead.\n", LIT(name), LIT(name));
+ }
+
String param = {};
if (end < flag.len-1) param = substring(flag, 2+end, flag.len);
@@ -903,35 +911,35 @@ bool parse_build_flags(Array<String> args) {
switch (bf.param_kind) {
case BuildFlagParam_None:
if (value.kind != ExactValue_Invalid) {
- gb_printf_err("%.*s expected no value, got %.*s", LIT(name), LIT(param));
+ gb_printf_err("%.*s expected no value, got %.*s\n", LIT(name), LIT(param));
bad_flags = true;
ok = false;
}
break;
case BuildFlagParam_Boolean:
if (value.kind != ExactValue_Bool) {
- gb_printf_err("%.*s expected a boolean, got %.*s", LIT(name), LIT(param));
+ gb_printf_err("%.*s expected a boolean, got %.*s\n", LIT(name), LIT(param));
bad_flags = true;
ok = false;
}
break;
case BuildFlagParam_Integer:
if (value.kind != ExactValue_Integer) {
- gb_printf_err("%.*s expected an integer, got %.*s", LIT(name), LIT(param));
+ gb_printf_err("%.*s expected an integer, got %.*s\n", LIT(name), LIT(param));
bad_flags = true;
ok = false;
}
break;
case BuildFlagParam_Float:
if (value.kind != ExactValue_Float) {
- gb_printf_err("%.*s expected a floating pointer number, got %.*s", LIT(name), LIT(param));
+ gb_printf_err("%.*s expected a floating pointer number, got %.*s\n", LIT(name), LIT(param));
bad_flags = true;
ok = false;
}
break;
case BuildFlagParam_String:
if (value.kind != ExactValue_String) {
- gb_printf_err("%.*s expected a string, got %.*s", LIT(name), LIT(param));
+ gb_printf_err("%.*s expected a string, got %.*s\n", LIT(name), LIT(param));
bad_flags = true;
ok = false;
}
@@ -961,19 +969,10 @@ bool parse_build_flags(Array<String> args) {
bad_flags = true;
break;
}
- // NOTE(Jeroen): We can't rely on `value.value_integer` here, because words will be returned as `0`.
- // Meaning that -opt:speed will coerce to opt:0. That's not what the user intended.
- // Instead we'll just compare 0..3 directly.
- if (param == "0") {
- build_context.optimization_level = 0;
- } else if (param == "1") {
- build_context.optimization_level = 1;
- } else if (param == "2") {
- build_context.optimization_level = 2;
- } else if (param == "3") {
- build_context.optimization_level = 3;
- } else {
- gb_printf_err("Invalid optimization level for -o:<integer>, got %.*s\n", LIT(param));
+
+ build_context.optimization_level = cast(i32)big_int_to_i64(&value.value_integer);
+ if (build_context.optimization_level < 0 || build_context.optimization_level > 3) {
+ gb_printf_err("Invalid optimization level for -o:<integer>, got %d\n", build_context.optimization_level);
gb_printf_err("Valid optimization levels:\n");
gb_printf_err("\t0\n");
gb_printf_err("\t1\n");
@@ -981,6 +980,9 @@ bool parse_build_flags(Array<String> args) {
gb_printf_err("\t3\n");
bad_flags = true;
}
+
+ // Deprecation warning.
+ gb_printf_err("`-opt` has been deprecated and will be removed next release. Use `-o:minimal`, etc.\n");
break;
}
case BuildFlag_OptimizationMode: {