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.
This commit is contained in:
Alex Crichton 2025-11-19 12:03:30 -06:00 committed by GitHub
parent 4bcab461c2
commit 9b69a55be3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 7 additions and 7 deletions

View file

@ -13,7 +13,7 @@ jobs:
timeout-minutes: 60
env:
WASMTIME_VERSION: 38.0.3
WASI_SDK_VERSION: 25
WASI_SDK_VERSION: 29
WASI_SDK_PATH: /opt/wasi-sdk
CROSS_BUILD_PYTHON: cross-build/build
CROSS_BUILD_WASI: cross-build/wasm32-wasip1

View file

@ -504,6 +504,7 @@ extern "C" {
* Thread support is stubbed and any attempt to create a new thread fails.
*/
#if (!defined(HAVE_PTHREAD_STUBS) && \
!defined(__wasi__) && \
(!defined(__EMSCRIPTEN__) || defined(__EMSCRIPTEN_PTHREADS__)))
# define Py_CAN_START_THREADS 1
#endif

View file

@ -730,14 +730,12 @@ def test_thread_info(self):
self.assertEqual(len(info), 3)
self.assertIn(info.name, ('nt', 'pthread', 'pthread-stubs', 'solaris', None))
self.assertIn(info.lock, ('pymutex', None))
if sys.platform.startswith(("linux", "android", "freebsd")):
if sys.platform.startswith(("linux", "android", "freebsd", "wasi")):
self.assertEqual(info.name, "pthread")
elif sys.platform == "win32":
self.assertEqual(info.name, "nt")
elif sys.platform == "emscripten":
self.assertIn(info.name, {"pthread", "pthread-stubs"})
elif sys.platform == "wasi":
self.assertEqual(info.name, "pthread-stubs")
def test_abi_info(self):
info = sys.abi_info

View file

@ -0,0 +1 @@
Update to WASI SDK 29.

View file

@ -31,7 +31,7 @@
b"# Required to statically build extension modules."
)
WASI_SDK_VERSION = 25
WASI_SDK_VERSION = 29
WASMTIME_VAR_NAME = "WASMTIME"
WASMTIME_HOST_RUNNER_VAR = f"{{{WASMTIME_VAR_NAME}}}"
@ -419,8 +419,8 @@ def main():
f"{WASMTIME_HOST_RUNNER_VAR} run "
# Make sure the stack size will work for a pydebug
# build.
# Use 16 MiB stack.
"--wasm max-wasm-stack=16777216 "
# Use 32 MiB stack.
"--wasm max-wasm-stack=33554432 "
# Enable thread support; causes use of preview1.
# "--wasm threads=y --wasi threads=y "
# Map the checkout to / to load the stdlib from /Lib.