Skip to content

Dependency Strategies

Rebaze supports multiple strategies for resolving external dependencies.

StrategyHermeticSpeedSetup
systemNoFastMinimal
sourceYesSlow (first build)Moderate
vcpkgPartialModeratevcpkg install
conanPartialModerateConan install

Uses system-installed libraries via pkg-config.

[strategy]
default = "system"

How it works:

  1. Generates cc_library targets with linkopts
  2. At build time, pkg-config resolves library paths
  3. System libraries are linked

Pros:

  • Fast builds
  • Simple setup
  • Works with existing packages

Cons:

  • Non-hermetic
  • Version may vary across machines
  • Not reproducible

Generated:

cc_library(
name = "zlib",
linkopts = ["-lz"],
)

Builds dependencies from source using rules_foreign_cc.

[strategy]
default = "source"

How it works:

  1. Downloads source archives
  2. rules_foreign_cc builds them
  3. Built libraries are used as deps

Pros:

  • Fully hermetic
  • Reproducible builds
  • Same version everywhere

Cons:

  • Slower first build
  • Requires package metadata

Generated:

cmake(
name = "zlib",
lib_source = "@zlib//:all_srcs",
out_static_libs = ["libz.a"],
)

Mix strategies based on your needs:

[strategy]
default = "system"
[strategy.overrides]
openssl = "source" # Hermetic
zlib = "source" # Hermetic
qt = "system" # Large, use system
  • Developing locally
  • Dependencies are stable system packages
  • Build speed is important
  • Reproducibility is critical
  • Building in varied environments
  • Creating release builds

For CI pipelines:

rebaze.ci.toml
[strategy]
default = "source"
Terminal window
rebaze migrate . --config rebaze.ci.toml