Commit Graph

156 Commits

Author SHA1 Message Date
Hood Chatham 1b118353bb gh-145176 Move Emscripten files into Platforms/emscripten (#145806)
Moves Emscripten build files into Platforms/emscripten.
2026-03-17 09:39:45 +08:00
Hood Chatham ebb150e76a gh-145219: Cache Emscripten build dependencies, add install-emscripten (#145664)
Modifies the Emscripten build script to allow for caching of dependencies, and
for automated installation of new EMSDK versions.

Co-authored-by: Russell Keith-Magee <russell@keith-magee.com>
2026-03-11 08:43:27 +08:00
Hood Chatham 015613384f gh-145219: Add Emscripten cross-build and clean configurability (#145581)
Modifies the Emscripten build script to allow for custom cross-build directory
names, and to only clean Emscripten-specific paths (optionally including the
build python).

Co-authored-by: Russell Keith-Magee <russell@keith-magee.com>
2026-03-09 02:25:21 +00:00
Hood Chatham c3fb0d9d96 gh-145177: Support multiple Emscripten versions for Emscripten buildbot (#145180)
Adds an `--emsdk-cache` argument to the Emscripten build script and an
emscripten_version.txt file. If the `--emsdk-cache` argument is passed, the build script
will look in `emscripten_version.txt` to get the expected emsdk version is installed in
a folder called e.g., 4.0.12 in the directory indicated by the `--emsdk-cache` argument,
and run the build with that Emscripten tooling activated.
2026-03-06 08:42:41 +08:00
Brett Cannon 6181b69970 GH-143941: Move WASI-related files to Platforms/WASI (GH-143942)
Along the way, leave a deprecated Tools/wasm/wasi/__main__.py behind for backwards-compatibility.

Co-authored-by: Zachary Ware <zachary.ware@gmail.com>
2026-01-21 14:31:58 -08:00
Stan Ulbrych 719d7960e2 Fix typo in Tools/wasm/README.md (#142426) 2025-12-08 12:48:17 -08:00
Brett Cannon d49e6f38a7 Extract data from Tools/wasm/wasi that varies between Python versions into a config file (GH-142273)
This should allow for easier backporting of code.
2025-12-05 14:31:30 -08:00
Brett Cannon 58e1c7a16f Introduce build-python and build-host subcommands for Tools/wasm/wasi (GH-142266)
It should make it easier when you need to rebuild just the e.g. host Python, but it requires ./configure to run.

Co-authored-by: Emma Smith <emma@emmatyping.dev>
2025-12-05 13:35:50 -08:00
Brett Cannon c5252045d3 Being more flexible in when not to explicitly set the sysroot when compiling for WASI (GH-142242) 2025-12-03 15:42:10 -08:00
Brett Cannon ca1e86f9d9 Simplify setting CLI options for WASI builds (GH-141769)
This introduces a Wasmtime configuration file to get some CLI options out of the code for easier manipulation. It also allows for easier tweaking after the Makefile is generated.

As well, cut back on the flexibility of specifying HOSTRUNNER for simpler code. The flexibility was never used and so it didn't make sense to keep it around.
2025-11-19 15:57:44 -08:00
Alex Crichton 9b69a55be3 gh-141172: Update to wasi-sdk-29 (GH-141684)
This commit updates CI and configuration from wasi-sdk-25 to wasi-sdk-29
which was released recently. This notably includes stubs for pthreads
which all return errors, so some adjustment in logic is necessary to
retain knowledge that WASI cannot yet spawn threads for example.

This additionally increases the wasm stack allowance to 32MiB from 16MiB
to accomodate the `test_recursive_pickle` test in the
`test_functools.py` file. It looks like the Clang/LLVM update that
happened in wasi-sdk-29 relative to wasi-sdk-25 is likely the cause of
this where presumably functions have more locals than before and/or a
slightly adjusted stack space requirement which overflows the stack.
2025-11-19 10:03:30 -08:00
Brett Cannon abd19eddee Make printing log lines to the terminal a little cleaner when building WASI (GH-140772) 2025-10-30 10:35:53 -07:00
Brett Cannon 95a3564869 GH-140768: Warn when the WASI SDK version doesn't match the supported version (GH-140769) 2025-10-30 09:32:18 -07:00
Brett Cannon e5f4299f13 GH-140475: Support WASI SDK 25 (#140477)
As well, bump the version of Wasmtime used in CI.
2025-10-22 14:34:37 -07:00
adam j hartz 34503111fe gh-137025: Update Emscripten Build Docs (#137312)
Update Emscripten build docs to point at the devguide as the primary reference
for managing an Emscripten build.
2025-10-10 06:36:40 +08:00
sobolevn 678e0b818c gh-139590: Stricter ruff rules for Tools/wasm (#139752) 2025-10-09 01:13:27 +03:00
Savannah Ostrowski a15aeec29e GH-139590: Run ruff format on pre-commit for Tools/wasm (#139591)
Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
2025-10-08 02:25:06 +00:00
Hood Chatham 2629ee4eb0 gh-128627: Use __builtin_wasm_test_function_pointer_signature for Emscripten trampoline (#137470)
With https://github.com/llvm/llvm-project/pull/150201 being merged, there is 
now a better way to generate the Emscripten trampoline, instead of including 
hand-generated binary WASM content. Requires Emscripten 4.0.12.
2025-09-17 15:33:55 +01:00
Gyeongjae Choi d1d84098f6 gh-138515: Include email module in Emscripten build (gh-138520) 2025-09-05 16:34:18 +08:00
Brett Cannon 0953200b13 GH-137484: Have Tools/wasm/wasi use the build triple instead of "build" (GH-37485)
This should help prevent issuse where something like a container is used to do one build and then someone tries to build again locally.
2025-08-06 12:28:54 -07:00
Brett Cannon 94498a53f3 GH-137248: Add a --logdir option to Tools/wasm/wasi (GH-137249) 2025-07-30 19:13:37 +00:00
Brett Cannon 2f1a9f2ed4 GH-137243: Have Tools/wasm/wasi detect WASI SDK installs in /opt when the release tarball is extracted (GH-137244) 2025-07-30 11:46:24 -07:00
Hood Chatham ae4d27eba7 gh-124621: Emscripten: Add smoke test for using pyrepl in Chrome (#137004)
Adds a mechanism to test browser-based initialisation of the Python interpreter,
via a Playwright headless browser instance.
2025-07-24 14:44:02 +08:00
Hood Chatham ecb3f23b94 gh-136976: Emscripten: Add _decimal and libmpdec (#136997)
Adds tooling to build mpdec (and thus _decimal) as part of an Emscripten build.
2025-07-24 06:31:30 +00:00
Brett Cannon ec7fad79d2 Touch up Setup.local handling in Tools/wasm/wasi (GH-137051)
The comment in the generated file is now more self-explanatory. The checks for unexpected file contents are also strengthened.
2025-07-23 11:50:15 -07:00
Hood Chatham c933a6bb32 gh-124621: Emscripten: Support pyrepl in browser (GH-136931)
Basic support for pyrepl in Emscripten. Limitations:
* requires JSPI
* no signal handling implemented

As followup work, it would be nice to implement a webworker variant
for when JSPI is not available and proper signal handling.

Because it requires JSPI, it doesn't work in Safari. Firefox requires
setting an experimental flag. All the Chromiums have full support since
May. Until we make it work without JSPI, let's keep the original web_example
around.

Co-authored-by: Łukasz Langa <lukasz@langa.pl>
Co-authored-by: Éric <merwok@netwok.org>
2025-07-22 12:13:38 +02:00
Hood Chatham bbe589f93c gh-133600: Move config.site-wasm32-emscripten into the emscripten folder (#136934)
Reorganises the large Emscripten-specific file into the Emscripten folder.
2025-07-22 07:58:31 +08:00
adam j hartz d1d526afe7 gh-136251: Improvements to WASM demo REPL (GH-136252)
Co-authored-by: Hood Chatham <roberthoodchatham@gmail.com>
2025-07-21 11:56:45 +02:00
Hood Chatham 9c7b2af73d gh-136852: Emscripten: Fix bug in #136853 (#136909)
We need to get rid of some whitespace to make this work.
2025-07-21 11:17:36 +02:00
Hood Chatham aec7f5f8b2 gh-136852: Emscripten: Add PYTHON_NODE_VERSION environment variable (#136853)
To choose the node version we use. Together with:
https://github.com/python/buildmaster-config/pull/614
closes #136852.
2025-07-21 00:30:35 +02:00
Hood Chatham 7ae4749d06 gh-124621: Emscripten: Add support for async input devices (GH-136822)
This is useful for implementing proper `input()`. It requires the
JavaScript engine to support the wasm JSPI spec which is now stage 4.
It is supported on Chrome since version 137 and on Firefox and node
behind a flag.

We override the `__wasi_fd_read()` syscall with our own variant that
checks for a readAsync operation. If it has it, we use our own async
variant of `fd_read()`, otherwise we use the original `fd_read()`.
We also add a variant of `FS.createDevice()` called
`FS.createAsyncInputDevice()`.

Finally, if JSPI is available, we wrap the `main()` symbol with
`WebAssembly.promising()` so that we can stack switch from `fd_read()`.
If JSPI is not available, attempting to read from an AsyncInputDevice
will raise an `OSError`.
2025-07-19 17:14:29 +02:00
Russell Keith-Magee 34393cbdd4 gh-135648: Document that shutil.copyfileobj doesn't flush (#135737)
Adds a note about flush/close on copyfileobj, and updates 
the Emscripten build script to follow documented advice.
2025-06-24 08:55:50 +08:00
Brett Cannon 2da2be4b84 GH-131769: fix detecting a pydebug build of the build Python when building for WASI (GH-134015) 2025-05-22 14:41:50 -07:00
Brett Cannon 7d129f99ab Clarify some wording in wasi(\.py)? (GH-133619) 2025-05-08 09:54:46 -07:00
Zachary Ware 14291faa52 wasi: Update the location of the 'config.site' file in the build script (GH-133611)
Also remove Tools/wasm from mypy CI workflow
2025-05-07 20:48:41 +00:00
Brett Cannon ee49644cc9 GH-133600: Refactor wasi.py into wasi/__main__.py
Along the way, also move related files into their appropriate directories and update `.github/CODEOWNERS`.
2025-05-07 12:10:53 -07:00
Michael Droettboom c14134020f gh-133259: Show path to python.sh script on successful build (#133268)
* gh-133259: Show path to python.sh script on successful build

* wasmtime -> (generic) wasm runtime
2025-05-01 18:49:39 +00:00
Lukas 146b981f76 Silence system utils tests in emscripten python.sh (#133044)
Ensure that checks for system functions don't leak onto stdout on failure.
2025-04-28 06:13:02 +08:00
Yongzi Li a985c9262f Fix some typos in various doc files (GH-132589) 2025-04-16 18:11:47 +00:00
Hood Chatham 97ab8fc16a gh-127146: Fix Emscripten build with --pydebug (#131672)
Removes an explicit check that sysconfigdata naming is correct, in favor of reporting at
runtime with the default mechanisms.
2025-03-25 05:43:31 +08:00
Hood Chatham cf288e3c25 gh-127146: Update test skips for Emscripten 4.0.2 (#129474)
Updates test skips to reflect capabilities of Emscripten 4.0.2.
2025-03-17 06:02:27 +08:00
Victor Stinner 85cabed260 gh-131152: Remove unused imports from Tools/{build,wasm} (#131155) 2025-03-13 10:58:28 +01:00
Hood Chatham db1e5827c4 gh-127503: Improve tracebacks on Emscripten when there is a trap (#131158)
Modifies the behavior of the interpreter on crash under Emscripten:
1. No Python traceback shown on segfault/trap
2. The JavaScript source line is shown

The JavaScript source line is super long and completely unenlightening,
whereas the Python traceback is very helpful.
2025-03-13 08:28:15 +08:00
Agriya Khetarpal e2064d6750 Emscripten: use better _Py_Version computation for worker module (#129757)
Use integer bit shifting instead of conversion to strings to compute Python version.
2025-02-07 12:55:27 +08:00
Hood Chatham 3b18af964d gh-127629: Add ctypes to the Emscripten build (#127683)
Adds tooling to build libffi and add ctypes to the stdlib for Emscripten.
2024-12-10 10:32:58 +08:00
Hood Chatham d8d12b37b5 gh-127503: Fix realpath handling in emscripten cli (#127632)
Corrects the handling of realpath on Linux.
2024-12-09 10:03:11 +08:00
Hood Chatham 5876063d06 gh-127503 Don't propagate native PATH to Emscripten Python (#127633)
Modifies the handling of PATH to ensure that native executables aren't picked
up when running under node.
2024-12-09 10:01:37 +08:00
Brett Cannon 0fc4063747 GH-127652: stop using --wasi preview2 in wasi.py (GH-127704)
It's only to use WASI 0.2 code to back preview1 APIs and is considered experimental anyway.
2024-12-06 18:42:05 +00:00
Hood Chatham 87faf0a9c4 gh-127503: Emscripten make Python.sh function as proper Python CLI (#127506)
Modifies the python.sh script to work on macOS, and adapt to recent emscripten changes.
2024-12-05 08:44:50 +08:00
Hood Chatham 2f1cee8477 gh-127111: Apply prettier formatter to Emscripten web example (#127551)
Cleaned up formatting (and a stray closing tag) of the web example HTML and JS.
2024-12-05 08:25:06 +08:00