Compare commits
No commits in common. "450f2c7ef59f8441aad6c5393609f411d7f869ef" and "b64d5358247a2e5ed49e398d65834b12d46f2a12" have entirely different histories.
450f2c7ef5
...
b64d535824
30
README.md
30
README.md
|
@ -13,41 +13,13 @@ aarch64. Install the following:
|
||||||
* [Kraftkit](https://unikraft.org/docs/cli/install)
|
* [Kraftkit](https://unikraft.org/docs/cli/install)
|
||||||
|
|
||||||
Then run `zig build run` and everything will compile and run. The zig source
|
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
|
code is all in the `ziggy` directory
|
||||||
point.
|
|
||||||
|
|
||||||
Reproducibility
|
|
||||||
---------------
|
|
||||||
|
|
||||||
This build is not reproducible at the moment. The problem is that we need v0.17.0
|
|
||||||
or higher (this may be an issue with QEMU installed version, so YMMV). Kraftfile
|
|
||||||
is designed to pin to a specific version, but as of this writing, versions of
|
|
||||||
unikraft core post 0.16.1 are not listed in https://manifests.kraftkit.sh/unikraft.yaml,
|
|
||||||
and as a result cannot be used, so we are forced to use "stable" as the version.
|
|
||||||
|
|
||||||
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
|
Notes
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
|
||||||
The build script basically runs these commands:
|
The build script basically runs these commands:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
|
|
14
build.zig
14
build.zig
|
@ -74,7 +74,7 @@ pub fn build(b: *std.Build) void {
|
||||||
const run_step = b.step("run", "Run the app");
|
const run_step = b.step("run", "Run the app");
|
||||||
run_step.dependOn(&run_cmd.step);
|
run_step.dependOn(&run_cmd.step);
|
||||||
|
|
||||||
var kraft_clean_cmd = b.addSystemCommand(&[_][]const u8{
|
const kraft_clean_cmd = b.addSystemCommand(&[_][]const u8{
|
||||||
"kraft",
|
"kraft",
|
||||||
"clean",
|
"clean",
|
||||||
"--plat",
|
"--plat",
|
||||||
|
@ -82,8 +82,6 @@ pub fn build(b: *std.Build) void {
|
||||||
"--arch",
|
"--arch",
|
||||||
"x86_64",
|
"x86_64",
|
||||||
});
|
});
|
||||||
kraft_clean_cmd.stdio = .{ .check = .{} }; // kraft clean has some weird exit code behavior
|
|
||||||
kraft_clean_cmd.has_side_effects = true;
|
|
||||||
const clean_step = b.step("clean", "Clean the unikraft build");
|
const clean_step = b.step("clean", "Clean the unikraft build");
|
||||||
clean_step.dependOn(&kraft_clean_cmd.step);
|
clean_step.dependOn(&kraft_clean_cmd.step);
|
||||||
|
|
||||||
|
@ -92,17 +90,9 @@ pub fn build(b: *std.Build) void {
|
||||||
"-rf",
|
"-rf",
|
||||||
".unikraft",
|
".unikraft",
|
||||||
});
|
});
|
||||||
|
|
||||||
// rm -rf in this manner is leaving empty .unikraft/build, which is confusing
|
|
||||||
// let's whack it
|
|
||||||
const remove_empties_cmd = b.addSystemCommand(&[_][]const u8{
|
|
||||||
"find", ".unikraft", "-type", "d", "-empty", "-delete",
|
|
||||||
});
|
|
||||||
remove_empties_cmd.step.dependOn(&distclean_cmd.step);
|
|
||||||
|
|
||||||
const distclean_step = b.step("distclean", "Deep clean the unikraft build");
|
const distclean_step = b.step("distclean", "Deep clean the unikraft build");
|
||||||
distclean_step.dependOn(clean_step);
|
distclean_step.dependOn(clean_step);
|
||||||
distclean_step.dependOn(&remove_empties_cmd.step);
|
distclean_step.dependOn(&distclean_cmd.step);
|
||||||
}
|
}
|
||||||
|
|
||||||
const LazyPathEnvironmentVariable = struct {
|
const LazyPathEnvironmentVariable = struct {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user