From eb25270d34d2d45ed562a8569f10431fad7bd233 Mon Sep 17 00:00:00 2001 From: "Mahlon E. Smith" Date: Tue, 19 Aug 2025 13:21:43 -0700 Subject: [PATCH] Initial commit. --- .gitignore | 1 + README.md | 11 ++++++ config.nims | 27 ++++++++++++++ minshell.html | 85 +++++++++++++++++++++++++++++++++++++++++++ nim_wasm_test.nimble | 22 +++++++++++ src/nim_wasm_test.nim | 34 +++++++++++++++++ 6 files changed, 180 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 config.nims create mode 100644 minshell.html create mode 100644 nim_wasm_test.nimble create mode 100644 src/nim_wasm_test.nim diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a007fea --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +build/* diff --git a/README.md b/README.md new file mode 100644 index 0000000..d8bd782 --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ + +Dinkin around. + +References: + +- https://github.com/bitnom/nim-to-wasm-guide +- https://github.com/planetis-m/naylib + + +May need to add `/usr/lib/emscripten` to your path, and hard link `emar.py` to +`emar`. diff --git a/config.nims b/config.nims new file mode 100644 index 0000000..8236e24 --- /dev/null +++ b/config.nims @@ -0,0 +1,27 @@ + +when defined(emscripten): + --define:GraphicsApiOpenGlEs2 + # --define:NaylibWebResources + # switch("define", "NaylibWebResourcesPath=resources") + # switch("define", "NaylibWebPthreadPoolSize=2") + # --define:NaylibWebAsyncify + --os:linux + --cpu:wasm32 + --cc:clang + --clang.exe:emcc + --clang.linkerexe:emcc + --clang.cpp.exe:emcc + --clang.cpp.linkerexe:emcc + --mm:arc + --threads:on + --panics:on + --exceptions:goto + --define:noSignalHandler + --passL:"-03" + # --passL:"-s EXPORT_NAME=Test1Module" + # --passL:"-s MODULARIZE=1" + --passL:"-s ASYNCIFY" # async support + # --passL:"-s JSPI" # async support + --passL:"-o index.html" + # --passL:"--shell-file minshell.html" + diff --git a/minshell.html b/minshell.html new file mode 100644 index 0000000..ec71588 --- /dev/null +++ b/minshell.html @@ -0,0 +1,85 @@ + + + + + + + raylib web game + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ + {{{ SCRIPT }}} + + diff --git a/nim_wasm_test.nimble b/nim_wasm_test.nimble new file mode 100644 index 0000000..348faa8 --- /dev/null +++ b/nim_wasm_test.nimble @@ -0,0 +1,22 @@ +# Package + +version = "0.1.0" +author = "Mahlon E. Smith" +description = "Dinking around with raylib and wasm target" +license = "MIT" +srcDir = "src" + +requires "nim >= 2.2.4" +requires "naylib >= 25.33.0" +requires "nimhttpd >= 1.5.1" + +task make, "Native build": + exec "mkdir -p build && nim c --outdir:build -d:release --opt:speed src/nim_wasm_test.nim" + +task makeweb, "Emscripten build": + exec "mkdir -p build && nim c --outdir:build -d:emscripten src/nim_wasm_test.nim" + +task runweb, "Run a local webserver for the wasm build": + exec "nimhttpd -H:'Cross-Origin-Opener-Policy: same-origin' -H:'Cross-Origin-Embedder-Policy: require-corp'" + + diff --git a/src/nim_wasm_test.nim b/src/nim_wasm_test.nim new file mode 100644 index 0000000..f679ca2 --- /dev/null +++ b/src/nim_wasm_test.nim @@ -0,0 +1,34 @@ +# vim: set et sta sw=4 ts=4 : + +import std/os +import raylib + +# Emscripten specific imports +proc emscripten_set_main_loop(f: proc() {.cdecl.}, a: cint, b: bool) {.importc.} +proc emscripten_sleep(a: cuint) {.importc.} + + +proc main() = + defer: closeWindow() + + initWindow( 600, 400, "raylib nim playground" ) + + while not windowShouldClose(): + if defined(emscripten): + emscripten_sleep 10 + else: + sleep 10 + +main() + + +# when defined(emscripten): +# # Emscripten can't block so it will call this callback instead. +# emscripten_set_main_loop(main_loop, 0, true); +# else: +# # When running native code we can block in an infinite loop. +# while windowShouldClose(window) == 0: +# mainLoop() +# # If you get ESC key quit. +# if window.getKey(KEY_ESCAPE) == 1: +# window.setWindowShouldClose(1)