summaryrefslogtreecommitdiff
path: root/vere/ext/wasm3/build.zig
diff options
context:
space:
mode:
authorpolwex <polwex@sortug.com>2025-10-05 21:56:51 +0700
committerpolwex <polwex@sortug.com>2025-10-05 21:56:51 +0700
commitfcedfddf00b3f994e4f4e40332ac7fc192c63244 (patch)
tree51d38e62c7bdfcc5f9a5e9435fe820c93cfc9a3d /vere/ext/wasm3/build.zig
claude is gud
Diffstat (limited to 'vere/ext/wasm3/build.zig')
-rw-r--r--vere/ext/wasm3/build.zig91
1 files changed, 91 insertions, 0 deletions
diff --git a/vere/ext/wasm3/build.zig b/vere/ext/wasm3/build.zig
new file mode 100644
index 0000000..1e57e91
--- /dev/null
+++ b/vere/ext/wasm3/build.zig
@@ -0,0 +1,91 @@
+const std = @import("std");
+
+pub fn build(b: *std.Build) void {
+ const target = b.standardTargetOptions(.{});
+ const optimize = b.standardOptimizeOption(.{});
+ const t = target.result;
+
+ const softfloat = b.dependency("softfloat", .{
+ .target = target,
+ .optimize = optimize,
+ });
+
+ const wasm3_c = b.dependency("wasm3", .{
+ .target = target,
+ .optimize = optimize,
+ });
+
+ const wasm3 = b.addStaticLibrary(.{
+ .name = "wasm3",
+ .target = target,
+ .optimize = optimize,
+ });
+
+ wasm3.linkLibC();
+
+ wasm3.addIncludePath(wasm3_c.path("source/"));
+
+ const common_flags = [_][]const u8{
+ "-std=c99",
+ "-Wall",
+ "-Wextra",
+ "-Wparentheses",
+ "-Wundef",
+ "-Wpointer-arith",
+ "-Wstrict-aliasing=2",
+ "-Werror=implicit-function-declaration",
+ "-fno-sanitize=all",
+ // "-fsanitize=undefined",
+ // "-fno-sanitize-trap=undefined",
+ };
+
+ const mac_flags = common_flags ++ [_][]const u8{
+ "-fPIC",
+ "-c",
+ };
+
+ wasm3.addCSourceFiles(.{
+ .root = wasm3_c.path("source/"),
+ .files = &.{
+ "m3_bind.c",
+ "m3_code.c",
+ "m3_compile.c",
+ "m3_core.c",
+ "m3_emit.c",
+ "m3_env.c",
+ "m3_exec.c",
+ "m3_function.c",
+ "m3_info.c",
+ "m3_module.c",
+ "m3_parse.c",
+ "m3_validate.c",
+ "m3_rewrite.c",
+ "m3_resume.c",
+ },
+ .flags = if (t.os.tag == .macos) &mac_flags else &common_flags,
+ });
+
+ wasm3.installHeader(wasm3_c.path("source/m3_config_platforms.h"), "m3_config_platforms.h");
+ wasm3.installHeader(wasm3_c.path("source/m3_bind.h"), "m3_bind.h");
+ wasm3.installHeader(wasm3_c.path("source/m3_code.h"), "m3_code.h");
+ wasm3.installHeader(wasm3_c.path("source/m3_compile.h"), "m3_compile.h");
+ wasm3.installHeader(wasm3_c.path("source/m3_config.h"), "m3_config.h");
+ wasm3.installHeader(wasm3_c.path("source/m3_core.h"), "m3_core.h");
+ wasm3.installHeader(wasm3_c.path("source/m3_emit.h"), "m3_emit.h");
+ wasm3.installHeader(wasm3_c.path("source/m3_env.h"), "m3_env.h");
+ wasm3.installHeader(wasm3_c.path("source/m3_exception.h"), "m3_exception.h");
+ wasm3.installHeader(wasm3_c.path("source/m3_exec.h"), "m3_exec.h");
+ wasm3.installHeader(wasm3_c.path("source/m3_exec_defs.h"), "m3_exec_defs.h");
+ wasm3.installHeader(wasm3_c.path("source/m3_function.h"), "m3_function.h");
+ wasm3.installHeader(wasm3_c.path("source/m3_info.h"), "m3_info.h");
+ wasm3.installHeader(wasm3_c.path("source/m3_math_utils.h"), "m3_math_utils.h");
+ wasm3.installHeader(wasm3_c.path("source/wasm3.h"), "wasm3.h");
+ wasm3.installHeader(wasm3_c.path("source/wasm3_defs.h"), "wasm3_defs.h");
+ wasm3.installHeader(wasm3_c.path("source/m3_validate.h"), "m3_validate.h");
+ wasm3.installHeader(wasm3_c.path("source/m3_rewrite.h"), "m3_rewrite.h");
+ wasm3.installHeader(wasm3_c.path("source/m3_resume.h"), "m3_resume.h");
+
+ wasm3.linkLibrary(softfloat.artifact("softfloat"));
+
+ b.installArtifact(wasm3);
+}