This is the preferred style of adding dependencies that use Bazel for their build process.
- Define a new Bazel repository in
bazel/repositories.bzl
, in theenvoy_dependencies()
function. - Reference your new external dependency in some
envoy_cc_library
via theexternal_deps
attribute. bazel test //test/...
This is the newer style of adding dependencies with no upstream Bazel configs. It wraps the dependency's native build tooling in a Bazel-aware shell script, installing to a Bazel-managed prefix.
The shell script is executed by Bash, with a few Bazel-specific extensions. See the Bazel docs for "genrule" for details on Bazel's shell extensions.
- Add a BUILD file in
bazel/external/
, using agenrule
target to build the dependency. Please do not add BUILD logic that replaces the dependency's upstream build tooling. - Define a new Bazel repository in
bazel/repositories.bzl
, in theenvoy_dependencies()
function. The repository may usegenrule_repository
frombazel/genrule_repository.bzl
to place large genrule shell commands into a separate file. - Reference your new external dependency in some
envoy_cc_library
via Y in theexternal_deps
attribute. bazel test //test/...
Dependencies between external libraries can use the standard Bazel dependency
resolution logic, using the $(location)
shell extension to resolve paths
to binaries, libraries, headers, etc.
This is the older style of adding dependencies. It uses shell scripts to build and install dependencies into a shared directory prefix.
- Add a build recipe X in
ci/build_container/build_recipes
for developer-local and CI external dependency build flows. - Add a build target Y in
ci/prebuilt/BUILD
to consume the headers and libraries produced by the build recipe X. - Add a map from target Y to build recipe X in
target_recipes.bzl
. - Reference your new external dependency in some
envoy_cc_library
via Y in theexternal_deps
attribute. bazel test //test/...
- If the dependency is a build recipe, update the build recipe in
ci/build_container/build_recipes
. - If not, update the corresponding entry in the repository locations file.
bazel test //test/...
An external dependency built by genrule repository or native Bazel could be overridden by
specifying Bazel option
--override_repository
to point to a local copy. The option can used multiple times to override multiple dependencies.
The name of the dependency can be found in
the repository locations file.
The path of the local copy has to be absolute path.