Agent skill
rust-release-profile
Configure release builds for maximum performance with LTO, optimizations, and binary stripping. Use for production deployments.
Stars
163
Forks
31
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/development/rust-release-profile
SKILL.md
Release Profile
Optimize Rust builds for production performance and binary size.
Production Cargo.toml Profile
toml
[profile.release]
opt-level = 3 # Maximum optimization
lto = true # Link-time optimization (slower build, faster binary)
codegen-units = 1 # Single codegen unit (better optimization)
strip = true # Strip debug symbols
panic = 'abort' # Smaller binary, no unwinding
[profile.release-with-debug]
inherits = "release"
debug = true # Keep debug info for profiling
strip = false
Optimization Levels
toml
# opt-level options:
# 0 - No optimization (fastest compile)
# 1 - Basic optimization
# 2 - Default release optimization
# 3 - Maximum optimization (default for release)
# "s" - Optimize for size
# "z" - Optimize for size, disable loop vectorization
opt-level = 3 # Best performance
opt-level = "s" # Smallest binary with good performance
opt-level = "z" # Smallest binary
Link-Time Optimization (LTO)
toml
# LTO options:
# false - No LTO (fastest build)
# true/"fat" - Full LTO (slowest build, best performance)
# "thin" - Incremental LTO (good balance)
lto = true # Best performance, slow build
lto = "thin" # Good performance, faster build
lto = false # Fastest build, no cross-crate optimization
Codegen Units
toml
# Fewer units = better optimization, slower parallel compilation
codegen-units = 1 # Best optimization
codegen-units = 16 # Default, faster parallel builds
Debug Symbols
toml
# For release builds
strip = true # Remove all symbols
strip = "symbols" # Remove symbols, keep sections
strip = "debuginfo" # Remove debug info only
strip = "none" # Keep everything
# Keep debug info for profiling
[profile.release-perf]
inherits = "release"
debug = true
strip = false
Panic Behavior
toml
# 'unwind' - Default, allows catch_unwind, larger binary
# 'abort' - Smaller binary, faster, no unwinding
panic = 'abort' # Production: smaller, faster
panic = 'unwind' # Development: catch panics, better debugging
Target-Specific Optimization
toml
# Enable CPU-specific features
[build]
rustflags = ["-C", "target-cpu=native"]
# Or in .cargo/config.toml
[target.x86_64-unknown-linux-gnu]
rustflags = ["-C", "target-cpu=native"]
Profile for Different Use Cases
toml
# Fast iteration during development
[profile.dev]
opt-level = 0
debug = true
# Quick release for testing
[profile.release-quick]
inherits = "release"
lto = false
codegen-units = 16
# Maximum performance
[profile.release]
opt-level = 3
lto = true
codegen-units = 1
strip = true
panic = 'abort'
# Profiling build
[profile.release-perf]
inherits = "release"
debug = true
strip = false
# Smallest binary
[profile.release-small]
inherits = "release"
opt-level = "z"
lto = true
codegen-units = 1
strip = true
panic = 'abort'
Workspace Settings
toml
# In workspace Cargo.toml
[profile.release]
opt-level = 3
lto = true
# Override for specific packages
[profile.release.package.expensive-crate]
opt-level = 2 # Faster build for this crate
Build Commands
bash
# Standard release build
cargo build --release
# With specific profile
cargo build --profile release-perf
# Check binary size
ls -la target/release/my-binary
# Strip binary manually (if not using strip = true)
strip target/release/my-binary
# Check for debug info
file target/release/my-binary
Measuring Impact
bash
# Build time comparison
time cargo build --release
time cargo build --release --config 'profile.release.lto=false'
# Binary size comparison
cargo build --release
ls -la target/release/my-binary
cargo build --profile release-small
ls -la target/release-small/my-binary
# Performance comparison
hyperfine './target/release/my-binary' './target/release-quick/my-binary'
Guidelines
- Use
lto = trueandcodegen-units = 1for production - Use
strip = trueandpanic = 'abort'for smallest binaries - Use
--profile release-perfwith debug symbols for profiling - Use
lto = "thin"for faster builds with good optimization - Test different
opt-levelvalues for your workload - Use
target-cpu=nativefor deployment on known hardware
Examples
See hercules-local-algo/Cargo.toml for production profile.
Didn't find tool you were looking for?