Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,10 @@ jobs:
run: |
zig build -Dvm_kind=${{ matrix.stack_kind }}

- name: Build (no wasi)
run: |
zig build -Dvm_kind=${{ matrix.stack_kind }} -Dwasi=false

- name: Bench
run: |
zig build bench -Dvm_kind=${{ matrix.stack_kind }} -Doptimize=ReleaseFast
Expand Down
32 changes: 22 additions & 10 deletions build.zig
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,15 @@ pub fn build(b: *Build) void {
const target = b.standardTargetOptions(.{});
const optimize = b.standardOptimizeOption(.{});

const enable_metering = b.option(bool, "meter", "Enable metering") orelse false;
const enable_debug_trace = b.option(bool, "debug_trace", "Enable debug tracing feature") orelse false;
const enable_debug_trap = b.option(bool, "debug_trap", "Enable debug trap features") orelse false;
const enable_metering = b.option(bool, "meter", "Enable metering (default: false)") orelse false;
const enable_debug_trace = b.option(bool, "debug_trace", "Enable debug tracing feature (default: false)") orelse false;
const enable_debug_trap = b.option(bool, "debug_trap", "Enable debug trap features (default: false)") orelse false;
const enable_wasi = b.option(bool, "wasi", "Enable wasi support (default: true if target has support)") orelse blk: {
if (target.result.cpu.arch.isWasm() and target.result.os.tag != .wasi) {
break :blk false;
}
break :blk true;
};
const vm_kind = b.option(
StackVmKind,
"vm_kind",
Expand All @@ -54,6 +60,7 @@ pub fn build(b: *Build) void {
options.addOption(bool, "enable_metering", enable_metering);
options.addOption(bool, "enable_debug_trace", enable_debug_trace);
options.addOption(bool, "enable_debug_trap", enable_debug_trap);
options.addOption(bool, "enable_wasi", enable_wasi);
options.addOption(StackVmKind, "vm_kind", vm_kind);

const stable_array = b.dependency("zig-stable-array", .{
Expand Down Expand Up @@ -150,12 +157,15 @@ pub fn build(b: *Build) void {
});

// wasi tests
const wasi_testsuite = b.addSystemCommand(&.{"python3"});
wasi_testsuite.addArg("test/wasi/run.py");
wasi_testsuite.step.dependOn(bytebox_exe_step);

const wasi_testsuite_step = b.step("test-wasi", "Run wasi testsuite");
wasi_testsuite_step.dependOn(&wasi_testsuite.step);
var maybe_wasi_testsuite_step: ?*Step = null;
if (enable_wasi) {
const wasi_testsuite = b.addSystemCommand(&.{"python3"});
wasi_testsuite.addArg("test/wasi/run.py");
wasi_testsuite.step.dependOn(bytebox_exe_step);

maybe_wasi_testsuite_step = b.step("test-wasi", "Run wasi testsuite");
maybe_wasi_testsuite_step.?.dependOn(&wasi_testsuite.step);
}

// mem64 test
const compile_mem64_test: WasmBuild = buildWasmExe(b, "test/mem64/memtest.zig", .wasm64);
Expand Down Expand Up @@ -197,9 +207,11 @@ pub fn build(b: *Build) void {
const all_tests_step = b.step("test", "Run unit, wasm, and wasi tests");
all_tests_step.dependOn(unit_test_step);
all_tests_step.dependOn(wasm_testsuite_step);
all_tests_step.dependOn(wasi_testsuite_step);
all_tests_step.dependOn(mem64_test_step);
all_tests_step.dependOn(cffi_test_step);
if (maybe_wasi_testsuite_step) |wasi_testsuite_step| {
all_tests_step.dependOn(wasi_testsuite_step);
}
}

fn buildExeWithRunStep(b: *Build, target: Build.ResolvedTarget, optimize: std.builtin.OptimizeMode, imports: []const Import, opts: ExeOpts) *Build.Step {
Expand Down
24 changes: 18 additions & 6 deletions run/main.zig
Original file line number Diff line number Diff line change
Expand Up @@ -257,12 +257,24 @@ pub fn main() !void {
var module_instance = try bytebox.createModuleInstance(.Stack, module_def, allocator);
defer module_instance.destroy();

var imports_wasi: bytebox.ModuleImportPackage = try wasi.initImports(.{
.argv = opts.wasm_argv,
.env = opts.wasm_env,
.dirs = opts.wasm_dirs,
}, allocator);
defer wasi.deinitImports(&imports_wasi);
var imports_wasi: bytebox.ModuleImportPackage = blk: {
if (config.enable_wasi) {
break :blk try wasi.initImports(.{
.argv = opts.wasm_argv,
.env = opts.wasm_env,
.dirs = opts.wasm_dirs,
}, allocator);
} else {
break :blk try bytebox.ModuleImportPackage.init("empty_stub", null, null, allocator);
}
};
defer {
if (config.enable_wasi) {
wasi.deinitImports(&imports_wasi);
} else {
imports_wasi.deinit();
}
}

const instantiate_opts = bytebox.ModuleInstantiateOpts{
.imports = &[_]bytebox.ModuleImportPackage{imports_wasi},
Expand Down
2 changes: 1 addition & 1 deletion src/core.zig
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ const inst = @import("instance.zig");
const vm_stack = @import("vm_stack.zig");
const vm_register = @import("vm_register.zig");
pub const config = @import("config");
pub const wasi = @import("wasi.zig");
pub const wasi = if (config.enable_wasi) @import("wasi.zig") else void;

pub const LogLevel = common.LogLevel;
pub const Logger = common.Logger;
Expand Down
6 changes: 0 additions & 6 deletions src/definition.zig
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,6 @@ const opcodes = @import("opcode.zig");
const Opcode = opcodes.Opcode;
const WasmOpcode = opcodes.WasmOpcode;

// HACK: just get the code working, will need to resolve anything dependent on this eventually
const inst = @import("instance.zig");
const ModuleInstance = inst.ModuleInstance;
const Store = inst.Store;
const GlobalInstance = inst.GlobalInstance;

pub const MalformedError = error{
MalformedBytecode,
MalformedCustomSection,
Expand Down