Building
The build system is Bazel 9 with bzlmod. Cross-compilation toolchains are fetched from Bootlin automatically on first build.
Targets describe what to build. Configs describe how to build it.
Build a single platform
bazel build //release:full --config=linux_x86_64
bazel build //release:full --config=linux_x86_64 --config=debug
Build a single blob
bazel build --config=linux_aarch64 //src/payload:hello
bazel build --config=windows_x86_64 //src/payload:hello_windows
Build and stage all platforms
./buildall
This runs tools/stage_blobs.py, which builds all supported blobs,
non-Linux runners for FreeBSD and Windows, plus the Linux ul_exec
verifier fixtures. It then stages build outputs into the package trees and
regenerates the runtime sidecar catalog:
python/picblobs/_blobs/{os}/{arch}/{name}.so # build-time input
python/picblobs/blobs/{name}.{os}.{arch}.{bin,json} # runtime artifacts
python/picblobs/manifest.json # runtime catalog
python_cli/picblobs_cli/_runners/{freebsd,windows}/{arch}/runner
python_cli/picblobs_cli/_test_binaries/ul_exec/linux/{arch}/hello_et_exec
Build specific targets or platforms:
python tools/stage_blobs.py --targets hello --configs linux:x86_64
python tools/stage_blobs.py --configs windows:x86_64 windows:i686 windows:aarch64
Available platform configs
Generated by tools/generate.py from tools/registry.py:
linux_x86_64 linux_i686 linux_aarch64 linux_armv5_arm linux_armv5_thumb
linux_armv7_thumb linux_s390x linux_mipsel32 linux_mipsbe32
linux_sparcv8 linux_powerpc linux_ppc64le linux_riscv64
freebsd_x86_64 freebsd_i686 freebsd_aarch64 freebsd_armv5_arm
freebsd_armv5_thumb freebsd_armv7_thumb freebsd_mipsel32 freebsd_mipsbe32
windows_x86_64 windows_i686 windows_aarch64
Build mode configs
| Config | Effect |
|---|---|
| (default) | Optimized (-Os from toolchain) |
--config=debug |
Adds -g and -DPIC_LOG_ENABLE, strip=never |
--config=release |
Explicit strip=always |
Platform and build mode are orthogonal: --config=linux_x86_64 --config=debug.