Skip to content

Commit f546cdf

Browse files
committed
+3.14
1 parent 328a3d4 commit f546cdf

File tree

9 files changed

+88
-44
lines changed

9 files changed

+88
-44
lines changed

.github/workflows/ci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ jobs:
66
build:
77
runs-on: ubuntu-22.04
88
env:
9-
SDK_VERSION: 3.1.61.7bi
9+
SDK_VERSION: 3.1.61.12bi
1010
SYS_PYTHON: /usr/bin/python3
1111
SDKROOT: /opt/python-wasm-sdk
1212
PACKAGES: emsdk pygame
1313
BUILD_STATIC: emsdk
1414
STATIC: false
15-
BUILDS: 3.12 3.13
15+
BUILDS: 3.12 3.13 3.14
1616
CYTHON: Cython-3.0.11-py2.py3-none-any.whl
1717
LD_VENDOR: -sUSE_GLFW=3
1818
LOPTS: -Os -g0

packages.d/hpy/hpy.sh

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -22,34 +22,35 @@ echo "
2222
mkdir -p external
2323
pushd $(pwd)/external
2424

25-
if [ -d hpy ]
26-
then
27-
pushd $(pwd)/hpy
28-
git restore .
29-
git pull
30-
else
31-
git clone --no-tags --depth 1 --single-branch --branch master https://github.com/hpyproject/hpy
25+
if [ -d hpy ]
26+
then
27+
pushd $(pwd)/hpy
28+
git restore .
29+
git pull
30+
else
31+
git clone --no-tags --depth 1 --single-branch --branch master https://github.com/hpyproject/hpy
3232

33-
#wget https://github.com/hpyproject/hpy/archive/refs/tags/0.9.0rc2.tar.gz
34-
#tar xvfz 0.9.0rc2.tar.gz
33+
#wget https://github.com/hpyproject/hpy/archive/refs/tags/0.9.0rc2.tar.gz
34+
#tar xvfz 0.9.0rc2.tar.gz
3535

36-
pushd $(pwd)/hpy
37-
# git submodule update --init --recursive
36+
pushd $(pwd)/hpy
37+
# git submodule update --init --recursive
3838

39-
echo "
39+
echo "
4040
4141
42-
applying patches
42+
applying patches
4343
4444
45-
"
45+
"
4646

47-
# cat ${ROOT}/packages.d/hpy/patches.emsdk/*.diff | patch -p1
48-
fi
47+
# cat ${ROOT}/packages.d/hpy/patches.emsdk/*.diff | patch -p1
48+
fi
4949

50-
wget -O- https://patch-diff.githubusercontent.com/raw/pmp-p/hpy-pygbag/pull/1.diff | patch -p1
50+
wget -O- https://patch-diff.githubusercontent.com/raw/pmp-p/hpy-pygbag/pull/1.diff | patch -p1
51+
52+
popd
5153

52-
popd
5354
popd
5455

5556

@@ -72,7 +73,7 @@ then
7273
fi
7374

7475

75-
$SDKROOT/emsdk/upstream/emscripten/emar rcs /opt/python-wasm-sdk/prebuilt/emsdk/libhpy${PYMAJOR}.${PYMINOR}.a \
76+
$SDKROOT/emsdk/upstream/emscripten/emar rcs ${SDKROOT}/prebuilt/emsdk/libhpy${PYMAJOR}.${PYMINOR}.a \
7677
build/temp.wasm32-${WASM_FLAVOUR}-emscripten-cpython-${PYMAJOR}${PYMINOR}${PYTHR}/hpy/debug/src/_debugmod.o \
7778
build/temp.wasm32-${WASM_FLAVOUR}-emscripten-cpython-${PYMAJOR}${PYMINOR}${PYTHR}/hpy/debug/src/autogen_debug_wrappers.o \
7879
build/temp.wasm32-${WASM_FLAVOUR}-emscripten-cpython-${PYMAJOR}${PYMINOR}${PYTHR}/hpy/debug/src/debug_ctx.o \

packages.d/pygame/pygame.sh

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ then
4242
================= forcing Cython git instead of release ${CYTHON} =================
4343
4444
"
45-
# /opt/python-wasm-sdk/python3-wasm -m pip install --upgrade --force --no-build-isolation git+${CYTHON_URL}
45+
# ${SDKROOT}/python3-wasm -m pip install --upgrade --force --no-build-isolation git+${CYTHON_URL}
4646
NO_CYTHON_COMPILE=true $HPY -m pip install --upgrade --force --no-build-isolation ${CYTHON_URL}
4747
else
4848
echo "
@@ -52,7 +52,7 @@ then
5252
"
5353
pushd build
5454
wget -q -c https://github.com/cython/cython/releases/download/3.0.11-1/${CYTHON}
55-
/opt/python-wasm-sdk/python3-wasm -m pip install --upgrade --force $CYTHON
55+
${SDKROOT}/python3-wasm -m pip install --upgrade --force $CYTHON
5656
$HPY -m pip install --upgrade --force $CYTHON
5757
popd
5858
fi
@@ -270,7 +270,7 @@ export COPTS="-O2 -g3 -DBUILD_STATIC"
270270
export CC=emcc
271271

272272
# remove SDL1 for good
273-
rm -rf /opt/python-wasm-sdk/emsdk/upstream/emscripten/cache/sysroot/include/SDL
273+
rm -rf ${SDKROOT}/emsdk/upstream/emscripten/cache/sysroot/include/SDL
274274

275275
[ -d build ] && rm -r build
276276
[ -f Setup ] && rm Setup
@@ -313,7 +313,7 @@ TAG=${PYMAJOR}${PYMINOR}
313313
echo "FIXME: build wheel"
314314

315315
SDL2="-sUSE_ZLIB=1 -sUSE_BZIP2=1 -sUSE_LIBPNG"
316-
SDL2="$SDL2 -sUSE_FREETYPE -sUSE_SDL=2 -sUSE_SDL_MIXER=2 -lSDL2 -L/opt/python-wasm-sdk/devices/emsdk/usr/lib"
316+
SDL2="$SDL2 -sUSE_FREETYPE -sUSE_SDL=2 -sUSE_SDL_MIXER=2 -lSDL2 -L${SDKROOT}/devices/emsdk/usr/lib"
317317

318318
if echo $EMFLAVOUR|grep -q ^4
319319
then

scripts/build-loader.sh

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -285,9 +285,16 @@ then
285285

286286
LINKPYTHON="python mpdec expat"
287287

288-
if [ ${PYMINOR} -ge 11 ]
288+
289+
if [ ${PYMINOR} -ge 14 ]
289290
then
290-
LINKPYTHON="Hacl_Hash_SHA2 Hacl_Hash_Blake2 $LINKPYTHON"
291+
LDFLAGS="$LDFLAGS -lzstd"
292+
LINKPYTHON="_hacl $LINKPYTHON"
293+
else
294+
if [ ${PYMINOR} -ge 11 ]
295+
then
296+
LINKPYTHON="Hacl_Hash_SHA2 Hacl_Hash_Blake2 $LINKPYTHON"
297+
fi
291298
fi
292299

293300

scripts/build-rootfs.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ try:
4343
# bokeh
4444
sys.stdout.reconfigure(encoding='unicode-escape')
4545
sys.stdout.reconfigure(encoding='utf-16')
46+
sys.stdout.reconfigure(encoding='utf_16-be')
4647
sys.stdout.reconfigure(encoding='utf-8')
4748
except:
4849
pass

src/pygbag/support/cross/__EMSCRIPTEN__.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,8 @@ def shed_yield():
7474
from embed_browser import fetch, console, prompt, alert, confirm
7575

7676
# broad pyodide compat
77-
sys.modules["js"] = this # instead of just sys.modules["embed_browser"]
77+
# sys.modules["js"] = this # instead of just sys.modules["embed_browser"]
78+
sys.modules["js"] = window.globalThis
7879

7980
Object_type = type(Object())
8081
except Exception as e:
@@ -167,9 +168,11 @@ def js(code, delay=0):
167168
if is_browser:
168169
# implement "js.new"
169170

170-
def new(oclass, *argv):
171-
from embed_browser import Reflect, Array
172-
171+
def new(oclass, *argv, **kw):
172+
from embed_browser import Reflect, Array, window
173+
if kw:
174+
argv = list(argv)
175+
argv.append(window.JSON.parse(json.dumps(kw)))
173176
return Reflect.construct(oclass, Array(*argv))
174177

175178
# dom events

src/pygbag/support/pyodide.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import platform
88

9-
sys.modules["js"] = platform
9+
sys.modules["js"] = platform.window.globalThis
1010
import js
1111

1212

@@ -40,7 +40,7 @@ class m_pyodide:
4040

4141

4242
sys.modules["pyodide"] = m_pyodide()
43-
sys.modules["pyodide.ffi"] = sys.modules["pyodide"] = ffi
43+
sys.modules["pyodide.ffi"] = sys.modules["pyodide"].ffi
4444
del m_pyodide
4545
import pyodide
4646

support/__EMSCRIPTEN__.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1136,6 +1136,9 @@ main(int argc, char **argv)
11361136
#include MAIN_TEST_FILE
11371137

11381138

1139+
// https://stackoverflow.com/questions/7931182/reliably-detect-if-the-script-is-executing-in-a-web-worker
1140+
// self.document === undefined ?
1141+
11391142
EM_ASM({
11401143
globalThis.FD_BUFFER_MAX = $0;
11411144
globalThis.shm_stdin = $1;
@@ -1268,7 +1271,7 @@ EM_ASM({
12681271

12691272
#if defined(WAPY)
12701273
int main(int argc, char **argv) {
1271-
#if MICROPY_PY_THREAD
1274+
#if MICROPY_PY_THREAD
12721275
mp_thread_init();
12731276
#endif
12741277
// We should capture stack top ASAP after start, and it should be

support/__EMSCRIPTEN__.embed/browsermodule.c

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -331,8 +331,7 @@ Object_str(Object *self) {
331331
/**
332332
* Implements len().
333333
*/
334-
static Py_ssize_t
335-
Object_length(Object *self) {
334+
static int get_len(Object *self) {
336335
int len = EM_ASM_INT({
337336
var val = Emval.toValue($0);
338337
if (val[Symbol.iterator] && val.length !== undefined) {
@@ -342,7 +341,12 @@ Object_length(Object *self) {
342341
return -1;
343342
}
344343
}, self->handle);
344+
return len;
345+
}
345346

347+
static Py_ssize_t
348+
Object_length(Object *self) {
349+
int len = get_len(self);
346350
if (len >= 0) {
347351
return len;
348352
}
@@ -517,6 +521,18 @@ Object_dir(Object *self, PyObject *noarg) {
517521
}, self->handle));
518522
}
519523

524+
/**
525+
* Implements truth test.
526+
*/
527+
static int
528+
Object_as_bool(PyObject *self) {
529+
return (int)(get_len((Object*)self) != 0 );
530+
}
531+
532+
static PyNumberMethods Object_as_number = {
533+
.nb_bool = Object_as_bool,
534+
};
535+
520536
static PyAsyncMethods Object_async = {
521537
.am_await = (unaryfunc)Object_await,
522538
};
@@ -551,6 +567,7 @@ static PyTypeObject Object_Type = {
551567
.tp_iter = (getiterfunc)Object_iter,
552568
.tp_iternext = (iternextfunc)Object_next,
553569
.tp_methods = Object_methods,
570+
.tp_as_number = &Object_as_number,
554571
.tp_new = PyType_GenericNew,
555572
};
556573

@@ -920,6 +937,9 @@ static PyObject *emval_to_py(EM_VAL handle) {
920937
switch (type) {
921938
case 1:
922939
exc_type = PyExc_TypeError;
940+
puts("==== please use new() not .new() ======");
941+
puts(message);
942+
puts("=======================================");
923943
break;
924944

925945
case 2:
@@ -1182,20 +1202,29 @@ PyObject *PyInit_browser() {
11821202
PyUnstable_Module_SetGIL(module, Py_MOD_GIL_NOT_USED);
11831203
#endif
11841204

1185-
Object *window = PyObject_New(Object, &Object_Type);
1186-
if (PyModule_AddObject(module, "window", (PyObject *)window) < 0) {
1187-
Py_DECREF(&window);
1205+
Object *globalThis = PyObject_New(Object, &Object_Type);
1206+
if (PyModule_AddObject(module, "globalThis", (PyObject *)globalThis) < 0) {
1207+
Py_DECREF(&globalThis);
11881208
Py_DECREF(module);
11891209
return NULL;
11901210
}
11911211

1212+
11921213
Object *console = PyObject_New(Object, &Object_Type);
11931214
if (PyModule_AddObject(module, "console", (PyObject *)console) < 0) {
11941215
Py_DECREF(&console);
11951216
Py_DECREF(module);
11961217
return NULL;
11971218
}
11981219

1220+
// worker ?
1221+
Object *window = PyObject_New(Object, &Object_Type);
1222+
if (PyModule_AddObject(module, "window", (PyObject *)window) < 0) {
1223+
Py_DECREF(&window);
1224+
Py_DECREF(module);
1225+
return NULL;
1226+
}
1227+
11991228
Object *document = PyObject_New(Object, &Object_Type);
12001229
if (PyModule_AddObject(module, "document", (PyObject *)document) < 0) {
12011230
Py_DECREF(&document);
@@ -1204,12 +1233,12 @@ PyObject *PyInit_browser() {
12041233
}
12051234

12061235
EM_ASM({
1207-
setValue($0, Emval.toHandle(window), '*');
1236+
setValue($0, Emval.toHandle(globalThis), '*');
12081237
setValue($1, Emval.toHandle(console), '*');
1209-
setValue($2, Emval.toHandle(document), '*');
1210-
1211-
window.__py_alive = new Set();
1212-
}, &window->handle, &console->handle, &document->handle);
1238+
setValue($2, Emval.toHandle(window), '*');
1239+
setValue($3, Emval.toHandle(document), '*');
1240+
globalThis.__py_alive = new Set();
1241+
}, &globalThis->handle, &console->handle, &window->handle, &document->handle);
12131242

12141243
return module;
12151244
}

0 commit comments

Comments
 (0)