mirror of https://github.com/python/cpython
gh-101538: Add experimental wasi-threads build (#101537)
Co-authored-by: Brett Cannon <brett@python.org> Co-authored-by: Erlend E. Aasland <erlend.aasland@protonmail.com>
This commit is contained in:
parent
13237a2da8
commit
d8f87cdf94
|
@ -0,0 +1 @@
|
||||||
|
Add experimental wasi-threads support. Patch by Takashi Yamamoto.
|
|
@ -356,7 +356,15 @@ PyThread_exit_thread(void)
|
||||||
{
|
{
|
||||||
if (!initialized)
|
if (!initialized)
|
||||||
exit(0);
|
exit(0);
|
||||||
|
#if defined(__wasi__)
|
||||||
|
/*
|
||||||
|
* wasi-threads doesn't have pthread_exit right now
|
||||||
|
* cf. https://github.com/WebAssembly/wasi-threads/issues/7
|
||||||
|
*/
|
||||||
|
abort();
|
||||||
|
#else
|
||||||
pthread_exit(0);
|
pthread_exit(0);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_SEMAPHORES
|
#ifdef USE_SEMAPHORES
|
||||||
|
|
|
@ -480,7 +480,6 @@ class BuildProfile:
|
||||||
cmd.append(f"--{opt}-wasm-dynamic-linking")
|
cmd.append(f"--{opt}-wasm-dynamic-linking")
|
||||||
|
|
||||||
if self.pthreads is not None:
|
if self.pthreads is not None:
|
||||||
assert self.host.is_emscripten
|
|
||||||
opt = "enable" if self.pthreads else "disable"
|
opt = "enable" if self.pthreads else "disable"
|
||||||
cmd.append(f"--{opt}-wasm-pthreads")
|
cmd.append(f"--{opt}-wasm-pthreads")
|
||||||
|
|
||||||
|
@ -745,6 +744,13 @@ _profiles = [
|
||||||
support_level=SupportLevel.supported,
|
support_level=SupportLevel.supported,
|
||||||
host=Host.wasm32_wasi,
|
host=Host.wasm32_wasi,
|
||||||
),
|
),
|
||||||
|
# wasm32-wasi-threads
|
||||||
|
BuildProfile(
|
||||||
|
"wasi-threads",
|
||||||
|
support_level=SupportLevel.experimental,
|
||||||
|
host=Host.wasm32_wasi,
|
||||||
|
pthreads=True,
|
||||||
|
),
|
||||||
# no SDK available yet
|
# no SDK available yet
|
||||||
# BuildProfile(
|
# BuildProfile(
|
||||||
# "wasm64-wasi",
|
# "wasm64-wasi",
|
||||||
|
|
|
@ -6874,7 +6874,11 @@ cat > conftest.c <<EOF
|
||||||
# if defined(__EMSCRIPTEN__)
|
# if defined(__EMSCRIPTEN__)
|
||||||
wasm32-emscripten
|
wasm32-emscripten
|
||||||
# elif defined(__wasi__)
|
# elif defined(__wasi__)
|
||||||
|
# if defined(_REENTRANT)
|
||||||
|
wasm32-wasi-threads
|
||||||
|
# else
|
||||||
wasm32-wasi
|
wasm32-wasi
|
||||||
|
# endif
|
||||||
# else
|
# else
|
||||||
# error unknown wasm32 platform
|
# error unknown wasm32 platform
|
||||||
# endif
|
# endif
|
||||||
|
@ -7160,7 +7164,7 @@ then :
|
||||||
Emscripten) :
|
Emscripten) :
|
||||||
;; #(
|
;; #(
|
||||||
WASI) :
|
WASI) :
|
||||||
as_fn_error $? "WASI threading is not implemented yet." "$LINENO" 5 ;; #(
|
;; #(
|
||||||
*) :
|
*) :
|
||||||
as_fn_error $? "--enable-wasm-pthreads only applies to Emscripten and WASI" "$LINENO" 5
|
as_fn_error $? "--enable-wasm-pthreads only applies to Emscripten and WASI" "$LINENO" 5
|
||||||
;;
|
;;
|
||||||
|
@ -9394,6 +9398,21 @@ printf "%s\n" "#define _WASI_EMULATED_PROCESS_CLOCKS 1" >>confdefs.h
|
||||||
LIBS="$LIBS -lwasi-emulated-signal -lwasi-emulated-getpid -lwasi-emulated-process-clocks"
|
LIBS="$LIBS -lwasi-emulated-signal -lwasi-emulated-getpid -lwasi-emulated-process-clocks"
|
||||||
echo "#define _WASI_EMULATED_SIGNAL 1" >> confdefs.h
|
echo "#define _WASI_EMULATED_SIGNAL 1" >> confdefs.h
|
||||||
|
|
||||||
|
if test "x$enable_wasm_pthreads" = xyes
|
||||||
|
then :
|
||||||
|
|
||||||
|
# Note: update CFLAGS because ac_compile/ac_link needs this too.
|
||||||
|
# without this, configure fails to find pthread_create, sem_init,
|
||||||
|
# etc because they are only available in the sysroot for
|
||||||
|
# wasm32-wasi-threads.
|
||||||
|
as_fn_append CFLAGS " -target wasm32-wasi-threads -pthread"
|
||||||
|
as_fn_append CFLAGS_NODIST " -target wasm32-wasi-threads -pthread"
|
||||||
|
as_fn_append LDFLAGS_NODIST " -target wasm32-wasi-threads -pthread"
|
||||||
|
as_fn_append LDFLAGS_NODIST " -Wl,--import-memory"
|
||||||
|
as_fn_append LDFLAGS_NODIST " -Wl,--max-memory=10485760"
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
as_fn_append LDFLAGS_NODIST " -z stack-size=524288 -Wl,--stack-first -Wl,--initial-memory=10485760"
|
as_fn_append LDFLAGS_NODIST " -z stack-size=524288 -Wl,--stack-first -Wl,--initial-memory=10485760"
|
||||||
|
|
||||||
;; #(
|
;; #(
|
||||||
|
|
18
configure.ac
18
configure.ac
|
@ -1079,7 +1079,11 @@ cat > conftest.c <<EOF
|
||||||
# if defined(__EMSCRIPTEN__)
|
# if defined(__EMSCRIPTEN__)
|
||||||
wasm32-emscripten
|
wasm32-emscripten
|
||||||
# elif defined(__wasi__)
|
# elif defined(__wasi__)
|
||||||
|
# if defined(_REENTRANT)
|
||||||
|
wasm32-wasi-threads
|
||||||
|
# else
|
||||||
wasm32-wasi
|
wasm32-wasi
|
||||||
|
# endif
|
||||||
# else
|
# else
|
||||||
# error unknown wasm32 platform
|
# error unknown wasm32 platform
|
||||||
# endif
|
# endif
|
||||||
|
@ -1272,7 +1276,7 @@ AC_ARG_ENABLE([wasm-pthreads],
|
||||||
[
|
[
|
||||||
AS_CASE([$ac_sys_system],
|
AS_CASE([$ac_sys_system],
|
||||||
[Emscripten], [],
|
[Emscripten], [],
|
||||||
[WASI], [AC_MSG_ERROR([WASI threading is not implemented yet.])],
|
[WASI], [],
|
||||||
[AC_MSG_ERROR([--enable-wasm-pthreads only applies to Emscripten and WASI])]
|
[AC_MSG_ERROR([--enable-wasm-pthreads only applies to Emscripten and WASI])]
|
||||||
)
|
)
|
||||||
], [
|
], [
|
||||||
|
@ -2309,6 +2313,18 @@ AS_CASE([$ac_sys_system],
|
||||||
LIBS="$LIBS -lwasi-emulated-signal -lwasi-emulated-getpid -lwasi-emulated-process-clocks"
|
LIBS="$LIBS -lwasi-emulated-signal -lwasi-emulated-getpid -lwasi-emulated-process-clocks"
|
||||||
echo "#define _WASI_EMULATED_SIGNAL 1" >> confdefs.h
|
echo "#define _WASI_EMULATED_SIGNAL 1" >> confdefs.h
|
||||||
|
|
||||||
|
AS_VAR_IF([enable_wasm_pthreads], [yes], [
|
||||||
|
# Note: update CFLAGS because ac_compile/ac_link needs this too.
|
||||||
|
# without this, configure fails to find pthread_create, sem_init,
|
||||||
|
# etc because they are only available in the sysroot for
|
||||||
|
# wasm32-wasi-threads.
|
||||||
|
AS_VAR_APPEND([CFLAGS], [" -target wasm32-wasi-threads -pthread"])
|
||||||
|
AS_VAR_APPEND([CFLAGS_NODIST], [" -target wasm32-wasi-threads -pthread"])
|
||||||
|
AS_VAR_APPEND([LDFLAGS_NODIST], [" -target wasm32-wasi-threads -pthread"])
|
||||||
|
AS_VAR_APPEND([LDFLAGS_NODIST], [" -Wl,--import-memory"])
|
||||||
|
AS_VAR_APPEND([LDFLAGS_NODIST], [" -Wl,--max-memory=10485760"])
|
||||||
|
])
|
||||||
|
|
||||||
dnl increase initial memory and stack size, move stack first
|
dnl increase initial memory and stack size, move stack first
|
||||||
dnl https://github.com/WebAssembly/wasi-libc/issues/233
|
dnl https://github.com/WebAssembly/wasi-libc/issues/233
|
||||||
AS_VAR_APPEND([LDFLAGS_NODIST], [" -z stack-size=524288 -Wl,--stack-first -Wl,--initial-memory=10485760"])
|
AS_VAR_APPEND([LDFLAGS_NODIST], [" -z stack-size=524288 -Wl,--stack-first -Wl,--initial-memory=10485760"])
|
||||||
|
|
Loading…
Reference in New Issue