Cnuas, Build System¶
Overview¶
Bazel-based build for switch daemon, CLI, WebUI, kernel modules, and Debian packages.
Phasing¶
| Phase | Status | Scope |
|---|---|---|
| 1. Bazel core | Done | switch, CLI, WebUI backend |
| 2. Bazel packaging | Done | .deb packages for switch/cli/webui |
| 3. Bazel kernel/QEMU | Planned | Wrap kernel + QEMU + rdma-core builds |
| 4. CI pipeline | Planned | Azure DevOps azure-pipelines.yml |
| 5. Vagrant | Planned | Multi-VM lab using packaged artifacts |
| 6. Releases | Planned | Tag → GitHub Releases with .deb artifacts |
Prerequisites¶
sudo wget -O /usr/local/bin/bazel \
https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64
sudo chmod +x /usr/local/bin/bazel
sudo apt install -y build-essential libjansson-dev libcurl4-openssl-dev
Build Targets¶
bazel build //... # Everything
bazel build //:all-binaries # All daemons/tools
bazel build //:all-debs # All .deb packages
bazel build //src/hiswitch/switch:hicain-vswitchd # Switch daemon
bazel build //packaging/switch:switch_deb # Switch .deb only
Test¶
Output¶
bazel-bin/src/hiswitch/switch/hicain-vswitchd
bazel-bin/src/hiswitch/cli/hicain-cli
bazel-bin/src/hiswitch/webui/backend/hicain-webui
bazel-bin/packaging/switch/hicain-switch_0.1.0_amd64.deb
bazel-bin/packaging/cli/hicain-cli_0.1.0_amd64.deb
bazel-bin/packaging/webui/hicain-webui_0.1.0_amd64.deb
Package Layout¶
| Package | Installs To | Depends On |
|---|---|---|
hicain-switch |
/usr/local/bin/hicain-vswitchd, /lib/systemd/system/hicain-vswitchd.service |
libjansson4, libcurl4 |
hicain-cli |
/usr/local/bin/hicain-cli |
python3, python3-typer, python3-rich, python3-pydantic |
hicain-webui |
/usr/local/bin/hicain-webui, /lib/systemd/system/hicain-webui.service |
python3, python3-fastapi, python3-uvicorn, python3-pydantic |
Install¶
sudo dpkg -i bazel-bin/packaging/switch/hicain-switch_0.1.0_amd64.deb \
bazel-bin/packaging/cli/hicain-cli_0.1.0_amd64.deb \
bazel-bin/packaging/webui/hicain-webui_0.1.0_amd64.deb
sudo apt-get install -f
sudo systemctl enable --now hicain-vswitchd hicain-webui
Workspace Layout¶
| Path | Target |
|---|---|
MODULE.bazel |
Bzlmod root |
BUILD.bazel |
Top-level aliases (//:all-binaries, //:all-debs) |
src/hiswitch/switch/BUILD.bazel |
C switch daemon |
src/hiswitch/cli/BUILD.bazel |
Python CLI |
src/hiswitch/webui/backend/BUILD.bazel |
FastAPI backend |
src/hiswitch/webui/frontend/BUILD.bazel |
Next.js frontend (genrule) |
src/hinic/kernel/BUILD.bazel |
Kernel modules (genrule, manual) |
packaging/switch/BUILD.bazel |
Switch .deb |
packaging/cli/BUILD.bazel |
CLI .deb |
packaging/webui/BUILD.bazel |
WebUI .deb |
tests/BUILD.bazel |
Pytest tests |
CI¶
--config=ci adds --verbose_failures --announce_rc from .bazelrc.
Not Yet in Bazel¶
- Linux kernel, built via
makeinlinux/submodule - QEMU, built via
meson/ninjainqemu/submodule - rdma-core provider (
libhicain-rdmav34.so), built in-tree with rdma-core - Kernel modules (
hicain_net.ko,hicain_ib.ko), built via kbuild against kernel headers
These will be wrapped as Bazel genrules in Phase 3.
Manual Build (until Phase 3)¶
# Kernel
cd linux && cp /boot/config-$(uname -r) .config
yes '' | make olddefconfig && make -j$(nproc)
# QEMU
cd qemu && mkdir -p build && cd build
../configure --target-list=x86_64-softmmu --enable-kvm --enable-slirp \
--disable-docs --disable-werror
make -j$(nproc)
# Kernel modules
cd src/hinic/kernel && make KDIR=$PWD/../../linux
# rdma-core provider — see HiCAIN_RoCE_IB_HowTo.md