While I've seen docs on using rustc
directly to output assembly, having to manually extract commands used by Cargo and edit them to write assembly is tedious.
Is there a way to run Cargo that writes out assembly files?
In addition to kennytm's answer, you can also use the RUSTFLAGS
environment variable and use the standard cargo commands:
RUSTFLAGS="--emit asm" cargo build cat target/debug/deps/project_name-hash.s
Or in release mode (with optimizations):
RUSTFLAGS="--emit asm" cargo build --release cat target/release/deps/project_name-hash.s
You can pass different values to the --emit
parameter, including (but not limited to):
mir
(Rust intermediate representation)llvm-ir
(LLVM intermediate representation)llvm-bc
(LLVM byte code)asm
(assembly)You can use Cargo's cargo rustc
command to send arguments to rustc
directly:
cargo rustc -- --emit asm ls target/debug/deps/<crate_name>-<hash>.s
For optimized assembly:
cargo rustc --release -- --emit asm ls target/release/deps/<crate_name>-<hash>.s
If you see multiple <crate_name>-<hash>-<hash>.rcgu.s
files instead of a <crate_name>-<hash>.s
file, disable incremental compilation by setting the environment variable CARGO_INCREMENTAL=0
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With