pub const USAGE: &str = "\
rucc, an optimizing C compiler
usage: rucc [options] file...
options:
-c compile and assemble, do not link
-S compile only, emit assembly
-E preprocess only
-o <file> write output to <file>, or to standard output for -
-D <name>[=<value>], -U <name> define a macro, or undefine one after every -D
-I <dir> add <dir> to the include search path
-iquote -isystem -idirafter <dir> the other chains, -nostdinc drops ours
-I-, -iprefix <p>, -iwithprefix[before] <dir> the older spellings of those
-include <file>, -imacros <file> read <file> first, the second for its macros only
--sysroot=<dir> look for the library's headers under <dir>, -isysroot too
-P, -dM with -E: leave out the markers, or dump the macros
-M -MM -MD -MMD write a make rule for the source, the last two compile as well
-MF <file> -MT <t> -MQ <t> -MP where the rule goes, what it builds, targets with no recipe
-std=<dialect> c89 through c23, and the gnu spellings
-fgnuc-version=<v> the GCC release to claim, default 7.0.0
-x <lang> treat later inputs as <lang>, or none to stop
-O<level> optimize: 0, 1, 2, 3, s, z
-fsafety=<tier> check memory safety: off, detect, enforce, kernel
-f[no-]sanitize=<what> the negative is taken, the positive is refused by name
-f[no-]safety-subobject a write has to stay inside the member it names
-f[no-]safety-restrict two restrict pointers of one block may not meet
-f<pass> -fno-<pass> -fdump-ir=<what> -fopt-info[-<kind>][=FILE]
-fpass-fuel=<pass>=<n>, -fpass-fuel-global=<n> stop a pass, or all of them, after n
-fdisable-<pass>[=<funcs>], -fenable-<pass>[=<funcs>] run a pass on some functions only
-g -g0 -gdwarf-5, -fno-omit-frame-pointer, -mno-red-zone debug info, frame pointer, red zone
-gz[=none|zlib|zlib-gnu|zstd] -gno-split-dwarf compress debug sections, one file not two
-flto[=auto|jobserver|<n>] -fno-lto -ffat-lto-objects read, and not done yet
-fprofile-use[=<path>] -fprofile-dir=<dir> read too, where -fprofile-generate is refused
-f[no-]stack-protector[-strong|-all], -f[no-]stack-clash-protection, -fcf-protection=<edges>
-ffunction-sections -fdata-sections a section per function or variable, for --gc-sections
-fvisibility=<what> default, hidden, internal or protected, when nothing in the source said
-l<name>, -L <dir>, -B <dir> link a library, where to look for one, where our own tools are
-fPIC -fpic -fPIE -fpie, -fno-common, -pipe what it does anyway
-f[no-]strict-aliasing, -f[no-]delete-null-pointer-checks what it assumes anyway
-static -shared -pie -no-pie -nostdlib -nostartfiles -nodefaultlibs -rdynamic -s how to link
-Wl,<arg>, -Xlinker <arg>, -fuse-ld=<name> hand an argument to the linker, or pick one
-Werror -pedantic -pedantic-errors -w -W[no-]system-headers how much to say, and how fatal
-m64 -march= -mtune= -mcpu= -mabi= -mcmodel= what machine to generate for
-pg -p, -mfentry -mno-fentry call a profiler on the way in, and where that call goes
-fpatchable-function-entry=<n>[,<m>] room at the top of every function to patch later
-fwrapv, -fwrapv-pointer, -fno-strict-overflow signed or pointer overflow wraps
-ftrapv signed overflow stops the program instead
-f[no-]signed-char, -f[no-]unsigned-char, -f[no-]short-enums change the ABI
-ffp-contract=<how> fuse a multiply and an addition: fast, on or off
-fexcess-precision=<how>, -f[no-]rounding-math, -f[no-]trapping-math what may be folded
-ffile-prefix-map=<old>=<new> rewrite that front of every path we put in the output
-fmacro-prefix-map= -fdebug-prefix-map= -fprofile-prefix-map= the same, one output each
-pthread build for more than one thread, and link the library for it
-dumpmachine -dumpversion -print-multiarch -print-search-dirs what this compiler is
-print-file-name=<name> -print-prog-name=<name> where a file or a program is
-print-sysroot the root the headers and the libraries are read under
-print-sysroot-provenance every input under it, where it came from and its licence
-print-sysroot-digest the sha256 of that record, which names the whole sysroot in one line
--fetch <tuple> get the sysroot this release pins for <tuple> and install it in the cache
--offline never download anything, which a compilation never does anyway
-j[n] compile n translation units at once, default all
-v, -### print each phase as it runs, or without running any
-save-temps[=cwd|obj], -time keep the .i and the .s, say how long each step took
--target=<triple> generate code for <triple>
--emit=<kind> exe, obj, archive, asm, preprocessed, tast, ir, mir-final,
safety-summary, type-granules
--print-config, --print-pipeline print the configuration or the pipeline, and exit
--version print the version and exit
-h, --help print this message and exit
See spec/04-driver-and-cli.md for the full flag reference.
";Expand description
Usage text.
Deliberately short. spec/04-driver-and-cli.md puts the full flag reference in the
manual page, because a --help nobody can read in one screen is a --help nobody reads.