# Bazel Google Benchmark provides Bazel targets for both the benchmark library and the optional default `main` function: * `@google_benchmark//:benchmark` provides the benchmark library. * `@google_benchmark//:benchmark_main` provides the default `main` function and depends on `@google_benchmark//:benchmark`. Use `@google_benchmark//:benchmark` when the benchmark target defines its own `main` function, including through `BENCHMARK_MAIN()`. Use `@google_benchmark//:benchmark_main` when the benchmark target should use the default Google Benchmark entry point. ## Bzlmod With Bzlmod enabled, add Google Benchmark to your `MODULE.bazel` file: ```starlark bazel_dep(name = "google_benchmark", version = "") ``` Replace `` with the Google Benchmark release version you want to use. Then depend on the Bazel target from a `cc_binary` or `cc_test`: ```starlark load("@rules_cc//cc:defs.bzl", "cc_binary") cc_binary( name = "string_benchmark", srcs = ["string_benchmark.cc"], deps = ["@google_benchmark//:benchmark_main"], ) ``` The source file should register benchmarks, but it should not call `BENCHMARK_MAIN()` when linking against `@google_benchmark//:benchmark_main`: ```c++ #include #include static void BM_StringCreation(benchmark::State& state) { for (auto _ : state) { std::string empty_string; } } BENCHMARK(BM_StringCreation); ``` Run the benchmark with Bazel: ```bash bazel run //:string_benchmark ``` Pass Google Benchmark flags after Bazel's `--` separator: ```bash bazel run //:string_benchmark -- --benchmark_filter=StringCreation ``` ## WORKSPACE Projects that still use `WORKSPACE` can declare Google Benchmark as an external repository and load its dependencies from `bazel/benchmark_deps.bzl`: ```starlark load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "google_benchmark", strip_prefix = "benchmark-", urls = ["https://github.com/google/benchmark/archive/refs/tags/v.tar.gz"], # Add sha256 for reproducible builds. ) load("@google_benchmark//:bazel/benchmark_deps.bzl", "benchmark_deps") benchmark_deps() ``` Use the same `` value without the leading `v`; the archive URL adds the tag prefix explicitly. After declaring the repository, use the same target labels shown above: `@google_benchmark//:benchmark` or `@google_benchmark//:benchmark_main`. ## Perf Counters When using Bazel, enable libpfm support by adding `--define pfm=1` to the build or run command. See [Perf Counters](perf_counters.md) for more details.