diff --git a/src/build/build_options.c b/src/build/build_options.c index 0e88c13ae..936ae0467 100644 --- a/src/build/build_options.c +++ b/src/build/build_options.c @@ -97,6 +97,8 @@ static void usage(void) OUTPUT(" -O3 - Aggressive optimization."); OUTPUT(" -Os - Optimize for size."); OUTPUT(" -Oz - Optimize for tiny size."); + OUTPUT(" -O0+ - No optimization, single module"); + OUTPUT(" -O1+ - Simple optimizations, single module."); OUTPUT(" -O2+ - Default optimization level, single module"); OUTPUT(" -O3+ - Aggressive optimization, single module."); OUTPUT(" -Os+ - Optimize for size, single module."); @@ -395,10 +397,18 @@ static void parse_option(BuildOptions *options) { FAIL_WITH_ERR("Multiple optimization levels were set."); } - if (match_shortopt("O0")) + if (match_shortopt("O0+")) + { + options->optimization_setting_override = OPT_SETTING_O0_PLUS; + } + else if (match_shortopt("O0")) { options->optimization_setting_override = OPT_SETTING_O0; } + else if (match_shortopt("O1+")) + { + options->optimization_setting_override = OPT_SETTING_O1_PLUS; + } else if (match_shortopt("O1")) { options->optimization_setting_override = OPT_SETTING_O1; @@ -615,6 +625,7 @@ static void parse_option(BuildOptions *options) { if (at_end() || next_is_opt()) error_exit("error: --stdlib needs a directory."); options->std_lib_dir = check_dir(next_arg()); + options->no_stdlib = false; return; } if (match_longopt("nostdlib")) diff --git a/src/build/build_options.h b/src/build/build_options.h index 825461242..2aaab8751 100644 --- a/src/build/build_options.h +++ b/src/build/build_options.h @@ -89,7 +89,9 @@ typedef enum { OPT_SETTING_NOT_SET = -1, OPT_SETTING_O0 = 0, + OPT_SETTING_O0_PLUS, OPT_SETTING_O1, + OPT_SETTING_O1_PLUS, OPT_SETTING_O2, OPT_SETTING_O2_PLUS, OPT_SETTING_O3, diff --git a/src/build/builder.c b/src/build/builder.c index 63c6f1fac..0ebdf29a2 100644 --- a/src/build/builder.c +++ b/src/build/builder.c @@ -129,11 +129,17 @@ static void update_build_target_from_options(BuildTarget *target, BuildOptions * // Copy optimization levels. switch (options->optimization_setting_override) { + case OPT_SETTING_O0_PLUS: + target->single_module = true; + FALLTHROUGH; case OPT_SETTING_O0: target->optimization_level = OPTIMIZATION_NONE; target->size_optimization_level = SIZE_OPTIMIZATION_NONE; target->feature.safe_mode = true; break; + case OPT_SETTING_O1_PLUS: + target->single_module = true; + FALLTHROUGH; case OPT_SETTING_O1: target->optimization_level = OPTIMIZATION_LESS; target->size_optimization_level = SIZE_OPTIMIZATION_NONE; diff --git a/src/version.h b/src/version.h index 09d768d69..d6f773936 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define COMPILER_VERSION "0.3.79" \ No newline at end of file +#define COMPILER_VERSION "0.3.80" \ No newline at end of file