Skip to content

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

bazel test //tests:switch_tests

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

bazel build --config=ci //:all-debs

--config=ci adds --verbose_failures --announce_rc from .bazelrc.

Not Yet in Bazel

  • Linux kernel, built via make in linux/ submodule
  • QEMU, built via meson/ninja in qemu/ 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