https://github.com/python/cpython/commit/544b001b233ac57dfce17587ffbd10a70abe3ab0
commit: 544b001b233ac57dfce17587ffbd10a70abe3ab0
branch: main
author: Hood Chatham <roberthoodchat...@gmail.com>
committer: freakboy3742 <russ...@keith-magee.com>
date: 2024-11-16T09:44:05+08:00
summary:

gh-126691: Remove --with-emscripten-target (#126787)

This unifies the code for nodejs and the code for the browser. After this
commit, the browser example doesn't work; this will be fixed in a
subsequent update.

files:
A Misc/NEWS.d/next/Build/2024-11-13-15-47-09.gh-issue-126691.ni4K-b.rst
M Doc/using/configure.rst
M Tools/wasm/README.md
M Tools/wasm/emscripten/node_pre.js
M configure
M configure.ac

diff --git a/Doc/using/configure.rst b/Doc/using/configure.rst
index 5f1ee0c2a2e657..6fd623c5176778 100644
--- a/Doc/using/configure.rst
+++ b/Doc/using/configure.rst
@@ -454,15 +454,6 @@ Options for third-party dependencies
 WebAssembly Options
 -------------------
 
-.. option:: --with-emscripten-target=[browser|node]
-
-   Set build flavor for ``wasm32-emscripten``.
-
-   * ``browser`` (default): preload minimal stdlib, default MEMFS.
-   * ``node``: NODERAWFS and pthread support.
-
-   .. versionadded:: 3.11
-
 .. option:: --enable-wasm-dynamic-linking
 
    Turn on dynamic linking support for WASM.
diff --git 
a/Misc/NEWS.d/next/Build/2024-11-13-15-47-09.gh-issue-126691.ni4K-b.rst 
b/Misc/NEWS.d/next/Build/2024-11-13-15-47-09.gh-issue-126691.ni4K-b.rst
new file mode 100644
index 00000000000000..9a2196dab8d711
--- /dev/null
+++ b/Misc/NEWS.d/next/Build/2024-11-13-15-47-09.gh-issue-126691.ni4K-b.rst
@@ -0,0 +1,3 @@
+Removed the ``--with-emscripten-target`` configure flag. We unified the
+``node`` and ``browser`` options and the same build can now be used, 
independent
+of target runtime.
diff --git a/Tools/wasm/README.md b/Tools/wasm/README.md
index 4c9a643b0d9d74..3f4211fb1dfb28 100644
--- a/Tools/wasm/README.md
+++ b/Tools/wasm/README.md
@@ -21,12 +21,6 @@ https://github.com/psf/webassembly for more information.
 
 ### Build
 
-For now the build system has two target flavors. The ``Emscripten/browser``
-target (``--with-emscripten-target=browser``) is optimized for browsers.
-It comes with a reduced and preloaded stdlib without tests and threading
-support. The ``Emscripten/node`` target has threading enabled and can
-access the file system directly.
-
 To cross compile to the ``wasm32-emscripten`` platform you need
 [the Emscripten compiler toolchain](https://emscripten.org/), 
 a Python interpreter, and an installation of Node version 18 or newer. 
Emscripten
diff --git a/Tools/wasm/emscripten/node_pre.js 
b/Tools/wasm/emscripten/node_pre.js
index 3490d3ca591ef6..54b09dc08233f3 100644
--- a/Tools/wasm/emscripten/node_pre.js
+++ b/Tools/wasm/emscripten/node_pre.js
@@ -1,9 +1,15 @@
 // If process is undefined, we're not running in the node runtime let it go I
 // guess?
 if (typeof process !== "undefined") {
-    const nodeVersion = Number(process.versions.node.split('.',1)[0]);
+    const nodeVersion = Number(process.versions.node.split(".", 1)[0]);
     if (nodeVersion < 18) {
-        process.stderr.write(`Node version must be >= 18, got version 
${process.version}\n`);
+        process.stderr.write(
+            `Node version must be >= 18, got version ${process.version}\n`,
+        );
         process.exit(1);
     }
+    Module.preRun = () => {
+        FS.mkdirTree("/lib/");
+        FS.mount(NODEFS, { root: __dirname + "/lib/" }, "/lib/");
+    };
 }
diff --git a/configure b/configure
index b1ced3106618ba..5b44a3d69929a0 100755
--- a/configure
+++ b/configure
@@ -1082,7 +1082,6 @@ with_universal_archs
 with_framework_name
 enable_framework
 with_app_store_compliance
-with_emscripten_target
 enable_wasm_dynamic_linking
 enable_wasm_pthreads
 with_suffix
@@ -1868,8 +1867,6 @@ Optional Packages:
                           Enable any patches required for compiliance with app
                           stores. Optional PATCH-FILE specifies the custom
                           patch to apply.
-  --with-emscripten-target=[browser|node]
-                          Emscripten platform
   --with-suffix=SUFFIX    set executable suffix to SUFFIX (default is empty,
                           yes is mapped to '.exe')
   --without-static-libpython
@@ -7223,48 +7220,6 @@ case $ac_sys_system/$ac_sys_release in #(
      ;;
 esac
 
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 
--with-emscripten-target" >&5
-printf %s "checking for --with-emscripten-target... " >&6; }
-
-# Check whether --with-emscripten-target was given.
-if test ${with_emscripten_target+y}
-then :
-  withval=$with_emscripten_target;
-       if test "x$ac_sys_system" = xEmscripten
-then :
-
-    case $with_emscripten_target in #(
-  browser) :
-    ac_sys_emscripten_target=browser ;; #(
-  node) :
-    ac_sys_emscripten_target=node ;; #(
-        browser-debug) :
-    ac_sys_emscripten_target=browser-debug ;; #(
-  node-debug) :
-    ac_sys_emscripten_target=node-debug ;; #(
-  *) :
-    as_fn_error $? "Invalid argument: --with-emscripten-target=browser|node" 
"$LINENO" 5
-     ;;
-esac
-
-else $as_nop
-
-    as_fn_error $? "--with-emscripten-target only applies to Emscripten" 
"$LINENO" 5
-
-fi
-
-else $as_nop
-
-  if test "x$ac_sys_system" = xEmscripten
-then :
-  ac_sys_emscripten_target=browser
-fi
-
-fi
-
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: 
$ac_sys_emscripten_target" >&5
-printf "%s\n" "$ac_sys_emscripten_target" >&6; }
-
 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 
--enable-wasm-dynamic-linking" >&5
 printf %s "checking for --enable-wasm-dynamic-linking... " >&6; }
 # Check whether --enable-wasm-dynamic-linking was given.
@@ -7334,12 +7289,10 @@ esac
 
 else $as_nop
 
-  case $ac_sys_system/$ac_sys_emscripten_target in #(
-  Emscripten/browser*) :
-    EXEEXT=.js ;; #(
-  Emscripten/node*) :
+  case $ac_sys_system in #(
+  Emscripten) :
     EXEEXT=.js ;; #(
-  WASI/*) :
+  WASI) :
     EXEEXT=.wasm ;; #(
   *) :
     EXEEXT=
@@ -7674,8 +7627,8 @@ printf %s "checking HOSTRUNNER... " >&6; }
 
 if test -z "$HOSTRUNNER"
 then
-  case $ac_sys_system/$ac_sys_emscripten_target in #(
-  Emscripten/node*) :
+  case $ac_sys_system in #(
+  Emscripten) :
 
       if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}node", so it can be a program 
name with args.
@@ -7791,7 +7744,7 @@ then :
   as_fn_append HOSTRUNNER " --experimental-wasm-memory64"
 fi
      ;; #(
-              WASI/*) :
+              WASI) :
     HOSTRUNNER='wasmtime run --wasm max-wasm-stack=16777216 --wasi preview2=n 
--env PYTHONPATH=/$(shell realpath --relative-to $(abs_srcdir) 
$(abs_builddir))/$(shell cat pybuilddir.txt):/Lib --dir $(srcdir)::/' ;; #(
   *) :
     HOSTRUNNER=''
@@ -7807,13 +7760,8 @@ if test -n "$HOSTRUNNER"; then
 fi
 
 # LIBRARY_DEPS, LINK_PYTHON_OBJS and LINK_PYTHON_DEPS variable
-case $ac_sys_system/$ac_sys_emscripten_target in #(
-  Emscripten/browser*) :
-    LIBRARY_DEPS='$(PY3LIBRARY) $(WASM_STDLIB) python.html python.worker.js' 
;; #(
-  *) :
-    LIBRARY_DEPS='$(PY3LIBRARY) $(EXPORTSYMS)'
- ;;
-esac
+LIBRARY_DEPS='$(PY3LIBRARY) $(EXPORTSYMS)'
+
 LINK_PYTHON_DEPS='$(LIBRARY_DEPS)'
 if test "$PY_ENABLE_SHARED" = 1 || test "$enable_framework" ; then
     LIBRARY_DEPS="\$(LDLIBRARY) $LIBRARY_DEPS"
@@ -9500,34 +9448,10 @@ then :
       as_fn_append LINKFORSHARED " -sPROXY_TO_PTHREAD"
 
 fi
-
-    case $ac_sys_emscripten_target in #(
-  browser*) :
-
-        if test "x$ac_sys_emscripten_target" = xbrowser-debug
-then :
-  wasm_debug=yes
-fi
-        as_fn_append LINKFORSHARED " --preload-file=\$(WASM_ASSETS_DIR)"
-        WASM_ASSETS_DIR=".\$(prefix)"
-        WASM_STDLIB="\$(WASM_ASSETS_DIR)/local/lib/python\$(VERSION)/os.py"
-                WASM_LINKFORSHARED_DEBUG="-gsource-map --emit-symbol-map"
-       ;; #(
-  node*) :
-
-        if test "x$ac_sys_emscripten_target" = xnode-debug
-then :
-  wasm_debug=yes
-fi
-        as_fn_append LDFLAGS_NODIST " 
--pre-js=\$(srcdir)/Tools/wasm/emscripten/node_pre.js"
-        as_fn_append LDFLAGS_NODIST " -sALLOW_MEMORY_GROWTH -sNODERAWFS"
-        as_fn_append LINKFORSHARED " -sEXIT_RUNTIME"
-        WASM_LINKFORSHARED_DEBUG="-gseparate-dwarf --emit-symbol-map"
-
-     ;; #(
-  *) :
-     ;;
-esac
+    as_fn_append LDFLAGS_NODIST " -sALLOW_MEMORY_GROWTH"
+        as_fn_append LDFLAGS_NODIST " -sEXIT_RUNTIME"
+    as_fn_append LDFLAGS_NODIST " 
--pre-js=\$(srcdir)/Tools/wasm/emscripten/node_pre.js"
+    WASM_LINKFORSHARED_DEBUG="-gseparate-dwarf --emit-symbol-map"
 
     if test "x$wasm_debug" = xyes
 then :
@@ -29058,15 +28982,7 @@ else $as_nop
 fi
 
 else $as_nop
-
-  case $ac_sys_system/$ac_sys_emscripten_target in #(
-  Emscripten/browser*) :
-    TEST_MODULES=no ;; #(
-  *) :
-    TEST_MODULES=yes
-   ;;
-esac
-
+  TEST_MODULES=yes
 fi
 
 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $TEST_MODULES" >&5
diff --git a/configure.ac b/configure.ac
index 3a55cbc1320393..7904f8990c48ee 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1282,30 +1282,6 @@ AS_CASE([$ac_sys_system/$ac_sys_release],
  ]
 )
 
-AC_MSG_CHECKING([for --with-emscripten-target])
-AC_ARG_WITH([emscripten-target],
-  [AS_HELP_STRING([--with-emscripten-target=@<:@browser|node@:>@], [Emscripten 
platform])],
-[
-       AS_VAR_IF([ac_sys_system], [Emscripten], [
-    AS_CASE([$with_emscripten_target],
-      [browser], [ac_sys_emscripten_target=browser],
-      [node], [ac_sys_emscripten_target=node],
-dnl Debug builds with source map / dwarf symbols. Py_DEBUG builds easily
-dnl run out of stack space. Detached sybmols and map prohibit some
-dnl optimizations and increase file size. Options are undocumented so we
-dnl are free to remove them in the future.
-      [browser-debug], [ac_sys_emscripten_target=browser-debug],
-      [node-debug], [ac_sys_emscripten_target=node-debug],
-      [AC_MSG_ERROR([Invalid argument: --with-emscripten-target=browser|node])]
-    )
-  ], [
-    AC_MSG_ERROR([--with-emscripten-target only applies to Emscripten])
-  ])
-], [
-  AS_VAR_IF([ac_sys_system], [Emscripten], [ac_sys_emscripten_target=browser])
-])
-AC_MSG_RESULT([$ac_sys_emscripten_target])
-
 dnl On Emscripten dlopen() requires -s MAIN_MODULE and -fPIC. The flags
 dnl disables dead code elimination and increases the size of the WASM module
 dnl by about 1.5 to 2MB. MAIN_MODULE defines __wasm_mutable_globals__.
@@ -1350,10 +1326,9 @@ AC_ARG_WITH([suffix],
     [EXEEXT=$with_suffix]
   )
 ], [
-  AS_CASE([$ac_sys_system/$ac_sys_emscripten_target],
-    [Emscripten/browser*], [EXEEXT=.js],
-    [Emscripten/node*], [EXEEXT=.js],
-    [WASI/*], [EXEEXT=.wasm],
+  AS_CASE([$ac_sys_system],
+    [Emscripten], [EXEEXT=.js],
+    [WASI], [EXEEXT=.wasm],
     [EXEEXT=]
   )
 ])
@@ -1638,8 +1613,8 @@ AC_MSG_CHECKING([HOSTRUNNER])
 AC_ARG_VAR([HOSTRUNNER], [Program to run CPython for the host platform])
 if test -z "$HOSTRUNNER"
 then
-  AS_CASE([$ac_sys_system/$ac_sys_emscripten_target],
-    [Emscripten/node*], [
+  AS_CASE([$ac_sys_system],
+    [Emscripten], [
       AC_PATH_TOOL([NODE], [node], [node])
       HOSTRUNNER="$NODE"
       AS_VAR_IF([host_cpu], [wasm64], [AS_VAR_APPEND([HOSTRUNNER], [" 
--experimental-wasm-memory64"])])
@@ -1647,7 +1622,7 @@ then
     dnl TODO: support other WASI runtimes
     dnl wasmtime starts the process with "/" as CWD. For OOT builds add the
     dnl directory containing _sysconfigdata to PYTHONPATH.
-    [WASI/*], [HOSTRUNNER='wasmtime run --wasm max-wasm-stack=16777216 --wasi 
preview2=n --env PYTHONPATH=/$(shell realpath --relative-to $(abs_srcdir) 
$(abs_builddir))/$(shell cat pybuilddir.txt):/Lib --dir $(srcdir)::/'],
+    [WASI], [HOSTRUNNER='wasmtime run --wasm max-wasm-stack=16777216 --wasi 
preview2=n --env PYTHONPATH=/$(shell realpath --relative-to $(abs_srcdir) 
$(abs_builddir))/$(shell cat pybuilddir.txt):/Lib --dir $(srcdir)::/'],
     [HOSTRUNNER='']
   )
 fi
@@ -1660,10 +1635,8 @@ if test -n "$HOSTRUNNER"; then
 fi
 
 # LIBRARY_DEPS, LINK_PYTHON_OBJS and LINK_PYTHON_DEPS variable
-AS_CASE([$ac_sys_system/$ac_sys_emscripten_target],
-  [Emscripten/browser*], [LIBRARY_DEPS='$(PY3LIBRARY) $(WASM_STDLIB) 
python.html python.worker.js'],
-  [LIBRARY_DEPS='$(PY3LIBRARY) $(EXPORTSYMS)']
-)
+LIBRARY_DEPS='$(PY3LIBRARY) $(EXPORTSYMS)'
+
 LINK_PYTHON_DEPS='$(LIBRARY_DEPS)'
 if test "$PY_ENABLE_SHARED" = 1 || test "$enable_framework" ; then
     LIBRARY_DEPS="\$(LDLIBRARY) $LIBRARY_DEPS"
@@ -2365,24 +2338,11 @@ AS_CASE([$ac_sys_system],
       AS_VAR_APPEND([LDFLAGS_NODIST], [" -sUSE_PTHREADS"])
       AS_VAR_APPEND([LINKFORSHARED], [" -sPROXY_TO_PTHREAD"])
     ])
-
-    AS_CASE([$ac_sys_emscripten_target],
-      [browser*], [
-        AS_VAR_IF([ac_sys_emscripten_target], [browser-debug], 
[wasm_debug=yes])
-        AS_VAR_APPEND([LINKFORSHARED], [" --preload-file=\$(WASM_ASSETS_DIR)"])
-        WASM_ASSETS_DIR=".\$(prefix)"
-        WASM_STDLIB="\$(WASM_ASSETS_DIR)/local/lib/python\$(VERSION)/os.py"
-        dnl separate-dwarf does not seem to work in Chrome DevTools Support.
-        WASM_LINKFORSHARED_DEBUG="-gsource-map --emit-symbol-map"
-      ],
-      [node*], [
-        AS_VAR_IF([ac_sys_emscripten_target], [node-debug], [wasm_debug=yes])
-        AS_VAR_APPEND([LDFLAGS_NODIST], [" 
--pre-js=\$(srcdir)/Tools/wasm/emscripten/node_pre.js"])
-        AS_VAR_APPEND([LDFLAGS_NODIST], [" -sALLOW_MEMORY_GROWTH -sNODERAWFS"])
-        AS_VAR_APPEND([LINKFORSHARED], [" -sEXIT_RUNTIME"])
-        WASM_LINKFORSHARED_DEBUG="-gseparate-dwarf --emit-symbol-map"
-      ]
-    )
+    AS_VAR_APPEND([LDFLAGS_NODIST], [" -sALLOW_MEMORY_GROWTH"])
+    dnl not completely sure whether or not we want -sEXIT_RUNTIME, keeping it 
for now.
+    AS_VAR_APPEND([LDFLAGS_NODIST], [" -sEXIT_RUNTIME"])
+    AS_VAR_APPEND([LDFLAGS_NODIST], [" 
--pre-js=\$(srcdir)/Tools/wasm/emscripten/node_pre.js"])
+    WASM_LINKFORSHARED_DEBUG="-gseparate-dwarf --emit-symbol-map"
 
     AS_VAR_IF([wasm_debug], [yes], [
       AS_VAR_APPEND([LDFLAGS_NODIST], [" -sASSERTIONS"])
@@ -7463,12 +7423,7 @@ AC_MSG_CHECKING([for --disable-test-modules])
 AC_ARG_ENABLE([test-modules],
   [AS_HELP_STRING([--disable-test-modules], [don't build nor install test 
modules])], [
   AS_VAR_IF([enable_test_modules], [yes], [TEST_MODULES=yes], 
[TEST_MODULES=no])
-], [
-  AS_CASE([$ac_sys_system/$ac_sys_emscripten_target],
-    [Emscripten/browser*], [TEST_MODULES=no],
-    [TEST_MODULES=yes]
-  )
-])
+], [TEST_MODULES=yes])
 AC_MSG_RESULT([$TEST_MODULES])
 AC_SUBST([TEST_MODULES])
 

_______________________________________________
Python-checkins mailing list -- python-checkins@python.org
To unsubscribe send an email to python-checkins-le...@python.org
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: arch...@mail-archive.com

Reply via email to