HOVEL // module 01.03
Module 01.03 Payload provider / Integrated

Building picblobs

picblobs uses the repository root .bazelrc. The imported modules/picblobs/.bazelrc is retained only as deprecated source context. Invoke every build through Task; the Taskfile owns the required Bazel configurations and declared toolchains.

Module Build

task picblobs:bazel-build
task picblobs:provider-stage
task picblobs:stage

The representative build covers the provider and the supported Linux, Windows, and FreeBSD platform slices. The provider stage copies the Go payload-provider binary into the module package. The blob stage builds platform payloads and extracts release artifacts into the Python package tree.

Pinned Mbed Target Build

First materialize a matched server/client pair, then compile both firmware roles. See the PoC workflow before using real key material.

task picblobs:mbed-blobs -- \
  --server-ip=192.0.2.10 \
  --auth-key-file=/secure/path/mbed-poc.key \
  --port=9999

task picblobs:mbed-compile

The build consumes Mbed OS 5.15.9 at commit dfcb61e052d1192d99a07dca6fb4970281afc8e4 and the GCC ARM 9-2019-q4 Linux toolchain from Bazel repositories pinned by SHA-256. It uses Mbed's real legacy build system for NUCLEO_F429ZI/GCC_ARM, not the POSIX API mocks used by the executable integration test.

Declared input Pin
Cortex-M4 blob compiler Arm GNU 15.2.rel1 archive, SHA-256 597893282ac8c6ab1a4073977f2362990184599643b4c5ee34870a8215783a16.
Mbed firmware compiler GCC ARM 9-2019-q4 archive, SHA-256 bcd840f839d5bf49279638e9f67890b2ef3a7c9c7a9b25271e83ec4ff41d177a.
Mbed OS Commit above, source archive SHA-256 9bdcfd5f65542988461c6c33a1ae376e6fd1cb4c1f2786a4f6cd63522b843c14.

Build one role while iterating with either command:

task picblobs:mbed-compile -- --role=server
task picblobs:mbed-compile -- --role=client

Outputs are separated under .local/picblobs/mbed/NUCLEO_F429ZI/GCC_ARM/server/ and client/. A lock serializes clean builds sharing that root. Success requires a nontrivial .bin and an ELF with a valid header; the builder prints each artifact's size and SHA-256.

Validate a Local Mbed Checkout

task picblobs:mbed-compile -- \
  --mbed-os=/absolute/path/to/mbed-os

The override must expose Mbed's tools/make.py and version header and report exactly 5.15.9. When Git metadata is present, the builder also requires the pinned commit. It resolves detached HEADs, symbolic refs, packed refs, and worktree or submodule gitdir/commondir layouts rather than trusting a version string alone. The compiler remains the declared GCC ARM 9.x toolchain, and build output must remain outside both source trees.

Configuration Freshness

Compilation rejects a zero port, zero server IPv4 address, all-zero or mismatched authentication keys, stale blob code, and role headers that do not share the same port and key. Regenerate both headers together with task picblobs:mbed-blobs; do not hand-edit the C arrays. The reference records the exact layouts and source paths.