diff options
| author | gingerBill <bill@gingerbill.org> | 2021-04-21 23:39:48 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2021-04-21 23:39:48 +0100 |
| commit | 5b3802b8cafd465185395f2475df98bb171be7af (patch) | |
| tree | aba128112c0084b48bab18a142579016b293f1f6 /src/main.cpp | |
| parent | 2fb0383e82e34d5bf0dd222f03649ce7abb1288f (diff) | |
Add new `-o:<string>` flag as an alternative to `-opt:<integer>`
Diffstat (limited to 'src/main.cpp')
| -rw-r--r-- | src/main.cpp | 49 |
1 files changed, 48 insertions, 1 deletions
diff --git a/src/main.cpp b/src/main.cpp index 6686af4ef..c08495c18 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -571,6 +571,7 @@ enum BuildFlagKind { BuildFlag_OutFile, BuildFlag_OptimizationLevel, + BuildFlag_OptimizationMode, BuildFlag_ShowTimings, BuildFlag_ShowUnused, BuildFlag_ShowUnusedWithLocation, @@ -687,6 +688,8 @@ bool parse_build_flags(Array<String> args) { add_flag(&build_flags, BuildFlag_Help, str_lit("help"), BuildFlagParam_None, Command_all); add_flag(&build_flags, BuildFlag_OutFile, str_lit("out"), BuildFlagParam_String, Command__does_build &~ Command_test); add_flag(&build_flags, BuildFlag_OptimizationLevel, str_lit("opt"), BuildFlagParam_Integer, Command__does_build); + add_flag(&build_flags, BuildFlag_OptimizationMode, str_lit("o"), BuildFlagParam_String, Command__does_build); + add_flag(&build_flags, BuildFlag_OptimizationMode, str_lit("O"), BuildFlagParam_String, Command__does_build); add_flag(&build_flags, BuildFlag_ShowTimings, str_lit("show-timings"), BuildFlagParam_None, Command__does_check); add_flag(&build_flags, BuildFlag_ShowMoreTimings, str_lit("show-more-timings"), BuildFlagParam_None, Command__does_check); add_flag(&build_flags, BuildFlag_ShowUnused, str_lit("show-unused"), BuildFlagParam_None, Command_check); @@ -885,8 +888,36 @@ bool parse_build_flags(Array<String> args) { } case BuildFlag_OptimizationLevel: GB_ASSERT(value.kind == ExactValue_Integer); + if (set_flags[BuildFlag_OptimizationMode]) { + gb_printf_err("Mixture of -opt and -o is not allowed\n"); + bad_flags = true; + break; + } build_context.optimization_level = cast(i32)big_int_to_i64(&value.value_integer); break; + case BuildFlag_OptimizationMode: + GB_ASSERT(value.kind == ExactValue_String); + if (set_flags[BuildFlag_OptimizationLevel]) { + gb_printf_err("Mixture of -opt and -o is not allowed\n"); + bad_flags = true; + break; + } + + if (value.value_string == "minimal") { + build_context.optimization_level = 0; + } else if (value.value_string == "size") { + build_context.optimization_level = 1; + } else if (value.value_string == "speed") { + build_context.optimization_level = 2; + } else { + gb_printf_err("Invalid optimization mode for -o:<string>, got %.*s\n", LIT(value.value_string)); + gb_printf_err("Valid optimization modes:\n"); + gb_printf_err("\tminimal\n"); + gb_printf_err("\tsize\n"); + gb_printf_err("\tspeed\n"); + bad_flags = true; + } + break; case BuildFlag_ShowTimings: GB_ASSERT(value.kind == ExactValue_Invalid); build_context.show_timings = true; @@ -1113,6 +1144,12 @@ bool parse_build_flags(Array<String> args) { build_context.build_mode = BuildMode_LLVM_IR; } else { gb_printf_err("Unknown build mode '%.*s'\n", LIT(str)); + gb_printf_err("Valid build modes:\n"); + gb_printf_err("\tdll, shared\n"); + gb_printf_err("\tobj, object\n"); + gb_printf_err("\texe\n"); + gb_printf_err("\tasm, assembly, assembler\n"); + gb_printf_err("\tllvm, llvm-ir\n"); bad_flags = true; break; } @@ -1614,6 +1651,10 @@ void print_show_help(String const arg0, String const &command) { print_usage_line(1, "-all-packages"); print_usage_line(2, "Generates documentation for all packages used in the current project"); print_usage_line(0, ""); + + print_usage_line(1, "-doc-format"); + print_usage_line(2, "Generates documentation as the .odin-doc format (useful for external tooling)"); + print_usage_line(0, ""); } if (run_or_build) { @@ -1623,10 +1664,16 @@ void print_show_help(String const arg0, String const &command) { print_usage_line(0, ""); print_usage_line(1, "-opt:<integer>"); - print_usage_line(2, "Set the optimization level for complication"); + print_usage_line(2, "Set the optimization level for compliation"); print_usage_line(2, "Accepted values: 0, 1, 2, 3"); print_usage_line(2, "Example: -opt:2"); print_usage_line(0, ""); + + print_usage_line(1, "-o:<string>"); + print_usage_line(2, "Set the optimization mode for compliation"); + print_usage_line(2, "Accepted values: minimal, size, speed"); + print_usage_line(2, "Example: -o:speed"); + print_usage_line(0, ""); } if (check) { |