From a9ee34e6ee7dad27552d2127aacf8e4944fdc903 Mon Sep 17 00:00:00 2001 From: Jon Nordby Date: Sat, 6 Dec 2025 21:24:24 +0100 Subject: [PATCH 01/10] make: Add webassembly target --- Makefile | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index dade70b..c59976b 100644 --- a/Makefile +++ b/Makefile @@ -27,7 +27,7 @@ PORT_BUILD_DIR=$(MPY_DIR)/ports/$(PORT)/build-$(BOARD) PORT_DIST_DIR=./dist/ports/$(PORT)/$(BOARD) UNIX_MICROPYTHON = ./dist/ports/unix/micropython - +WEBASSEMBLY_MICROPYTHON = ./dist/ports/webassembly/micropython.mjs # List of modules MODULES = emlearn_trees \ @@ -72,6 +72,16 @@ $(UNIX_MICROPYTHON): $(PORT_DIR) unix: $(UNIX_MICROPYTHON) +$(WEBASSEMBLY_MICROPYTHON): $(PORT_DIR) + mkdir -p $(PORT_DIR)/../webassembly + make -C $(MPY_DIR)/ports/webassembly V=1 USER_C_MODULES=$(C_MODULES_SRC_PATH) FROZEN_MANIFEST=$(MANIFEST_PATH) CFLAGS_EXTRA="-Wno-unused-function -Wno-unused-function ${CFLAGS_EXTRA}" -j4 + cp $(MPY_DIR)/ports/webassembly/build-standard/micropython.mjs $@ + cp $(MPY_DIR)/ports/webassembly/build-standard/micropython.wasm dist/ports/webassembly/ + + +webassembly: $(WEBASSEMBLY_MICROPYTHON) + + check_unix: $(UNIX_MICROPYTHON) $(UNIX_MICROPYTHON) tests/test_all.py test_iir,test_fft,test_arrayutils # TODO: enable more modules From fabfb543537c9cae9a0401cbfd9611c055c515d5 Mon Sep 17 00:00:00 2001 From: Jon Nordby Date: Sat, 6 Dec 2025 21:26:51 +0100 Subject: [PATCH 02/10] CI: Add webassembly build --- .github/workflows/build.yaml | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 56828a4..49a895c 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -223,6 +223,41 @@ jobs: name: emlearn-micropython-build-macos path: dist + build-webassembly: + runs-on: ubuntu-24.04 + env: + MPY_DIR: ./micropython + MICROPYTHON_BIN: ./micropython/ports/unix/build-nomodules/micropython + steps: + - uses: actions/checkout@v4 + with: + submodules: true + - name: Install OS dependencies + run: sudo add-apt-repository universe + - uses: actions/setup-python@v5 + with: + python-version: '3.10' + - uses: actions/checkout@v4 + with: + repository: jonnor/micropython + path: micropython + ref: v1.26.1-emlearn + - name: Install Python dependencies + run: pip install -r requirements.txt + - name: Setup MicroPython + working-directory: micropython + run: | + source tools/ci.sh && ci_webassembly_setup + - name: Build Webassembly + run: | + source ${MPY_DIR}/emsdk/emsdk_env.sh + make webassembly V=1 + - name: Archive dist artifacts + uses: actions/upload-artifact@v4 + with: + name: emlearn-micropython-build-webassembly + path: dist + deploy-pages: permissions: contents: write From 57d1be1f34938bafa5876ee57f990bd6f9f73a7f Mon Sep 17 00:00:00 2001 From: Jon Nordby Date: Sat, 6 Dec 2025 21:34:57 +0100 Subject: [PATCH 03/10] CI: Try ubuntu-latest for webassembly --- .github/workflows/build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 49a895c..8450f25 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -224,7 +224,7 @@ jobs: path: dist build-webassembly: - runs-on: ubuntu-24.04 + runs-on: ubuntu-latest env: MPY_DIR: ./micropython MICROPYTHON_BIN: ./micropython/ports/unix/build-nomodules/micropython From 1655d98e30a5e57c0f874243a3ffd4b61e829b96 Mon Sep 17 00:00:00 2001 From: Jon Nordby Date: Sat, 6 Dec 2025 21:44:12 +0100 Subject: [PATCH 04/10] CI: Try MicroPython master for webassembly --- .github/workflows/build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 8450f25..83abc16 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -241,7 +241,7 @@ jobs: with: repository: jonnor/micropython path: micropython - ref: v1.26.1-emlearn + ref: master - name: Install Python dependencies run: pip install -r requirements.txt - name: Setup MicroPython From a3d19d6a0c84db1ac1eb9dfaa8856c39af96adf7 Mon Sep 17 00:00:00 2001 From: Jon Nordby Date: Sat, 6 Dec 2025 21:48:47 +0100 Subject: [PATCH 05/10] CI: Setup submodules for webassembly --- .github/workflows/build.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 83abc16..fff98d7 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -251,6 +251,7 @@ jobs: - name: Build Webassembly run: | source ${MPY_DIR}/emsdk/emsdk_env.sh + make -C ${MPY_DIR}/ports/webassembly submodules make webassembly V=1 - name: Archive dist artifacts uses: actions/upload-artifact@v4 From 47f671fa9420a79e8e54540085235b2607f9f39e Mon Sep 17 00:00:00 2001 From: Jon Nordby Date: Sat, 6 Dec 2025 21:59:09 +0100 Subject: [PATCH 06/10] make: Log emcc version and specify variant for webassembly --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index c59976b..7d29d35 100644 --- a/Makefile +++ b/Makefile @@ -73,8 +73,9 @@ $(UNIX_MICROPYTHON): $(PORT_DIR) unix: $(UNIX_MICROPYTHON) $(WEBASSEMBLY_MICROPYTHON): $(PORT_DIR) + emcc --version mkdir -p $(PORT_DIR)/../webassembly - make -C $(MPY_DIR)/ports/webassembly V=1 USER_C_MODULES=$(C_MODULES_SRC_PATH) FROZEN_MANIFEST=$(MANIFEST_PATH) CFLAGS_EXTRA="-Wno-unused-function -Wno-unused-function ${CFLAGS_EXTRA}" -j4 + make -C $(MPY_DIR)/ports/webassembly VARIANT=standard V=1 USER_C_MODULES=$(C_MODULES_SRC_PATH) FROZEN_MANIFEST=$(MANIFEST_PATH) CFLAGS_EXTRA="-Wno-unused-function -Wno-unused-function ${CFLAGS_EXTRA}" -j4 cp $(MPY_DIR)/ports/webassembly/build-standard/micropython.mjs $@ cp $(MPY_DIR)/ports/webassembly/build-standard/micropython.wasm dist/ports/webassembly/ From ab862939b10ee4d999bf54c0e2d7274d9e6fa836 Mon Sep 17 00:00:00 2001 From: Jon Nordby Date: Sat, 6 Dec 2025 22:07:38 +0100 Subject: [PATCH 07/10] CI: Try use same emsdk as locally --- .github/workflows/build.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index fff98d7..bdb7d3c 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -247,7 +247,9 @@ jobs: - name: Setup MicroPython working-directory: micropython run: | - source tools/ci.sh && ci_webassembly_setup + npm install terser + git clone https://github.com/emscripten-core/emsdk.git + (cd emsdk && ./emsdk install 4.0.21 && ./emsdk activate 4.0.21) - name: Build Webassembly run: | source ${MPY_DIR}/emsdk/emsdk_env.sh From 5e8b98758bbcf26ba2a5a74fcd1df4a9eea34cfe Mon Sep 17 00:00:00 2001 From: Jon Nordby Date: Sat, 6 Dec 2025 22:11:01 +0100 Subject: [PATCH 08/10] CI: Build mpy-cross without emsdk, for webassembly --- .github/workflows/build.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index bdb7d3c..4b3d24d 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -250,6 +250,7 @@ jobs: npm install terser git clone https://github.com/emscripten-core/emsdk.git (cd emsdk && ./emsdk install 4.0.21 && ./emsdk activate 4.0.21) + make -C mpy-cross CFLAGS_EXTRA=-Wno-error - name: Build Webassembly run: | source ${MPY_DIR}/emsdk/emsdk_env.sh From 85f87ba80fb075a8fa5777eca1770335bd57411c Mon Sep 17 00:00:00 2001 From: Jon Nordby Date: Sat, 6 Dec 2025 22:15:12 +0100 Subject: [PATCH 09/10] CI: Use MicroPython branch with CFLAGS_EXTRA for Webassembly Otherwise fails on warnings inside emlearn modules --- .github/workflows/build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 4b3d24d..1b5fbf9 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -241,7 +241,7 @@ jobs: with: repository: jonnor/micropython path: micropython - ref: master + ref: webassembly-extra-cflags - name: Install Python dependencies run: pip install -r requirements.txt - name: Setup MicroPython From 903d0251a2bb944613d477d7bdcdae21edc38b18 Mon Sep 17 00:00:00 2001 From: Jon Nordby Date: Sat, 6 Dec 2025 22:35:11 +0100 Subject: [PATCH 10/10] CI: Make pages depend on webassembly --- .github/workflows/build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 1b5fbf9..5d1abb5 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -265,7 +265,7 @@ jobs: deploy-pages: permissions: contents: write - needs: [build-linux, build-arm, build-esp32, build-macos, build-riscv] + needs: [build-linux, build-arm, build-esp32, build-macos, build-riscv, build-webassembly] runs-on: ubuntu-latest steps: