The Challenge: Keeping Close Track of Build Inputs Across a Hardware Startup Product Line Link to heading

In robotics and IoT, market success drives extreme software complexity. As a hardware platform evolves to provide more functionality and support more integrations, the underlying codebase and testing / quality assurance space expand into a massive, multi-layered ecosystem. This is exactly the reality at Aerora North America, a provider of premium, white-label Ground Control Stations (GCS) and drone hardware. Aerora’s hardware enters the US market by passing rigorous regulatory filters like FCC certification and import/export control, necessitating auditability of all shipped software and hardware. To ensure continuous support of production code on ready-to-fly hardware, Aerora needs a hermetic build system capable of tracking every input source, output source, and discrete version.

The Tech Stack: Link to heading

Aerora NA’s GCS hardware is powered by a combination of C libraries enabling flight control and physical control interaction, Java/Android code running the Settings app that makes the GCS easy to integrate with MAVlinkbased systems, and a proprietary custom system image (ROM) based off a Qualcomm OS for connected tablets. Similarly, sensor payloads offered by Aerora possess a complex build chain of C and other code. All of these code bases integrate with hardware in some way, fundamentally increasing the complexity of code testing, release candidate QA, and RMAs. To ship and continuously support production code on ready-to-fly hardware, we need to closely track system build inputs, outputs, and versioning, as a first step to robust, scalable deployment and support. With regulatory compliance in the mix, the provenance and state of our systems must be auditable at any time.
The Aerora GS7 Ground Control Station (GCS), a robust and configurable offering.

The Solution: Hermetic Builds with Bazel and BuildBuddy Link to heading

For a polyglot, complex, voluminous code base like Aerora’s, Bazel is the obvious choice. Bazel is a free, open-source version of Google’s internal Blaze build and test tool. It is designed to quickly and reliably compile code and run tests for large-scale, multi-language software projects while keeping track of any input change. It is particularly targeted at fast builds of monorepos like Android ROM image code bases. I implemented Bazel to handle three complex, dissimilar code bases that each stage into the next (see Figure 01) and hosted it in the cloud in Vietnamese jurisdiction, with the option to deploy bare metal in the factory. To securely bridge engineering and other staff, remote cloud environments, and factory-floor systems, WireGuard tunneling and tight firewall configurations exist to establish an encrypted, reliable routing mesh across distinct network boundaries.

Figure 01 - Aerora Build Infrastructure Link to heading

Bazel build infrastructure diagram for Aerora drone ground control stations using Docker and BuildBuddy

Production Robotics and IoT software often exist on top of a scaffolding of robust but pre-modern low-level libraries, spanning several languages, and defying easy end-to-end testing because of the inherent physicality of the system. Lifting this kind of software ecosystem into a deterministic, portable, interrogable build context requires iterative application of the appropriate tool, in this case, Bazel. Before builds can become fully hermetic, Bazel and BuildBuddy highlight where exactly an unexpected input change occurs. BuildBuddy’s Content Addressable Store tracks all build input file changes, while the Action Cache tracks all build process changes, ensuring we can trace any artifact back to its exact inputs. This is crucial when dealing with a ROM build pipeline that compiles and links tens or hundreds of thousands of separate sources.

Because it is so massive, moving a ROM build and its outputs from one region to another and through import/export compliance is also cumbersome. Depending on tenancy costs, which are quite high in certain regions, the significant system requirements for a ROM build are also an issue. Running Bazel in Docker solves both issues, allowing us to fully open the throttle for a local ROM build on a highly capable factory-floor industrial compute unit, or squeeze the immense ROM build process into limited cloud hardware in the required jurisdiction. We switch between the two build types with a single flag.

Provenance and auditability are hugely challenging in complex robotics and IoT code bases and production chains. If a regulatory review or other forensic exercise enters the chat, Bazel and the companion BuildBuddy back-end work in conjunction with an InvenTree inventory system to allow quick retrieval of the necessary data. In the case of a red team exercise or actual compromise, we can trace forward from the code that defines our build pipeline to the final build products and hashes, identifying any change or compromise or alternatively showing that none occurred.

Figure 02 - Regulatory Compliance or RMA Assessment Link to heading

Diagram of regulatory compliance or RMA workflow involving Bazel and BuildBuddy driven auditability.

This overview glosses over the long hours put into assessing the involved code bases and their inputs, and then maneuvering all of it into a build context that is particularly unforgiving of code that compiles but isn’t fully modernized. AI tooling is not present in the core system; potentially non-deterministic agents within this workflow are undesirable. However, the system itself is the end result of productive collaboration between AI coding assistants and an experienced human engineer, and also ensures the kind of structured data that makes it easy to layer on agentic helpers.

Customer Benefits: Faster Iteration, Faster End User Support, Certainty Link to heading

Drone manufacturers iterate continuously, and Aerora meets their needs at the same pace, from changes to injection molding process, to new software functionality, to updated radio firmware bundled into the final system image. Aerora also needs to quickly clear any regulatory compliance exercise, supplier firmware update, or complex end user support ticket. This Bazel-based build system and related factory-floor provisioning and inventory management systems ensure that Aerora knows the precise build inputs for every shipped unit of hardware. Bazel preserves auditability during iteration, provides avenues to better automated testing in the near future, and provides highly structured data for the integration of agentic AI.