Reference Build targets

Build targets

Every Hover build ends in the same place: the generated sim.cpp is handed to zig c++ and linked against a prebuilt static runtime library for the target platform.

The compile line

Using Zig as the C++ driver is what makes cross-compilation cheap: the target triple is just a flag, and Zig ships the sysroot for every target it supports. Nothing in the compiler or runtime source is platform-conditional.

The runtime library

libhover_runtime.a is built once per target from the C++ sources under runtime/ — the Modified Nodal Analysis engine (mna/, built on Eigen), the VM and its logger (vm/), and the integration methods (solvers/, one translation unit per solver named in .solver). It's compiled with zig c++ and archived with zig ar, same as the per-simulation build.

Standalone releases

The Makefile builds self-contained release folders that bundle the runtime, the hover CLI, the standard_library/ directory, and a vendored Zig toolchain, so an end user needs nothing preinstalled:

  • make linux — cross-compiles for x86_64-linux-gnu, zips the result.
  • make windows — the same for x86_64-windows-gnu.
  • make all — both.
  • make clean — removes build artifacts and standalone folders.

Note that standard_library/ gets copied next to the binary — that's the directory import <...> resolves against, so it must stay adjacent to hover for angle-bracket imports to work. See Modules & imports.