Skip to content

Build from Source

By default, rebaze uses system libraries. For hermetic, reproducible builds, you can build dependencies from source using rules_foreign_cc.

ApproachProsCons
System librariesFast, simple setupNon-hermetic, version varies
Source buildsHermetic, reproducibleSlower first build

In rebaze.toml:

[strategy]
default = "source"

Or for specific packages:

[strategy]
default = "system"
[strategy.overrides]
zlib = "source"
openssl = "source"

For packages built from source, define their metadata:

[mappings.known_packages.zlib]
version = "1.3.1"
url = "https://github.com/madler/zlib/releases/download/v1.3.1/zlib-1.3.1.tar.gz"
sha256 = "9a93b2b7dfdac77ceba5a558a580e74667dd6fede4585b91eefb60f03b72df23"
strip_prefix = "zlib-1.3.1"
build_system = "cmake"
out_static_libs = ["libz.a"]
[mappings.known_packages.openssl]
version = "3.2.0"
url = "https://github.com/openssl/openssl/releases/download/openssl-3.2.0/openssl-3.2.0.tar.gz"
sha256 = "..."
strip_prefix = "openssl-3.2.0"
build_system = "autotools"
out_static_libs = ["libssl.a", "libcrypto.a"]
deps = []
build_options = ["no-shared"]
ValueTool Used
cmakecmake_external from rules_foreign_cc
autotoolsconfigure_make from rules_foreign_cc
mesonmeson from rules_foreign_cc

When using source strategy, rebaze generates:

load("@rules_foreign_cc//foreign_cc:defs.bzl", "cmake")
def _zlib_impl():
cmake(
name = "zlib",
lib_source = "@zlib//:all_srcs",
out_static_libs = ["libz.a"],
)
bazel_dep(name = "rules_foreign_cc", version = "0.14.0")
http_archive = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "zlib",
url = "https://...",
sha256 = "...",
strip_prefix = "zlib-1.3.1",
)

Add transitive dependencies:

[mappings.transitive_deps]
curl = ["zlib", "openssl"]

Check the actual output name:

out_static_libs = ["libz.a"] # Linux
# or
out_static_libs = ["z.lib"] # Windows