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