From 642ecc363b534908269adbf5abfa78c3f191421f Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Sun, 29 Sep 2024 11:04:37 +0200 Subject: fix errors not being printed after parse warnings Fixes #4299 --- src/main.cpp | 4 ---- 1 file changed, 4 deletions(-) (limited to 'src/main.cpp') diff --git a/src/main.cpp b/src/main.cpp index a969e32a9..82f398d5b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3366,10 +3366,6 @@ int main(int arg_count, char const **arg_ptr) { print_all_errors(); return 1; } - if (any_warnings()) { - print_all_errors(); - } - checker->parser = parser; init_checker(checker); -- cgit v1.2.3 From 5d57fe77be01800683b0cbd1eea7661a8284ad4d Mon Sep 17 00:00:00 2001 From: olimpiu <42330+olimpiu@users.noreply.github.com> Date: Mon, 30 Sep 2024 20:46:03 -0400 Subject: Fixed confusing (and incorrect) warning Verbose errors *is* the new default --- src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main.cpp') diff --git a/src/main.cpp b/src/main.cpp index 82f398d5b..64ba76f99 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1408,7 +1408,7 @@ gb_internal bool parse_build_flags(Array args) { build_context.terse_errors = true; break; case BuildFlag_VerboseErrors: - gb_printf_err("-verbose-errors is not the default, -terse-errors can now disable it\n"); + gb_printf_err("-verbose-errors is now the default, -terse-errors can disable it\n"); build_context.hide_error_line = false; build_context.terse_errors = false; break; -- cgit v1.2.3 From 21d0b073b182d2c6956d5771565bea408cfc7fa8 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 2 Oct 2024 15:43:13 +0100 Subject: Sort flags on `odin build -help` - #4329 --- src/main.cpp | 608 ++++++++++++++++++++++++++++++++--------------------------- 1 file changed, 326 insertions(+), 282 deletions(-) (limited to 'src/main.cpp') diff --git a/src/main.cpp b/src/main.cpp index 64ba76f99..04d3bdf52 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2179,76 +2179,114 @@ gb_internal void print_show_help(String const arg0, String const &command) { print_usage_line(1, "Flags"); print_usage_line(0, ""); - if (check) { - print_usage_line(1, "-file"); - print_usage_line(2, "Tells `%.*s %.*s` to treat the given file as a self-contained package.", LIT(arg0), LIT(command)); - print_usage_line(2, "This means that `/a.odin` won't have access to `/b.odin`'s contents."); + + if (doc) { + print_usage_line(1, "-all-packages"); + print_usage_line(2, "Generates documentation for all packages used in the current project."); + print_usage_line(0, ""); + } + if (test_only) { + print_usage_line(1, "-all-packages"); + print_usage_line(2, "Tests all packages imported into the given initial package."); print_usage_line(0, ""); } - if (doc) { - print_usage_line(1, "-short"); - print_usage_line(2, "Shows shortened documentation for the packages."); + if (build) { + print_usage_line(1, "-build-mode:"); + print_usage_line(2, "Sets the build mode."); + print_usage_line(2, "Available options:"); + print_usage_line(3, "-build-mode:exe Builds as an executable."); + print_usage_line(3, "-build-mode:test Builds as an executable that executes tests."); + print_usage_line(3, "-build-mode:dll Builds as a dynamically linked library."); + print_usage_line(3, "-build-mode:shared Builds as a dynamically linked library."); + print_usage_line(3, "-build-mode:lib Builds as a statically linked library."); + print_usage_line(3, "-build-mode:static Builds as a statically linked library."); + print_usage_line(3, "-build-mode:obj Builds as an object file."); + print_usage_line(3, "-build-mode:object Builds as an object file."); + print_usage_line(3, "-build-mode:assembly Builds as an assembly file."); + print_usage_line(3, "-build-mode:assembler Builds as an assembly file."); + print_usage_line(3, "-build-mode:asm Builds as an assembly file."); + print_usage_line(3, "-build-mode:llvm-ir Builds as an LLVM IR file."); + print_usage_line(3, "-build-mode:llvm Builds as an LLVM IR file."); print_usage_line(0, ""); + } - print_usage_line(1, "-all-packages"); - print_usage_line(2, "Generates documentation for all packages used in the current project."); + if (check) { + print_usage_line(1, "-collection:="); + print_usage_line(2, "Defines a library collection used for imports."); + print_usage_line(2, "Example: -collection:shared=dir/to/shared"); + print_usage_line(2, "Usage in Code:"); + print_usage_line(3, "import \"shared:foo\""); 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(1, "-custom-attribute:"); + print_usage_line(2, "Add a custom attribute which will be ignored if it is unknown."); + print_usage_line(2, "This can be used with metaprogramming tools."); + print_usage_line(2, "Examples:"); + print_usage_line(3, "-custom-attribute:my_tag"); + print_usage_line(3, "-custom-attribute:my_tag,the_other_thing"); + print_usage_line(3, "-custom-attribute:my_tag -custom-attribute:the_other_thing"); print_usage_line(0, ""); + } - print_usage_line(1, "-out:"); - print_usage_line(2, "Sets the base name of the resultig .odin-doc file."); - print_usage_line(2, "The extension can be optionally included; the resulting file will always have an extension of '.odin-doc'."); - print_usage_line(2, "Example: -out:foo"); + if (run_or_build) { + print_usage_line(1, "-debug"); + print_usage_line(2, "Enables debug information, and defines the global constant ODIN_DEBUG to be 'true'."); + print_usage_line(0, ""); + } + + if (check) { + print_usage_line(1, "-default-to-nil-allocator"); + print_usage_line(2, "Sets the default allocator to be the nil_allocator, an allocator which does nothing."); + print_usage_line(0, ""); + + print_usage_line(1, "-define:="); + print_usage_line(2, "Defines a scalar boolean, integer or string as global constant."); + print_usage_line(2, "Example: -define:SPAM=123"); + print_usage_line(2, "Usage in code:"); + print_usage_line(3, "#config(SPAM, default_value)"); print_usage_line(0, ""); } if (run_or_build) { - print_usage_line(1, "-out:"); - print_usage_line(2, "Sets the file name of the outputted executable."); - print_usage_line(2, "Example: -out:foo.exe"); + print_usage_line(1, "-disable-assert"); + print_usage_line(2, "Disables the code generation of the built-in run-time 'assert' procedure, and defines the global constant ODIN_DISABLE_ASSERT to be 'true'."); print_usage_line(0, ""); - print_usage_line(1, "-o:"); - print_usage_line(2, "Sets the optimization mode for compilation."); - print_usage_line(2, "Available options:"); - print_usage_line(3, "-o:none"); - print_usage_line(3, "-o:minimal"); - print_usage_line(3, "-o:size"); - print_usage_line(3, "-o:speed"); - if (LB_USE_NEW_PASS_SYSTEM) { - print_usage_line(3, "-o:aggressive"); - } - print_usage_line(2, "The default is -o:minimal."); + print_usage_line(1, "-disable-red-zone"); + print_usage_line(2, "Disables red zone on a supported freestanding target."); print_usage_line(0, ""); } if (check) { - print_usage_line(1, "-show-timings"); - print_usage_line(2, "Shows basic overview of the timings of different stages within the compiler in milliseconds."); + print_usage_line(1, "-disallow-do"); + print_usage_line(2, "Disallows the 'do' keyword in the project."); print_usage_line(0, ""); + } - print_usage_line(1, "-show-more-timings"); - print_usage_line(2, "Shows an advanced overview of the timings of different stages within the compiler in milliseconds."); + if (doc) { + 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, ""); + } - print_usage_line(1, "-show-system-calls"); - print_usage_line(2, "Prints the whole command and arguments for calls to external tools like linker and assembler."); + if (run_or_build) { + print_usage_line(1, "-dynamic-map-calls"); + print_usage_line(2, "Uses dynamic map calls to minimize code generation at the cost of runtime execution."); print_usage_line(0, ""); + } - print_usage_line(1, "-export-timings:"); - print_usage_line(2, "Exports timings to one of a few formats. Requires `-show-timings` or `-show-more-timings`."); + if (check) { + print_usage_line(1, "-error-pos-style:"); print_usage_line(2, "Available options:"); - print_usage_line(3, "-export-timings:json Exports compile time stats to JSON."); - print_usage_line(3, "-export-timings:csv Exports compile time stats to CSV."); + print_usage_line(3, "-error-pos-style:unix file/path:45:3:"); + print_usage_line(3, "-error-pos-style:odin file/path(45:3)"); + print_usage_line(3, "-error-pos-style:default (Defaults to 'odin'.)"); print_usage_line(0, ""); - print_usage_line(1, "-export-timings-file:"); - print_usage_line(2, "Specifies the filename for `-export-timings`."); - print_usage_line(2, "Example: -export-timings-file:timings.json"); + print_usage_line(1, "-export-defineables:"); + print_usage_line(2, "Exports an overview of all the #config/#defined usages in CSV format to the given file path."); + print_usage_line(2, "Example: -export-defineables:defineables.csv"); print_usage_line(0, ""); print_usage_line(1, "-export-dependencies:"); @@ -2263,245 +2301,284 @@ gb_internal void print_show_help(String const arg0, String const &command) { print_usage_line(2, "Example: -export-dependencies-file:dependencies.d"); print_usage_line(0, ""); - print_usage_line(1, "-thread-count:"); - print_usage_line(2, "Overrides the number of threads the compiler will use to compile with."); - print_usage_line(2, "Example: -thread-count:2"); + print_usage_line(1, "-export-timings:"); + print_usage_line(2, "Exports timings to one of a few formats. Requires `-show-timings` or `-show-more-timings`."); + print_usage_line(2, "Available options:"); + print_usage_line(3, "-export-timings:json Exports compile time stats to JSON."); + print_usage_line(3, "-export-timings:csv Exports compile time stats to CSV."); print_usage_line(0, ""); - } - if (check_only) { - print_usage_line(1, "-show-unused"); - print_usage_line(2, "Shows unused package declarations within the current project."); - print_usage_line(0, ""); - print_usage_line(1, "-show-unused-with-location"); - print_usage_line(2, "Shows unused package declarations within the current project with the declarations source location."); + print_usage_line(1, "-export-timings-file:"); + print_usage_line(2, "Specifies the filename for `-export-timings`."); + print_usage_line(2, "Example: -export-timings-file:timings.json"); print_usage_line(0, ""); } if (run_or_build) { - print_usage_line(1, "-keep-temp-files"); - print_usage_line(2, "Keeps the temporary files generated during compilation."); + print_usage_line(1, "-extra-assembler-flags:"); + print_usage_line(2, "Adds extra assembler specific flags in a string."); print_usage_line(0, ""); - } else if (strip_semicolon) { - print_usage_line(1, "-keep-temp-files"); - print_usage_line(2, "Keeps the temporary files generated during stripping the unneeded semicolons from files."); + + print_usage_line(1, "-extra-linker-flags:"); + print_usage_line(2, "Adds extra linker specific flags in a string."); print_usage_line(0, ""); } if (check) { - print_usage_line(1, "-collection:="); - print_usage_line(2, "Defines a library collection used for imports."); - print_usage_line(2, "Example: -collection:shared=dir/to/shared"); - print_usage_line(2, "Usage in Code:"); - print_usage_line(3, "import \"shared:foo\""); + print_usage_line(1, "-file"); + print_usage_line(2, "Tells `%.*s %.*s` to treat the given file as a self-contained package.", LIT(arg0), LIT(command)); + print_usage_line(2, "This means that `/a.odin` won't have access to `/b.odin`'s contents."); print_usage_line(0, ""); - print_usage_line(1, "-define:="); - print_usage_line(2, "Defines a scalar boolean, integer or string as global constant."); - print_usage_line(2, "Example: -define:SPAM=123"); - print_usage_line(2, "Usage in code:"); - print_usage_line(3, "#config(SPAM, default_value)"); + print_usage_line(1, "-foreign-error-procedures"); + print_usage_line(2, "States that the error procedures used in the runtime are defined in a separate translation unit."); print_usage_line(0, ""); - print_usage_line(1, "-show-defineables"); - print_usage_line(2, "Shows an overview of all the #config/#defined usages in the project."); + print_usage_line(1, "-ignore-unknown-attributes"); + print_usage_line(2, "Ignores unknown attributes."); + print_usage_line(2, "This can be used with metaprogramming tools."); print_usage_line(0, ""); + } - print_usage_line(1, "-export-defineables:"); - print_usage_line(2, "Exports an overview of all the #config/#defined usages in CSV format to the given file path."); - print_usage_line(2, "Example: -export-defineables:defineables.csv"); + if (run_or_build) { + #if defined(GB_SYSTEM_WINDOWS) + print_usage_line(1, "-ignore-vs-search"); + print_usage_line(2, "[Windows only]"); + print_usage_line(2, "Ignores the Visual Studio search for library paths."); print_usage_line(0, ""); + #endif } - if (build) { - print_usage_line(1, "-build-mode:"); - print_usage_line(2, "Sets the build mode."); - print_usage_line(2, "Available options:"); - print_usage_line(3, "-build-mode:exe Builds as an executable."); - print_usage_line(3, "-build-mode:test Builds as an executable that executes tests."); - print_usage_line(3, "-build-mode:dll Builds as a dynamically linked library."); - print_usage_line(3, "-build-mode:shared Builds as a dynamically linked library."); - print_usage_line(3, "-build-mode:lib Builds as a statically linked library."); - print_usage_line(3, "-build-mode:static Builds as a statically linked library."); - print_usage_line(3, "-build-mode:obj Builds as an object file."); - print_usage_line(3, "-build-mode:object Builds as an object file."); - print_usage_line(3, "-build-mode:assembly Builds as an assembly file."); - print_usage_line(3, "-build-mode:assembler Builds as an assembly file."); - print_usage_line(3, "-build-mode:asm Builds as an assembly file."); - print_usage_line(3, "-build-mode:llvm-ir Builds as an LLVM IR file."); - print_usage_line(3, "-build-mode:llvm Builds as an LLVM IR file."); + if (check) { + print_usage_line(1, "-ignore-warnings"); + print_usage_line(2, "Ignores warning messages."); + print_usage_line(0, ""); + + print_usage_line(1, "-json-errors"); + print_usage_line(2, "Prints the error messages as json to stderr."); + print_usage_line(0, ""); + } + + if (run_or_build) { + print_usage_line(1, "-keep-temp-files"); + print_usage_line(2, "Keeps the temporary files generated during compilation."); + print_usage_line(0, ""); + } else if (strip_semicolon) { + print_usage_line(1, "-keep-temp-files"); + print_usage_line(2, "Keeps the temporary files generated during stripping the unneeded semicolons from files."); + print_usage_line(0, ""); + } + + if (run_or_build) { + print_usage_line(1, "-lld"); + print_usage_line(2, "Uses the LLD linker rather than the default."); print_usage_line(0, ""); } if (check) { - print_usage_line(1, "-target:"); - print_usage_line(2, "Sets the target for the executable to be built in."); + print_usage_line(1, "-max-error-count:"); + print_usage_line(2, "Sets the maximum number of errors that can be displayed before the compiler terminates."); + print_usage_line(2, "Must be an integer >0."); + print_usage_line(2, "If not set, the default max error count is %d.", DEFAULT_MAX_ERROR_COLLECTOR_COUNT); print_usage_line(0, ""); } if (run_or_build) { - print_usage_line(1, "-debug"); - print_usage_line(2, "Enables debug information, and defines the global constant ODIN_DEBUG to be 'true'."); + print_usage_line(1, "-microarch:"); + print_usage_line(2, "Specifies the specific micro-architecture for the build in a string."); + print_usage_line(2, "Examples:"); + print_usage_line(3, "-microarch:sandybridge"); + print_usage_line(3, "-microarch:native"); + print_usage_line(3, "-microarch:\"?\" for a list"); print_usage_line(0, ""); + } - print_usage_line(1, "-disable-assert"); - print_usage_line(2, "Disables the code generation of the built-in run-time 'assert' procedure, and defines the global constant ODIN_DISABLE_ASSERT to be 'true'."); + if (check) { + print_usage_line(1, "-min-link-libs"); + print_usage_line(2, "If set, the number of linked libraries will be minimized to prevent duplications."); + print_usage_line(2, "This is useful for so called \"dumb\" linkers compared to \"smart\" linkers."); print_usage_line(0, ""); + } - print_usage_line(1, "-no-bounds-check"); - print_usage_line(2, "Disables bounds checking program wide."); + if (run_or_build) { + print_usage_line(1, "-minimum-os-version:"); + print_usage_line(2, "Sets the minimum OS version targeted by the application."); + print_usage_line(2, "Default: -minimum-os-version:11.0.0"); + print_usage_line(2, "Only used when target is Darwin, if given, linking mismatched versions will emit a warning."); print_usage_line(0, ""); - print_usage_line(1, "-no-type-assert"); - print_usage_line(2, "Disables type assertion checking program wide."); + print_usage_line(1, "-no-bounds-check"); + print_usage_line(2, "Disables bounds checking program wide."); print_usage_line(0, ""); print_usage_line(1, "-no-crt"); print_usage_line(2, "Disables automatic linking with the C Run Time."); print_usage_line(0, ""); + } - print_usage_line(1, "-no-rpath"); - print_usage_line(2, "Disables automatic addition of an rpath linked to the executable directory."); + if (check && command != "test") { + print_usage_line(1, "-no-entry-point"); + print_usage_line(2, "Removes default requirement of an entry point (e.g. main procedure)."); print_usage_line(0, ""); + } - print_usage_line(1, "-no-thread-local"); - print_usage_line(2, "Ignores @thread_local attribute, effectively treating the program as if it is single-threaded."); - print_usage_line(0, ""); - - print_usage_line(1, "-lld"); - print_usage_line(2, "Uses the LLD linker rather than the default."); + if (run_or_build) { + print_usage_line(1, "-no-rpath"); + print_usage_line(2, "Disables automatic addition of an rpath linked to the executable directory."); print_usage_line(0, ""); - print_usage_line(1, "-use-separate-modules"); - print_usage_line(2, "The backend generates multiple build units which are then linked together."); - print_usage_line(2, "Normally, a single build unit is generated for a standard project."); - print_usage_line(2, "This is the default behaviour on Windows for '-o:none' and '-o:minimal' builds."); + print_usage_line(1, "-no-thread-local"); + print_usage_line(2, "Ignores @thread_local attribute, effectively treating the program as if it is single-threaded."); print_usage_line(0, ""); - } - - if (check) { print_usage_line(1, "-no-threaded-checker"); print_usage_line(2, "Disables multithreading in the semantic checker stage."); print_usage_line(0, ""); - } - if (check) { - print_usage_line(1, "-vet"); - print_usage_line(2, "Does extra checks on the code."); - print_usage_line(2, "Extra checks include:"); - print_usage_line(3, "-vet-unused"); - print_usage_line(3, "-vet-unused-variables"); - print_usage_line(3, "-vet-unused-imports"); - print_usage_line(3, "-vet-shadowing"); - print_usage_line(3, "-vet-using-stmt"); + print_usage_line(1, "-no-type-assert"); + print_usage_line(2, "Disables type assertion checking program wide."); print_usage_line(0, ""); + } - print_usage_line(1, "-vet-unused"); - print_usage_line(2, "Checks for unused declarations (variables and imports)."); + if (run_or_build) { + print_usage_line(1, "-o:"); + print_usage_line(2, "Sets the optimization mode for compilation."); + print_usage_line(2, "Available options:"); + print_usage_line(3, "-o:none"); + print_usage_line(3, "-o:minimal"); + print_usage_line(3, "-o:size"); + print_usage_line(3, "-o:speed"); + if (LB_USE_NEW_PASS_SYSTEM) { + print_usage_line(3, "-o:aggressive (use this with caution)"); + } + print_usage_line(2, "The default is -o:minimal."); print_usage_line(0, ""); - print_usage_line(1, "-vet-unused-variables"); - print_usage_line(2, "Checks for unused variable declarations."); - print_usage_line(0, ""); - print_usage_line(1, "-vet-unused-imports"); - print_usage_line(2, "Checks for unused import declarations."); + print_usage_line(1, "-obfuscate-source-code-locations"); + print_usage_line(2, "Obfuscate the file and procedure strings, and line and column numbers, stored with a 'runtime.Source_Code_Location' value."); print_usage_line(0, ""); - print_usage_line(1, "-vet-shadowing"); - print_usage_line(2, "Checks for variable shadowing within procedures."); - print_usage_line(0, ""); - print_usage_line(1, "-vet-using-stmt"); - print_usage_line(2, "Checks for the use of 'using' as a statement."); - print_usage_line(2, "'using' is considered bad practice outside of immediate refactoring."); + print_usage_line(1, "-out:"); + print_usage_line(2, "Sets the file name of the outputted executable."); + print_usage_line(2, "Example: -out:foo.exe"); print_usage_line(0, ""); + } - print_usage_line(1, "-vet-using-param"); - print_usage_line(2, "Checks for the use of 'using' on procedure parameters."); - print_usage_line(2, "'using' is considered bad practice outside of immediate refactoring."); + if (doc) { + print_usage_line(1, "-out:"); + print_usage_line(2, "Sets the base name of the resultig .odin-doc file."); + print_usage_line(2, "The extension can be optionally included; the resulting file will always have an extension of '.odin-doc'."); + print_usage_line(2, "Example: -out:foo"); print_usage_line(0, ""); + } - print_usage_line(1, "-vet-style"); - print_usage_line(2, "Errs on missing trailing commas followed by a newline."); - print_usage_line(2, "Errs on deprecated syntax."); - print_usage_line(2, "Does not err on unneeded tokens (unlike -strict-style)."); + if (run_or_build) { + #if defined(GB_SYSTEM_WINDOWS) + print_usage_line(1, "-pdb-name:"); + print_usage_line(2, "[Windows only]"); + print_usage_line(2, "Defines the generated PDB name when -debug is enabled."); + print_usage_line(2, "Example: -pdb-name:different.pdb"); print_usage_line(0, ""); + #endif + } - print_usage_line(1, "-vet-semicolon"); - print_usage_line(2, "Errs on unneeded semicolons."); + if (build) { + print_usage_line(1, "-print-linker-flags"); + print_usage_line(2, "Prints the all of the flags/arguments that will be passed to the linker."); print_usage_line(0, ""); + } - print_usage_line(1, "-vet-cast"); - print_usage_line(2, "Errs on casting a value to its own type or using `transmute` rather than `cast`."); + if (run_or_build) { + print_usage_line(1, "-reloc-mode:"); + print_usage_line(2, "Specifies the reloc mode."); + print_usage_line(2, "Available options:"); + print_usage_line(3, "-reloc-mode:default"); + print_usage_line(3, "-reloc-mode:static"); + print_usage_line(3, "-reloc-mode:pic"); + print_usage_line(3, "-reloc-mode:dynamic-no-pic"); print_usage_line(0, ""); - print_usage_line(1, "-vet-tabs"); - print_usage_line(2, "Errs when the use of tabs has not been used for indentation."); + #if defined(GB_SYSTEM_WINDOWS) + print_usage_line(1, "-resource:"); + print_usage_line(2, "[Windows only]"); + print_usage_line(2, "Defines the resource file for the executable."); + print_usage_line(2, "Example: -resource:path/to/file.rc"); + print_usage_line(2, "or: -resource:path/to/file.res for a precompiled one."); print_usage_line(0, ""); + #endif - print_usage_line(1, "-vet-packages:"); - print_usage_line(2, "Sets which packages by name will be vetted."); - print_usage_line(2, "Files with specific +vet tags will not be ignored if they are not in the packages set."); + print_usage_line(1, "-sanitize:"); + print_usage_line(2, "Enables sanitization analysis."); + print_usage_line(2, "Available options:"); + print_usage_line(3, "-sanitize:address"); + print_usage_line(3, "-sanitize:memory"); + print_usage_line(3, "-sanitize:thread"); + print_usage_line(2, "NOTE: This flag can be used multiple times."); print_usage_line(0, ""); + } - print_usage_line(1, "-vet-unused-procedures"); - print_usage_line(2, "Checks for unused procedures."); - print_usage_line(2, "Must be used with -vet-packages or specified on a per file with +vet tags."); + if (doc) { + print_usage_line(1, "-short"); + print_usage_line(2, "Shows shortened documentation for the packages."); print_usage_line(0, ""); } if (check) { - print_usage_line(1, "-custom-attribute:"); - print_usage_line(2, "Add a custom attribute which will be ignored if it is unknown."); - print_usage_line(2, "This can be used with metaprogramming tools."); - print_usage_line(2, "Examples:"); - print_usage_line(3, "-custom-attribute:my_tag"); - print_usage_line(3, "-custom-attribute:my_tag,the_other_thing"); - print_usage_line(3, "-custom-attribute:my_tag -custom-attribute:the_other_thing"); + print_usage_line(1, "-show-defineables"); + print_usage_line(2, "Shows an overview of all the #config/#defined usages in the project."); print_usage_line(0, ""); - print_usage_line(1, "-ignore-unknown-attributes"); - print_usage_line(2, "Ignores unknown attributes."); - print_usage_line(2, "This can be used with metaprogramming tools."); + print_usage_line(1, "-show-system-calls"); + print_usage_line(2, "Prints the whole command and arguments for calls to external tools like linker and assembler."); print_usage_line(0, ""); - if (command != "test") { - print_usage_line(1, "-no-entry-point"); - print_usage_line(2, "Removes default requirement of an entry point (e.g. main procedure)."); - print_usage_line(0, ""); - } - } + print_usage_line(1, "-show-timings"); + print_usage_line(2, "Shows basic overview of the timings of different stages within the compiler in milliseconds."); + print_usage_line(0, ""); - if (test_only) { - print_usage_line(1, "-all-packages"); - print_usage_line(2, "Tests all packages imported into the given initial package."); + print_usage_line(1, "-show-more-timings"); + print_usage_line(2, "Shows an advanced overview of the timings of different stages within the compiler in milliseconds."); print_usage_line(0, ""); } - if (run_or_build) { - print_usage_line(1, "-minimum-os-version:"); - print_usage_line(2, "Sets the minimum OS version targeted by the application."); - print_usage_line(2, "Default: -minimum-os-version:11.0.0"); - print_usage_line(2, "Only used when target is Darwin, if given, linking mismatched versions will emit a warning."); + if (check_only) { + print_usage_line(1, "-show-unused"); + print_usage_line(2, "Shows unused package declarations within the current project."); print_usage_line(0, ""); + print_usage_line(1, "-show-unused-with-location"); + print_usage_line(2, "Shows unused package declarations within the current project with the declarations source location."); + print_usage_line(0, ""); + } - print_usage_line(1, "-extra-linker-flags:"); - print_usage_line(2, "Adds extra linker specific flags in a string."); + if (check) { + print_usage_line(1, "-strict-style"); + print_usage_line(2, "This enforces parts of same style as the Odin compiler, prefer '-vet-style -vet-semicolon' if you do not want to match it exactly."); + print_usage_line(2, ""); + print_usage_line(2, "Errs on unneeded tokens, such as unneeded semicolons."); + print_usage_line(2, "Errs on missing trailing commas followed by a newline."); + print_usage_line(2, "Errs on deprecated syntax."); + print_usage_line(2, "Errs when the attached-brace style in not adhered to (also known as 1TBS)."); + print_usage_line(2, "Errs when 'case' labels are not in the same column as the associated 'switch' token."); print_usage_line(0, ""); + } - print_usage_line(1, "-extra-assembler-flags:"); - print_usage_line(2, "Adds extra assembler specific flags in a string."); + if (run_or_build) { + print_usage_line(1, "-strict-target-features"); + print_usage_line(2, "Makes @(enable_target_features=\"...\") behave the same way as @(require_target_features=\"...\")."); + print_usage_line(2, "This enforces that all generated code uses features supported by the combination of -target, -microarch, and -target-features."); print_usage_line(0, ""); - print_usage_line(1, "-microarch:"); - print_usage_line(2, "Specifies the specific micro-architecture for the build in a string."); - print_usage_line(2, "Examples:"); - print_usage_line(3, "-microarch:sandybridge"); - print_usage_line(3, "-microarch:native"); - print_usage_line(3, "-microarch:\"?\" for a list"); + #if defined(GB_SYSTEM_WINDOWS) + print_usage_line(1, "-subsystem: