Embedded and WebAssembly
46.1 Embedded Systems
Nim → C means it targets any MCU with a C toolchain: AVR (Arduino), ARM Cortex-M (STM32), ESP32 (nesper for ESP-IDF), RP2040 (picostdlib), RISC-V.
Key flags: --os:any (or standalone), --mm:arc (deterministic, no cycle collector), -d:useMalloc or a custom allocator, --panics:on, -d:noSignalHandler, --opt:size, --exceptions:goto, -d:nimAllocPagesViaMalloc.
Memory-mapped registers with volatileLoad / volatileStore (std/volatile). Interrupt handlers via {.exportc, codegenDecl.}.
nim c --cpu:arm --os:any --mm:arc -d:useMalloc --opt:size --noMain --app:staticlib firmware.nim46.2 WebAssembly
Compile via Emscripten: nim c --cc:clang --clang.exe:emcc --clang.linkerexe:emcc --os:linux --cpu:wasm32 -d:emscripten app.nim.
Or wasm32-wasi with clang + wasi-sdk for WASI runtimes (wasmtime, wasmer).
Libraries: nimwasmrt, wasmrt, raylib/naylib web builds.