]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Simplify setting CLI options for WASI builds (GH-141769)
authorBrett Cannon <brett@python.org>
Wed, 19 Nov 2025 23:57:44 +0000 (15:57 -0800)
committerGitHub <noreply@github.com>
Wed, 19 Nov 2025 23:57:44 +0000 (15:57 -0800)
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.

Tools/wasm/wasi/__main__.py
Tools/wasm/wasi/wasmtime.toml [new file with mode: 0644]

index 59ffd436258185dbccf15ab31740bc1d42a6660b..06903fd25abe446db17ce56181274ffe30465cf4 100644 (file)
@@ -16,7 +16,9 @@ import sys
 import sysconfig
 import tempfile
 
-CHECKOUT = pathlib.Path(__file__).parent.parent.parent.parent
+HERE = pathlib.Path(__file__).parent
+
+CHECKOUT = HERE.parent.parent.parent
 assert (CHECKOUT / "configure").is_file(), (
     "Please update the location of the file"
 )
@@ -304,9 +306,7 @@ def configure_wasi_python(context, working_dir):
             "specify via $WASI_SDK_PATH or --wasi-sdk"
         )
 
-    config_site = os.fsdecode(
-        CHECKOUT / "Tools" / "wasm" / "wasi" / "config.site-wasm32-wasi"
-    )
+    config_site = os.fsdecode(HERE / "config.site-wasm32-wasi")
 
     wasi_build_dir = working_dir.relative_to(CHECKOUT)
 
@@ -324,10 +324,7 @@ def configure_wasi_python(context, working_dir):
     # Use PYTHONPATH to include sysconfig data which must be anchored to the
     # WASI guest's `/` directory.
     args = {
-        "GUEST_DIR": "/",
-        "HOST_DIR": CHECKOUT,
-        "ENV_VAR_NAME": "PYTHONPATH",
-        "ENV_VAR_VALUE": f"/{sysconfig_data_dir}",
+        "PYTHONPATH": f"/{sysconfig_data_dir}",
         "PYTHON_WASM": working_dir / "python.wasm",
     }
     # Check dynamically for wasmtime in case it was specified manually via
@@ -417,16 +414,18 @@ def main():
     default_wasi_sdk = find_wasi_sdk()
     default_host_runner = (
         f"{WASMTIME_HOST_RUNNER_VAR} run "
-        # Make sure the stack size will work for a pydebug
-        # build.
-        # Use 32 MiB stack.
-        "--wasm max-wasm-stack=33554432 "
-        # Enable thread support; causes use of preview1.
-        # "--wasm threads=y --wasi threads=y "
+        # For setting PYTHONPATH to the sysconfig data directory.
+        "--env PYTHONPATH={PYTHONPATH} "
         # Map the checkout to / to load the stdlib from /Lib.
-        "--dir {HOST_DIR}::{GUEST_DIR} "
-        # Set PYTHONPATH to the sysconfig data.
-        "--env {ENV_VAR_NAME}={ENV_VAR_VALUE}"
+        f"--dir {os.fsdecode(CHECKOUT)}::/ "
+        # Flags involving --optimize, --codegen, --debug, --wasm, and --wasi can be kept
+        # in a config file.
+        # We are using such a file to act as defaults in case a user wants to override
+        # only some of the settings themselves, make it easy to modify settings
+        # post-build so that they immediately apply to the Makefile instead of having to
+        # regenerate it, and allow for easy copying of the settings for anyone else who
+        # may want to use them.
+        f"--config {os.fsdecode(HERE / 'wasmtime.toml')}"
     )
     default_logdir = pathlib.Path(tempfile.gettempdir())
 
diff --git a/Tools/wasm/wasi/wasmtime.toml b/Tools/wasm/wasi/wasmtime.toml
new file mode 100644 (file)
index 0000000..5a45e8c
--- /dev/null
@@ -0,0 +1,5 @@
+# https://docs.wasmtime.dev/cli-options.html#cli-options-using-toml-file
+
+[wasm]
+# 32 MiB; big enough for the test suite to pass under a debug build.
+max-wasm-stack = 33_554_432