- Build Basics
- Bazel Vision
- Why Bazel?
- Workspaces, packages, and targets
- Labels
- BUILD files
- Dependencies
- Visibility
- External Dependencies
- Phases of a build
- Building with Bazel
Note: Do not try to read the entire page. Focus on deep linked sections.
- Available commands
- Q.What is in the build? A. Run “bazel query …”
- Building one target
- Building multiple targets
- Command line reference - The list is massive, but is systematic. No need to get familiar with every option, just the way the command line is organized.
- Practice:
- Starlark Language
- Macros and Rules
- Macros Reference
- Rules Reference
- Rule creation
- Target instantiation
- Attributes
- Output attributes
- Targets
- Files
- Declaring outputs
- Actions
- Providers
- Runfiles & Runfiles symlinks
- Executable rules and test rules
- Depsets
- Repository Rules
- Using Macros to Create Custom Verbs
- Testing Rules
- Practice:
- JavaScript
- rules_js - pnpm support
- rules_ts - TypeScript
- rules_swc - swc
- rules_esbuild - esbuild
- rules_webpack - Webpack
- rules_webtesting
- C++ to WASM: emsdk
- macOS/iOS:
- Go: rules_go
- Python: rules_python
- Practice:
- Tar, Zip, Deb, PRM: rules_pkg
- Containers: rules_docker
- Kubernetes & GitOps: rules_gitops
- Correct incremental rebuilds
- The Bazel Query Reference
- Action Graph Query (aquery)
- Fetching external dependencies
- Bazel Caching Explained
- How does Bazel track local resource usage?
- Remote Caching
- Remote Caching and Remote Execution Explained
- Debugging Remote Cache Hits
- Debugging Remote Cache Hits for Local Execution
- Test encyclopedia
- Performance profiling
- Memory profiling
- Analyzing Build Performance (blog)
- —subcommands command line parameter
- Output Directory Layout
- Building with Platforms
- Platforms Reference
- Toolchains Reference
- Configurations Reference
- Configurable Attributes Reference
- Configurable Query (cquery)
- Bazel Platforms Cookbook
- Hello World - How and when do I use platforms + constraints?
- Using different platforms
- How do I specify that some library cannot target e.g. Windows?
- On a library, I want to say needs java > 1.8, how?
- How do I match multiple config settings at once?
- How do I express that haswell cpu also implies SSE3 availability?.
- How and when do I use --define?
- How and when should I use build_setting?