Native Unikraft Microkernel Build for Zig libraries =================================================== Building -------- Everything assumes Linux on x86_64, though some trivial changes should allow aarch64. Install the following: * [Zig](https://ziglang.org). Versions 0.12.0 and 0.13.0 should work * [QEMU](https://www.qemu.org/download/#linux) * [Kraftkit](https://unikraft.org/docs/cli/install) Then run `zig build run` and everything will compile and run. The zig source code is all in the `ziggy` directory. This is all prototype level code at this point. undefined.c ----------- This file aims to fill in all the undefined symbols that are referenced when a zig project links libC (necessary for unikraft kernel development). However, this is very incomplete. The `.config.hellowworld_qemu-x86_64` file, usually managed by the invocation of the TUI started by `kraft menu`, will add/remove features that result in various libc symbols being implemented. A few `#ifdef` statements exist currently, but even the few that are in there aren't quite right...this file is mostly a "hack around until it works" effort. Knowing that this is an initial effort, care was put into making sure that when a symbol is actually **used** at runtime, the unikernel will crash after posting a message indicating the specific function call that was involved. This is designed to either a) correct the configuration using `kraft menu` or b) provide an implementation directly in `undefined.c`. In some cases, I prefer the implementation in `undefined.c`, most specifically the `write` function, which will output stderr messages in red. Notes ----- The build script basically runs these commands: ```sh (cd ziggy && zig build) LIBZIGGY=$(pwd)/ziggy/zig-out/lib/libziggy.a kraft build --plat qemu --arch x86_64 --log-level debug --log-type basic kraft run --plat qemu --arch x86_64 ```