pyemscripten_2024_0#
By default, all builds of the Pyodide runtime with Python 3.12 will use the
pyemscripten_2024_0 platform.
Note
Prior to PEP 783, the platform was referenced as pyodide_2024_0.
ABI Specification#
CPython and Emscripten Version#
CPython: 3.12
Emscripten: 3.1.58
WASM_BIGINT#
All shared libraries must be linked with -sWASM_BIGINT.
Since Rust 1.84.0 or nightly 2024-11-05, Rust will automatically pass
-Clink-arg=-sWASM_BIGINT. In earlier versions of Rust it was required to pass
-Clink-arg=-sWASM_BIGINT explicitly. Passing it explicitly will work in all
cases.
Unwinding ABIs#
By default, C++ libraries are built with exceptions disabled, and throw is an
abort. The same is true for setjmp/longjmp. To enable exceptions and
setjmp/longjmp, -fexceptions must be passed at compile time and link time.
Rust will automatically enable unwinding.
Rust Toolchain#
The Rust toolchain used must be a nightly released prior to October 1st 2025.
Runtime Library Loading Path#
Specifying an RPATH is not supported, emcc will warn and ignore it. The
dynamic loader has been patched so that all dynamic libraries in a wheel named
wheel_name-<tag>.whl will be loaded as if
/lib/python3.12/site-packages/wheel_name.libs is on the RPATH, so any
dynamic library dependencies should be placed in the wheel in a folder called
wheel_name.libs.
Libraries Linked to the Main Binary#
The following libraries are statically linked to the binary:
libegl.jslibeventloop.jslibGLlibhtml5_webgl.jslibhtml5.jsliblz4libsdl.jslibwebgl.jslibwebsocket.jsbzip2zlib
All of these come from Emscripten ports and the versions of these libraries are determined by the version of Emscripten we build with. Any symbols from these static libraries may be used by shared libraries.