commit c69d395ab555c96466b29c4798355224dff8eb78 Author: Dennis Ranke Date: Wed Mar 29 18:29:04 2023 +0200 initial commit, unpacking platform.uw8 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4cacef2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.o +/wasm3-test diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..f5a4703 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "wasm3"] + path = wasm3 + url = https://github.com/wasm3/wasm3.git diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..d834f76 --- /dev/null +++ b/Makefile @@ -0,0 +1,16 @@ +WASM3_C := $(wildcard wasm3/source/*.c) +WASM3_O := $(WASM3_C:.c=.o) + +run: wasm3-test .PHONY + ./wasm3-test + +wasm3-test: main.o $(WASM3_O) + gcc -g -lm -o wasm3-test $^ + +wasm3/source/%.o: wasm3/source/%.c + gcc -g -c -o $@ $^ + +main.o: main.c + gcc -g -c -o main.o main.c + +.PHONY: \ No newline at end of file diff --git a/loader.wasm b/loader.wasm new file mode 100644 index 0000000..83425e2 Binary files /dev/null and b/loader.wasm differ diff --git a/main.c b/main.c new file mode 100644 index 0000000..493ca74 --- /dev/null +++ b/main.c @@ -0,0 +1,47 @@ +#include "wasm3/source/wasm3.h" +#include "wasm3/source/m3_env.h" +#include +#include + +void* loadFile(size_t* sizeOut, const char* filename) { + FILE* file = fopen(filename, "rb"); + fseek(file, 0, SEEK_END); + size_t size = (size_t)ftell(file); + rewind(file); + + void* buffer = malloc(size); + fread(buffer, size, 1, file); + fclose(file); + *sizeOut = size; + return buffer; +} + +int main() { + IM3Environment env = m3_NewEnvironment(); + IM3Runtime runtime = m3_NewRuntime(env, 16384, NULL); + runtime->memory.maxPages = 4; + ResizeMemory(runtime, 4); + + uint8_t* memory = m3_GetMemory(runtime, NULL, 0); + + size_t loaderSize; + void* loaderWasm = loadFile(&loaderSize, "loader.wasm"); + + IM3Module loaderMod; + m3_ParseModule(env, &loaderMod, loaderWasm, loaderSize); + loaderMod->memoryImported = true; + m3_LoadModule(runtime, loaderMod); + + size_t runtimeUw8Size; + void* runtimeUw8 = loadFile(&runtimeUw8Size, "platform.uw8"); + memcpy(memory, runtimeUw8, runtimeUw8Size); + + IM3Function loadUw8; + m3_FindFunction(&loadUw8, runtime, "load_uw8"); + m3_CallV(loadUw8, (uint32_t)runtimeUw8Size); + uint32_t runtimeSize; + m3_GetResultsV(loadUw8, &runtimeSize); + printf("size: %u\n", runtimeSize); + + return 0; +} diff --git a/platform.uw8 b/platform.uw8 new file mode 100644 index 0000000..2425d51 Binary files /dev/null and b/platform.uw8 differ diff --git a/wasm3 b/wasm3 new file mode 160000 index 0000000..772f8f4 --- /dev/null +++ b/wasm3 @@ -0,0 +1 @@ +Subproject commit 772f8f4648fcba75f77f894a6050db121e7651a2