RUSTC(1)

NAME
rustc - The Rust compiler

SYNOPSIS
rustc [OPTIONS] INPUT

DESCRIPTION
This program is a compiler for the Rust language, available at https://www.rust-lang.org.

OPTIONS

-h, --help
    Display the help message.

--cfg SPEC
    Configure the compilation environment.

-L [KIND=]PATH
    Add a directory to the library search path. The optional KIND can be one of:

    dependency
        only lookup transitive dependencies here

    crate
        only lookup local `extern crate` directives here

    native
        only lookup native libraries here

    framework
        only look for OSX frameworks here

    all look for anything here (the default)

-l [KIND=]NAME
    Link the generated crate(s) to the specified library NAME. The optional KIND can be one of static, dylib, or framework. If omitted, dylib is assumed.

--crate-type [bin|lib|rlib|dylib|cdylib|staticlib]
    Comma separated list of types of crates for the compiler to emit.

--crate-name NAME
    Specify the name of the crate being built.

--emit [asm|llvm-bc|llvm-ir|obj|link|dep-info|mir][=PATH]
    Configure the output that rustc will produce. Each emission may also have an optional explicit output PATH specified for that particular emission kind. This path takes precedence over the -o option.

--print [crate-name|file-names|sysroot]
    Comma separated list of compiler information to print on stdout.

-g  Equivalent to -C debuginfo=2.

-O  Equivalent to -C opt-level=2.

-o FILENAME
    Write output to FILENAME. Ignored if multiple --emit outputs are specified which don't have an explicit path otherwise.

--out-dir DIR
    Write output to compiler-chosen filename in DIR. Ignored if -o is specified. Defaults to the current directory.

--explain OPT
    Provide a detailed explanation of an error message.

--test
    Build a test harness.

--target TARGET
    Target triple for which the code is compiled. This option defaults to the host’s target triple. The target triple has the general format <arch><sub>-<vendor>-<sys>-<abi>, where:

    <arch>
        x86, arm, thumb, mips, etc.

    <sub>
        for example on ARM: v5, v6m, v7a, v7m, etc.

    <vendor>
        pc, apple, nvidia, ibm, etc.

    <sys>
        none, linux, win32, darwin, cuda, etc.

    <abi>
        eabi, gnu, android, macho, elf, etc.

-W help
    Print 'lint' options and default settings.

-W OPT, --warn OPT
    Set lint warnings.

-A OPT, --allow OPT
    Set lint allowed.

-D OPT, --deny OPT
    Set lint denied.

-F OPT, --forbid OPT
    Set lint forbidden.

-C FLAG[=VAL], --codegen FLAG[=VAL]
    Set a codegen-related flag to the value specified. Use -C help to print available flags. See CODEGEN OPTIONS below.

-V, --version
    Print version info and exit.

-v, --verbose
    Use verbose output.

--extern NAME=PATH
    Specify where an external rust library is located. These should match extern declarations in the crate's source code.

--sysroot PATH
    Override the system root.

-Z FLAG
    Set internal debugging options. Use -Z help to print available options.

--color auto|always|never
    Configure coloring of output:

    auto
        colorize, if output goes to a tty (default);

    always
        always colorize output;

    never
        never colorize output.

CODEGEN OPTIONS

linker=/path/to/cc
    Path to the linker utility to use when linking libraries, executables, and objects.

link-args='-flag1 -flag2'
    A space-separated list of extra arguments to pass to the linker when the linker is invoked.

lto Perform LLVM link-time optimizations.

target-cpu=help
    Selects a target processor. If the value is 'help', then a list of available CPUs is printed.

target-feature='+feature1,-feature2'
    A comma-separated list of features to enable or disable for the target. A preceding '+' enables a feature while a preceding '-' disables it. Available features can be discovered through llc -mcpu=help.

passes=val
    A space-separated list of extra LLVM passes to run. A value of 'list' will cause rustc to print all known passes and exit. The passes specified are appended at the end of the normal pass manager.

llvm-args='-arg1 -arg2'
    A space-separated list of arguments to pass through to LLVM.

save-temps
    If specified, the compiler will save more files (.bc, .o, .no-opt.bc) generated throughout compilation in the output directory.

rpath
    If specified, then the rpath value for dynamic libraries will be set in either dynamic library or executable outputs.

no-prepopulate-passes
    Suppresses pre-population of the LLVM pass manager that is run over the module.

no-vectorize-loops
    Suppresses running the loop vectorization LLVM pass, regardless of optimization level.

no-vectorize-slp
    Suppresses running the LLVM SLP vectorization pass, regardless of optimization level.

soft-float
    Generates software floating point library calls instead of hardware instructions.

prefer-dynamic
    Prefers dynamic linking to static linking.

no-integrated-as
    Force usage of an external assembler rather than LLVM's integrated one.

no-redzone
    Disable the use of the redzone.

relocation-model=[pic,static,dynamic-no-pic]
    The relocation model to use. (Default: pic)

code-model=[small,kernel,medium,large]
    Choose the code model to use.

metadata=val
    Metadata to mangle symbol names with.

extra-filename=val
    Extra data to put in each output filename.

codegen-units=n
    Divide crate into n units to optimize in parallel.

remark=val
    Print remarks for these optimization passes (space separated, or "all").

no-stack-check
    Disable checks for stack exhaustion (a memory-safety hazard!).

debuginfo=val
    Debug info emission level:

    0   no debug info;

    1   line-tables only (for stacktraces and breakpoints);

    2   full debug info with variable and type information.

opt-level=VAL
    Optimize with possible levels 0–3

ENVIRONMENT

Some of these affect the output of the compiler, while others affect programs which link to the standard library.

RUST_TEST_THREADS
    The test framework Rust provides executes tests in parallel. This variable sets the maximum number of threads used for this purpose. This setting is overridden by the --test-threads option.

RUST_TEST_NOCAPTURE
    If set to a value other than "0", a synonym for the --nocapture flag.

RUST_MIN_STACK
    Sets the minimum stack size for new threads.

RUST_BACKTRACE
    If set to a value different than "0", produces a backtrace in the output of a program which panics.

EXAMPLES
To build an executable from a source file with a main function:
    $ rustc -o hello hello.rs

To build a library from a source file:
    $ rustc --crate-type=lib hello-lib.rs

To build either with a crate (.rs) file:
    $ rustc hello.rs

To build an executable with debug info:
    $ rustc -g -o hello hello.rs

SEE ALSO

rustdoc(1)

BUGS
See https://github.com/rust-lang/rust/issues for issues.

AUTHOR
See https://github.com/rust-lang/rust/graphs/contributors or use `git log --all --format='%cN <%cE>' | sort -u` in the rust source distribution.

COPYRIGHT
This work is dual-licensed under Apache 2.0 and MIT terms. See COPYRIGHT file in the rust source distribution.