From 9b94159f8ea29f254242274302ba47c826c077b9 Mon Sep 17 00:00:00 2001 From: Niklas Koll Date: Fri, 23 Jan 2026 11:23:07 +0100 Subject: [PATCH] register works --- flake.nix | 1 + nodes/max/plantarium/zig/build.zig | 2 +- nodes/max/plantarium/zig/src/input.json | 2 +- nodes/max/plantarium/zig/src/main.zig | 10 +++++++++- packages/utils/src/wasm-wrapper.ts | 20 ++++++++++++++++---- 5 files changed, 28 insertions(+), 7 deletions(-) diff --git a/flake.nix b/flake.nix index 8a814e4..7b8eeec 100644 --- a/flake.nix +++ b/flake.nix @@ -24,6 +24,7 @@ pkgs.cargo pkgs.rust-analyzer pkgs.rustfmt + pkgs.binaryen pkgs.lld pkgs.zig pkgs.zls diff --git a/nodes/max/plantarium/zig/build.zig b/nodes/max/plantarium/zig/build.zig index 1d48b01..e94d867 100644 --- a/nodes/max/plantarium/zig/build.zig +++ b/nodes/max/plantarium/zig/build.zig @@ -5,7 +5,7 @@ pub fn build(b: *std.Build) void { const release = b.option(bool, "release", "To build a wasm release") orelse false; const exe = b.addExecutable(.{ - .name = "math", + .name = "zig", .root_module = b.createModule(.{ .root_source_file = b.path("src/main.zig"), .target = target, diff --git a/nodes/max/plantarium/zig/src/input.json b/nodes/max/plantarium/zig/src/input.json index c7c0e41..470d2b2 100644 --- a/nodes/max/plantarium/zig/src/input.json +++ b/nodes/max/plantarium/zig/src/input.json @@ -1,5 +1,5 @@ { - "id": "niklas/zig/math", + "id": "max/nodarium/zig", "outputs": [ "float" ], diff --git a/nodes/max/plantarium/zig/src/main.zig b/nodes/max/plantarium/zig/src/main.zig index 4479abe..aaa4755 100644 --- a/nodes/max/plantarium/zig/src/main.zig +++ b/nodes/max/plantarium/zig/src/main.zig @@ -1,6 +1,6 @@ const std = @import("std"); -const def linksection("nodarium_definition") = @embedFile("input.json"); +const def = @embedFile("input.json"); export fn execute(ptr: *anyopaque, len: c_int) c_int { _ = ptr; // autofix @@ -19,3 +19,11 @@ export fn __free(ptr: *anyopaque, len: c_int) void { const mem: [*]u8 = @ptrCast(@alignCast(ptr)); std.heap.wasm_allocator.free(mem[0..@intCast(len)]); } + +export fn getDefinitionPtr() *const anyopaque { + return def.ptr; +} + +export fn getDefinitionLen() usize { + return def.len; +} diff --git a/packages/utils/src/wasm-wrapper.ts b/packages/utils/src/wasm-wrapper.ts index 6327d73..23ce8d2 100644 --- a/packages/utils/src/wasm-wrapper.ts +++ b/packages/utils/src/wasm-wrapper.ts @@ -3,6 +3,8 @@ interface NodariumExports extends WebAssembly.Exports { execute: (ptr: number, len: number) => number; __free: (ptr: number, len: number) => void; __alloc: (len: number) => number; + getDefinitionPtr: () => number; + getDefinitionLen: () => number; } export function createWasmWrapper(buffer: ArrayBuffer) { @@ -19,8 +21,8 @@ export function createWasmWrapper(buffer: ArrayBuffer) { if (!exports) return; const view = new Uint8Array(exports.memory.buffer, ptr, len); console.log("RUST:", new TextDecoder().decode(view)); - } - } + }, + }, }; const module = new WebAssembly.Module(buffer); @@ -43,12 +45,22 @@ export function createWasmWrapper(buffer: ArrayBuffer) { } function get_definition() { - const sections = WebAssembly.Module.customSections(module, "nodarium_definition"); + const decoder = new TextDecoder(); + const sections = WebAssembly.Module.customSections( + module, + "nodarium_definition", + ); if (sections.length > 0) { - const decoder = new TextDecoder(); const jsonString = decoder.decode(sections[0]); return JSON.parse(jsonString); } + + const ptr = exports.getDefinitionPtr(); + const len = exports.getDefinitionLen(); + + const view = new Uint8Array(exports.memory.buffer, ptr, len); + const jsonString = decoder.decode(view); + return JSON.parse(jsonString); } return { execute, get_definition };