From 887ede73b6abee048633253240aba7b19fb7d360 Mon Sep 17 00:00:00 2001 From: Siva Mahadevan Date: Wed, 18 Feb 2026 16:20:33 -0500 Subject: [PATCH 1/3] vm-src-build: build WITH_META_MODE This improves incremental compilation speed. --- src/bricoler/bricoler.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/bricoler/bricoler.py b/src/bricoler/bricoler.py index 18a5cec..4d94d79 100644 --- a/src/bricoler/bricoler.py +++ b/src/bricoler/bricoler.py @@ -213,6 +213,7 @@ def run(self, ctx): "MAKEOBJDIRPREFIX": objdir, "SRCCONF": "/dev/null", "__MAKE_CONF": "/dev/null", + "WITH_META_MODE": "yes", } self.src.repo.make(args, env=env) From 41852ab25603cc996c0cdf964eebd1d84a7e1d26 Mon Sep 17 00:00:00 2001 From: Siva Mahadevan Date: Wed, 18 Feb 2026 16:20:33 -0500 Subject: [PATCH 2/3] use a falsey check for self.packages before pkg update Passing --freebsd-vm-image/packages= should work. --- src/bricoler/bricoler.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bricoler/bricoler.py b/src/bricoler/bricoler.py index 4d94d79..2dde420 100644 --- a/src/bricoler/bricoler.py +++ b/src/bricoler/bricoler.py @@ -406,7 +406,7 @@ def add_config_file( add_config_file("firstboot") - if self.packages is not None: + if self.packages: major = self.src.FreeBSD_version // 100000 pkgabi = f"FreeBSD:{major}:{machine.split('/')[1]}" From 0a57191ed358d8742ed6be8b1630c7d8a3814e7d Mon Sep 17 00:00:00 2001 From: Siva Mahadevan Date: Wed, 18 Feb 2026 16:20:33 -0500 Subject: [PATCH 3/3] VMRun: allow running riscv64 guests with RVVM RVVM seems to have a significant performance advantage over QEMU. --- src/bricoler/bricoler.py | 10 ++++++++-- src/bricoler/vm.py | 15 +++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/bricoler/bricoler.py b/src/bricoler/bricoler.py index 2dde420..584fb4b 100644 --- a/src/bricoler/bricoler.py +++ b/src/bricoler/bricoler.py @@ -22,7 +22,7 @@ from .mtree import MtreeFile from .task import Task, TaskParameter, TaskMeta, TaskSchedule from .util import chdir, host_machine, info, run_cmd, warn -from .vm import FreeBSDVM, VMImage, VMHypervisor, BhyveRun, QEMURun +from .vm import FreeBSDVM, VMImage, VMHypervisor, BhyveRun, QEMURun, RVVMRun class FreeBSDSrcRepository(GitRepository): @@ -623,7 +623,13 @@ class FreeBSDVMBootTask(Task): } def run(self, ctx): - cls = QEMURun if self.hypervisor == VMHypervisor.QEMU else BhyveRun + match self.hypervisor: + case VMHypervisor.QEMU: + cls = QEMURun + case VMHypervisor.RVVM: + cls = RVVMRun + case _: + cls = BhyveRun vmrun = cls( image=self.vm_image.image, memory=self.memory, diff --git a/src/bricoler/vm.py b/src/bricoler/vm.py index 95b396b..5a18487 100644 --- a/src/bricoler/vm.py +++ b/src/bricoler/vm.py @@ -33,6 +33,7 @@ def select(self, d: Dict[str, str], default=None) -> str: class VMHypervisor(Enum): BHYVE = 'bhyve' QEMU = 'qemu' + RVVM = 'rvvm' class VMRun: @@ -136,6 +137,20 @@ def add_device(desc): return [str(a) for a in bhyve_cmd] +class RVVMRun(VMRun): + def setup(self) -> List[str]: + rvvm_cmd = [ + "rvvm", + "/usr/local/share/RVVM/fw_payload.bin", + "-image", f"{self.image.path}", + "-mem", f"{self.memory}M", + "-smp", f"{self.ncpus}", + "-nogui", + ] + if self.nic_driver != VMRun.NetworkDriver.VIRTIO: + rvvm_cmd.extend(["-nonet"]) + return rvvm_cmd + class QEMURun(VMRun): def bios_path(self) -> Optional[Path]: return self.image.select({