xref: /aosp_15_r20/external/bazelbuild-rules_rust/examples/bzlmod/compile_opt/README.md (revision d4726bddaa87cc4778e7472feed243fa4b6c267f)
1# Hello World with compiler optimization
2
3Each binary target can have its own compiler options, and these can be customised differently for different optimisation levels.
4This takes three steps:
5
61) In your root folder BUILD.bazel, add the following entry:
7
8```Starlark
9config_setting(
10    name = "release",
11    values = {
12        "compilation_mode": "opt",
13    },
14)
15```
16
172) In your binary target, add the optimization flags & strip settings prefixed with -C.
18For a complete list of Rust compiler optimization flag, please read the
19[official cargo documentation](https://doc.rust-lang.org/cargo/reference/profiles.html).
20
21```Starlark
22load("@rules_rust//rust:defs.bzl", "rust_binary")
23
24rust_binary(
25    name = "bin",
26    srcs = ["src/main.rs"],
27    deps = [],
28    rustc_flags = select({
29       "//:release": [
30            "-Clto=true",
31            "-Ccodegen-units=1",
32            "-Cpanic=abort",
33            "-Copt-level=3",
34            "-Cstrip=symbols",
35            ],
36        "//conditions:default":
37        [
38           "-Copt-level=0",
39        ],
40    }),
41    visibility = ["//visibility:public"],
42)
43```
44
45Build with optimization:
46
47`bazel build -c opt //...`
48
49And run the optimized binary:
50
51`bazel run -c opt //...`
52