Each binary target can have its own compiler options, and these can be customised differently for different optimisation levels. This takes three steps:
config_setting( name = "release", values = { "compilation_mode": "opt", }, )
load("@rules_rust//rust:defs.bzl", "rust_binary") rust_binary( name = "bin", srcs = ["src/main.rs"], deps = [], rustc_flags = select({ "//:release": [ "-Clto=true", "-Ccodegen-units=1", "-Cpanic=abort", "-Copt-level=3", "-Cstrip=symbols", ], "//conditions:default": [ "-Copt-level=0", ], }), visibility = ["//visibility:public"], )
Build with optimization:
bazel build -c opt //...
And run the optimized binary:
bazel run -c opt //...