skills/bazel/SKILL.md
Bazel build system skill for C/C++ projects. Use when writing BUILD files with cc_library and cc_binary rules, registering toolchains, configuring remote execution, debugging sandbox issues, using query and cquery for dependency graphs, or migrating from CMake to Bazel. Activates on queries about Bazel, BUILD files, cc_library, cc_binary, Bzlmod, bazel query, remote execution, or Bazel toolchain registration.
npx skillsauth add awfixers-stuff/opencode-config bazelInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Guide agents through Bazel for C/C++ projects: writing BUILD files, cc_library/cc_binary rules, toolchain registration, remote execution, dependency graph queries, Bzlmod dependency management, and sandbox debugging.
my-project/
├── MODULE.bazel # Bzlmod dependency file (Bazel ≥6)
├── WORKSPACE # legacy (still needed for some features)
├── BUILD # root build file
├── src/
│ ├── BUILD
│ └── main.cc
└── lib/
├── BUILD
├── mylib.cc
└── mylib.h
# lib/BUILD
cc_library(
name = "mylib",
srcs = ["mylib.cc"],
hdrs = ["mylib.h"],
copts = ["-Wall", "-Wextra", "-std=c++17"],
visibility = ["//visibility:public"],
deps = [
"@com_google_absl//absl/strings", # external dep
"//util:helpers", # internal dep
],
)
cc_test(
name = "mylib_test",
srcs = ["mylib_test.cc"],
deps = [
":mylib",
"@com_google_googletest//:gtest_main",
],
)
# src/BUILD
cc_binary(
name = "main",
srcs = ["main.cc"],
deps = ["//lib:mylib"],
linkopts = ["-lpthread"],
)
# Build
bazel build //src:main
bazel build //... # build everything
# Test
bazel test //lib:mylib_test
bazel test //... # run all tests
# Run
bazel run //src:main -- arg1 arg2
# Output path
bazel-bin/src/main
# MODULE.bazel
module(
name = "my_project",
version = "1.0",
)
bazel_dep(name = "abseil-cpp", version = "20240116.2")
bazel_dep(name = "googletest", version = "1.14.0")
bazel_dep(name = "rules_cc", version = "0.0.9")
bazel_dep(name = "platforms", version = "0.0.8")
# For http_archive deps not yet in BCR (Bazel Central Registry)
# Use module extensions
# Check available versions
bazel mod graph | head -30
# Show dependency tree
bazel mod deps --depth=2
# Show all dependencies of a target
bazel query "deps(//src:main)"
# Find reverse dependencies (who depends on this?)
bazel query "rdeps(//..., //lib:mylib)"
# Find what changed between builds
bazel query "filter('//lib', deps(//src:main))"
# cquery — configuration-aware query
bazel cquery "deps(//src:main)" --output=files
# Show include paths for a target
bazel cquery "//lib:mylib" --output=build
# Find cycles in the build graph
bazel query --nohost_deps --noimplicit_deps \
"somepath(//src:main, //lib:mylib)"
# aquery — action graph (shows compiler flags, inputs, outputs)
bazel aquery "//src:main"
bazel aquery "//src:main" --output=jsonproto | jq '.actions[0].arguments'
# platforms/BUILD
platform(
name = "linux_x86_64",
constraint_values = [
"@platforms//os:linux",
"@platforms//cpu:x86_64",
],
)
# toolchains/BUILD
cc_toolchain_suite(
name = "my_toolchain",
toolchains = {
"k8": ":my_k8_toolchain",
},
)
cc_toolchain(
name = "my_k8_toolchain",
all_files = ":empty",
compiler_files = ":compiler_wrapper",
# ... other file groups
)
toolchain(
name = "my_cc_toolchain",
toolchain = ":my_k8_toolchain",
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
target_compatible_with = ["@platforms//os:linux"],
)
# MODULE.bazel — register toolchain
register_toolchains("//toolchains:my_cc_toolchain")
# Use --remote_executor flag
bazel build //... \
--remote_executor=grpc://buildgrid.example.com:50051 \
--remote_instance_name=main
# Google Cloud Build Remote Execution
bazel build //... \
--remote_executor=remotebuildexecution.googleapis.com \
--remote_instance_name=projects/my-project/instances/default \
--google_default_credentials
# Caching (without remote execution)
bazel build //... \
--remote_cache=grpc://cache.example.com:9092
# Show what's cached
bazel build //... --remote_upload_local_results=true
# Show sandbox inputs and outputs
bazel build //src:main --sandbox_debug
# Run build with verbose sandboxing
bazel build //src:main --verbose_failures --sandbox_debug
# Disable sandbox entirely (for debugging)
bazel build //src:main --spawn_strategy=local
# Common sandbox errors
# "No such file or directory" → missing data dependency
# Fix: add file to `data = [...]` attribute
# "Permission denied" → trying to write outside sandbox
# Fix: use genrule output paths instead of hardcoded paths
# "FAILED: Build did NOT complete successfully" → check verbose output
# See the exact command Bazel ran
bazel build //src:main --subcommands
For Bazel C++ toolchain configuration, see references/bazel-cpp-toolchain.md.
skills/build-systems/cmake for CMake as an alternative build systemskills/build-systems/build-acceleration for sccache integration with Bazel remote cacheskills/compilers/gcc or skills/compilers/clang for compiler flags used in Bazel coptsdevelopment
Use when starting dev servers, watchers, tilt, or any process expected to outlive the conversation. Provides zmx session management patterns for long-lived processes.
development
Zig testing skill for writing and running tests. Use when using zig build test, writing comptime tests, using test filters, working with test allocators to detect leaks, or using Zig's built-in fuzz testing (0.14+). Activates on queries about Zig tests, zig test, zig build test, comptime testing, test allocators, Zig fuzz testing, or detecting memory leaks in Zig tests.
development
Zig debugging skill. Use when debugging Zig programs with GDB or LLDB, interpreting Zig runtime panics, using std.debug.print for tracing, configuring debug builds, or debugging Zig programs in VS Code. Activates on queries about debugging Zig, Zig panics, zig gdb, zig lldb, std.debug.print, Zig stack traces, or Zig error return traces.
tools
Zig cross-compilation skill. Use when cross-compiling Zig programs to different targets, using Zig's built-in cross-compilation for embedded, WASM, Windows, ARM, or using zig cc to cross-compile C code without a system cross-toolchain. Activates on queries about Zig cross-compilation, zig target triples, zig cc cross-compile, Zig embedded targets, or Zig WASM.