2024-02-04 03:25:45 +00:00
|
|
|
export PYVERSION ?= 3.12.1
|
2024-05-25 12:06:50 +00:00
|
|
|
export PYODIDE_EMSCRIPTEN_VERSION ?= 3.1.58
|
2024-05-27 18:27:46 +00:00
|
|
|
export PYODIDE_VERSION ?= 0.27.0.dev0
|
2024-05-21 16:30:01 +00:00
|
|
|
export PYODIDE_ABI_VERSION ?= 2024_0
|
2019-01-10 12:40:01 +00:00
|
|
|
|
2024-02-04 03:25:45 +00:00
|
|
|
export PYTHON_ARCHIVE_SHA256=d01ec6a33bc10009b09c17da95cc2759af5a580a7316b3a446eb4190e13f97b2
|
|
|
|
|
2024-07-26 14:51:57 +00:00
|
|
|
# Update the following variables when you want to update the version of the
|
|
|
|
# pyodide-build version used in the build process. If you want to make breaking
|
|
|
|
# changes in pyodide-build, it is also useful to change the repository URL
|
|
|
|
# to your fork to test the changes are working as expected.
|
|
|
|
|
|
|
|
# v0.27.3
|
|
|
|
export PYODIDE_BUILD_COMMIT=fac0109aa2acf14469320b049d710dd42639bf94
|
|
|
|
export PYODIDE_BUILD_REPO=https://github.com/pyodide/pyodide-build
|
|
|
|
|
2023-06-29 00:01:15 +00:00
|
|
|
ifdef CPYTHON_DEBUG
|
|
|
|
export CPYTHON_ABI_FLAGS=d
|
|
|
|
endif
|
|
|
|
|
2022-03-29 03:07:36 +00:00
|
|
|
export PLATFORM_TRIPLET=wasm32-emscripten
|
2023-06-29 00:01:15 +00:00
|
|
|
export SYSCONFIG_NAME=_sysconfigdata_$(CPYTHON_ABI_FLAGS)_emscripten_$(PLATFORM_TRIPLET)
|
2022-03-29 03:07:36 +00:00
|
|
|
|
2022-03-08 05:51:20 +00:00
|
|
|
# BASH_ENV tells bash to run pyodide_env.sh on startup, which sets various
|
2021-01-03 11:25:14 +00:00
|
|
|
# environment variables. The next line instructs make to use bash to run each
|
|
|
|
# command.
|
|
|
|
export BASH_ENV := $(PYODIDE_ROOT)/pyodide_env.sh
|
2024-02-04 17:54:17 +00:00
|
|
|
SHELL := /usr/bin/env bash
|
2018-05-16 17:06:44 +00:00
|
|
|
|
2023-06-10 23:35:40 +00:00
|
|
|
version_tmp_1 := $(subst ., ,$(PYVERSION:v%=%))
|
|
|
|
# Handle alpha, beta, and release candidate versions
|
|
|
|
version_tmp_2 := $(subst a, ,$(version_tmp_1))
|
|
|
|
version_tmp_3 := $(subst b, ,$(version_tmp_2))
|
|
|
|
version_tuple := $(subst r, ,$(version_tmp_3))
|
|
|
|
|
2021-07-06 11:28:39 +00:00
|
|
|
export PYMAJOR=$(word 1,$(version_tuple))
|
|
|
|
export PYMINOR=$(word 2,$(version_tuple))
|
|
|
|
export PYMICRO=$(word 3,$(version_tuple))
|
2023-06-10 23:35:40 +00:00
|
|
|
export PYSTABLEVERSION=$(PYMAJOR).$(PYMINOR).$(PYMICRO)
|
2021-07-06 11:28:39 +00:00
|
|
|
|
|
|
|
export HOSTPYTHONROOT=$(shell python${PYMAJOR}.${PYMINOR} -c "import sys; print(sys.prefix)")
|
|
|
|
export HOSTPYTHON=$(HOSTPYTHONROOT)/bin/python$(PYMAJOR).$(PYMINOR)
|
2021-12-20 19:26:27 +00:00
|
|
|
|
2023-06-12 22:16:55 +00:00
|
|
|
export PYTHON_ARCHIVE_URL=https://www.python.org/ftp/python/$(PYSTABLEVERSION)/Python-$(PYVERSION).tgz
|
2023-06-05 10:48:48 +00:00
|
|
|
|
2021-12-20 19:26:27 +00:00
|
|
|
export CPYTHONROOT=$(PYODIDE_ROOT)/cpython
|
2022-07-01 18:20:45 +00:00
|
|
|
export CPYTHONINSTALL=$(CPYTHONROOT)/installs/python-$(PYVERSION)
|
|
|
|
export CPYTHONLIB=$(CPYTHONINSTALL)/lib/python$(PYMAJOR).$(PYMINOR)
|
|
|
|
export SYSCONFIGDATA_DIR=$(CPYTHONINSTALL)/sysconfigdata/
|
2022-03-17 22:48:56 +00:00
|
|
|
export CPYTHONBUILD=$(CPYTHONROOT)/build/Python-$(PYVERSION)/
|
2021-12-20 19:26:27 +00:00
|
|
|
|
|
|
|
export TARGETINSTALLDIR=$(PYODIDE_ROOT)/cpython/installs/python-$(PYVERSION)
|
|
|
|
|
2023-06-29 00:01:15 +00:00
|
|
|
export PYTHONINCLUDE=$(PYODIDE_ROOT)/cpython/installs/python-$(PYVERSION)/include/python$(PYMAJOR).$(PYMINOR)$(CPYTHON_ABI_FLAGS)
|
2018-05-16 17:06:44 +00:00
|
|
|
|
2020-12-18 12:23:45 +00:00
|
|
|
# Use env variable if defined, otherwise fallback to './'
|
|
|
|
export PYODIDE_BASE_URL?=./
|
2021-01-01 07:48:28 +00:00
|
|
|
|
2023-03-21 08:11:47 +00:00
|
|
|
# The compression level used for zip files and wheels. When distributing via a
|
|
|
|
# CDN it's more efficient to keep this value to 0, and let the CDN perform the
|
|
|
|
# Brotli compression.
|
|
|
|
export PYODIDE_ZIP_COMPRESSION_LEVEL?=6
|
|
|
|
|
2023-07-19 06:47:05 +00:00
|
|
|
export PIP_CONSTRAINT=$(PYODIDE_ROOT)/tools/constraints.txt
|
|
|
|
|
2024-05-01 10:20:07 +00:00
|
|
|
# List of modules to exclude from the zipped standard library
|
|
|
|
export PYZIP_EXCLUDE_FILES=\
|
|
|
|
ensurepip/ \
|
|
|
|
venv/ \
|
|
|
|
lib2to3/ \
|
|
|
|
_osx_support.py \
|
|
|
|
_aix_support.py \
|
|
|
|
curses/ \
|
|
|
|
dbm/ \
|
|
|
|
idlelib/ \
|
|
|
|
tkinter/ \
|
|
|
|
turtle.py \
|
|
|
|
turtledemo/ \
|
|
|
|
test/ \
|
|
|
|
sqlite3/ \
|
|
|
|
ssl.py \
|
|
|
|
lzma.py \
|
|
|
|
_pydecimal.py \
|
|
|
|
pydoc_data/
|
|
|
|
|
|
|
|
# List of modules that we replace with a stub in the zipped standard library
|
|
|
|
export PYZIP_JS_STUBS=\
|
|
|
|
webbrowser.py
|
|
|
|
|
2024-07-04 08:40:24 +00:00
|
|
|
export PYCOMPILE_EXCLUDE_FILES=\
|
|
|
|
RobotRaconteur- \
|
|
|
|
astropy- \
|
|
|
|
opencv_python- \
|
|
|
|
test-
|
|
|
|
|
2022-04-11 23:02:11 +00:00
|
|
|
export DBGFLAGS_NODEBUG=-g0
|
|
|
|
export DBGFLAGS_WASMDEBUG=-g2
|
|
|
|
export DBGFLAGS_SOURCEMAPDEBUG=-g3
|
|
|
|
export DBG_LDFLAGS_SOURCEMAPDEBUG=-gseparate-dwarf
|
|
|
|
|
|
|
|
export DBGFLAGS=$(DBGFLAGS_NODEBUG)
|
|
|
|
|
2022-09-21 05:20:08 +00:00
|
|
|
ifdef PYODIDE_DEBUG
|
|
|
|
export PYODIDE_SYMBOLS=1
|
|
|
|
export PYODIDE_DEBUG_JS=1
|
|
|
|
export PYODIDE_ASSERTIONS=1
|
|
|
|
endif
|
|
|
|
|
2022-05-31 00:16:55 +00:00
|
|
|
ifdef PYODIDE_SOURCEMAP
|
|
|
|
# Debug with source maps (less useful than WASMDEBUG but easier if it helps)
|
|
|
|
export DBGFLAGS=$(DBGFLAGS_SOURCEMAPDEBUG)
|
|
|
|
export DBG_LDFLAGS=$(DBG_LDFLAGS_SOURCEMAPDEBUG)
|
|
|
|
else
|
|
|
|
ifdef PYODIDE_SYMBOLS
|
|
|
|
# Include debug symbols but no source maps (most useful)
|
|
|
|
export DBGFLAGS=$(DBGFLAGS_WASMDEBUG)
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifdef PYODIDE_ASSERTIONS
|
2023-06-06 10:40:27 +00:00
|
|
|
EXTRA_CFLAGS+= -DDEBUG_F
|
2022-05-31 00:16:55 +00:00
|
|
|
endif
|
2022-04-11 23:02:11 +00:00
|
|
|
|
2021-12-09 18:31:21 +00:00
|
|
|
|
2021-03-26 14:37:59 +00:00
|
|
|
export OPTFLAGS=-O2
|
|
|
|
export CFLAGS_BASE=\
|
|
|
|
$(OPTFLAGS) \
|
2021-12-09 18:31:21 +00:00
|
|
|
$(DBGFLAGS) \
|
2021-03-26 14:37:59 +00:00
|
|
|
-fPIC \
|
|
|
|
$(EXTRA_CFLAGS)
|
|
|
|
|
2022-05-18 04:14:16 +00:00
|
|
|
|
2021-03-26 14:37:59 +00:00
|
|
|
export LDFLAGS_BASE=\
|
|
|
|
$(OPTFLAGS) \
|
2021-12-09 18:31:21 +00:00
|
|
|
$(DBGFLAGS) \
|
2022-04-11 23:02:11 +00:00
|
|
|
$(DBG_LDFLAGS) \
|
2023-06-23 15:28:44 +00:00
|
|
|
-L$(CPYTHONROOT)/installs/python-$(PYVERSION)/lib/ \
|
2022-06-02 17:09:54 +00:00
|
|
|
-s WASM_BIGINT \
|
2021-03-26 14:37:59 +00:00
|
|
|
$(EXTRA_LDFLAGS)
|
|
|
|
|
2023-09-09 17:16:08 +00:00
|
|
|
export CXXFLAGS_BASE=
|
2021-03-26 14:37:59 +00:00
|
|
|
|
2021-11-18 22:37:47 +00:00
|
|
|
export MAIN_MODULE_LDFLAGS= $(LDFLAGS_BASE) \
|
|
|
|
-s MAIN_MODULE=1 \
|
2023-06-02 04:14:13 +00:00
|
|
|
-s MODULARIZE=1 \
|
|
|
|
-s LZ4=1 \
|
2021-11-18 22:37:47 +00:00
|
|
|
-s EXPORT_NAME="'_createPyodideModule'" \
|
2022-08-25 21:41:39 +00:00
|
|
|
-s EXPORT_EXCEPTION_HANDLING_HELPERS \
|
2022-02-19 07:31:19 +00:00
|
|
|
-s EXCEPTION_CATCHING_ALLOWED=['we only want to allow exception handling in side modules'] \
|
2023-10-04 21:38:39 +00:00
|
|
|
-sEXPORTED_RUNTIME_METHODS='wasmTable,ERRNO_CODES' \
|
2022-07-28 08:17:58 +00:00
|
|
|
-s USE_ZLIB \
|
|
|
|
-s USE_BZIP2 \
|
2022-02-19 07:31:19 +00:00
|
|
|
-s FORCE_FILESYSTEM=1 \
|
|
|
|
-s TOTAL_MEMORY=20971520 \
|
|
|
|
-s ALLOW_MEMORY_GROWTH=1 \
|
2022-06-23 14:15:21 +00:00
|
|
|
-s EXPORT_ALL=1 \
|
2022-12-03 00:12:42 +00:00
|
|
|
-s STACK_SIZE=5MB \
|
2023-01-30 01:43:34 +00:00
|
|
|
-s AUTO_JS_LIBRARIES=0 \
|
|
|
|
-s AUTO_NATIVE_LIBRARIES=0 \
|
2023-02-04 13:50:14 +00:00
|
|
|
-s NODEJS_CATCH_EXIT=0 \
|
|
|
|
-s NODEJS_CATCH_REJECTION=0 \
|
2024-05-07 07:59:57 +00:00
|
|
|
-s EXPORTED_FUNCTIONS='$(EXPORTS)'\
|
2022-02-19 07:31:19 +00:00
|
|
|
\
|
2023-06-29 00:01:15 +00:00
|
|
|
-lpython$(PYMAJOR).$(PYMINOR)$(CPYTHON_ABI_FLAGS) \
|
2021-06-26 08:34:31 +00:00
|
|
|
-lffi \
|
|
|
|
-lstdc++ \
|
2021-11-18 22:37:47 +00:00
|
|
|
-lidbfs.js \
|
|
|
|
-lnodefs.js \
|
|
|
|
-lproxyfs.js \
|
|
|
|
-lworkerfs.js \
|
2022-06-27 04:17:58 +00:00
|
|
|
-lwebsocket.js \
|
2023-03-30 08:18:31 +00:00
|
|
|
-leventloop.js \
|
2023-09-24 01:21:19 +00:00
|
|
|
-lhiwire \
|
2023-03-30 08:18:31 +00:00
|
|
|
\
|
|
|
|
-lGL \
|
|
|
|
-legl.js \
|
|
|
|
-lwebgl.js \
|
2024-06-20 12:48:37 +00:00
|
|
|
-lhtml5.js \
|
2023-03-30 08:18:31 +00:00
|
|
|
-lhtml5_webgl.js \
|
2024-03-29 08:55:21 +00:00
|
|
|
-lsdl.js \
|
2023-03-30 08:18:31 +00:00
|
|
|
-sGL_WORKAROUND_SAFARI_GETCONTEXT_BUG=0
|
2021-03-26 14:37:59 +00:00
|
|
|
|
2024-05-10 22:15:17 +00:00
|
|
|
EXPORTS=_main \
|
|
|
|
,_free \
|
|
|
|
\
|
|
|
|
,_hiwire_new \
|
|
|
|
,_hiwire_intern \
|
|
|
|
,_hiwire_num_refs \
|
|
|
|
,_hiwire_get \
|
|
|
|
,_hiwire_incref \
|
|
|
|
,_hiwire_decref \
|
|
|
|
,_hiwire_pop \
|
|
|
|
,__hiwire_get \
|
|
|
|
,__hiwire_set \
|
|
|
|
,__hiwire_immortal_get \
|
|
|
|
,__hiwire_immortal_add \
|
|
|
|
,_jslib_init \
|
|
|
|
,_init_pyodide_proxy \
|
|
|
|
\
|
|
|
|
,_PyBuffer_Release \
|
|
|
|
,_Py_DecRef \
|
|
|
|
,_PyDict_New \
|
|
|
|
,_PyDict_SetItem \
|
|
|
|
,__PyErr_CheckSignals \
|
|
|
|
,_PyErr_CheckSignals \
|
|
|
|
,_PyErr_Clear \
|
|
|
|
,_PyErr_Occurred \
|
|
|
|
,_PyErr_Print \
|
|
|
|
,_PyErr_SetRaisedException \
|
|
|
|
,_PyErr_SetString \
|
|
|
|
,_PyEval_SaveThread \
|
|
|
|
,_PyEval_RestoreThread \
|
|
|
|
,_PyFloat_FromDouble \
|
|
|
|
,_PyGILState_Check \
|
|
|
|
,_Py_IncRef \
|
|
|
|
,_PyList_New \
|
|
|
|
,_PyList_SetItem \
|
|
|
|
,__PyLong_FromByteArray \
|
|
|
|
,_PyLong_FromDouble \
|
|
|
|
,_PyMem_Free \
|
|
|
|
,_PyObject_GetAIter \
|
|
|
|
,_PyObject_GetIter \
|
|
|
|
,_PyObject_Size \
|
|
|
|
,_PyRun_SimpleString \
|
|
|
|
,_PySet_Add \
|
|
|
|
,_PySet_New \
|
|
|
|
,__PyTraceback_Add \
|
|
|
|
,_PyUnicode_Data \
|
|
|
|
,_PyUnicode_New \
|
2022-02-19 07:31:19 +00:00
|
|
|
|
2023-10-14 19:13:27 +00:00
|
|
|
|
2024-05-07 07:59:57 +00:00
|
|
|
ifeq ($(DISABLE_DYLINK), 1)
|
2023-10-14 19:13:27 +00:00
|
|
|
export MAIN_MODULE_LDFLAGS= $(LDFLAGS_BASE) \
|
|
|
|
-s MODULARIZE=1 \
|
|
|
|
-s EXPORT_NAME="'_createPyodideModule'" \
|
2023-10-19 22:10:10 +00:00
|
|
|
-sEXPORTED_RUNTIME_METHODS='wasmTable,ERRNO_CODES,FS,ENV,stringToNewUTF8,addFunction' \
|
2023-10-14 19:13:27 +00:00
|
|
|
-s LZ4=1 \
|
|
|
|
-s USE_ZLIB \
|
|
|
|
-s USE_BZIP2 \
|
|
|
|
-s FORCE_FILESYSTEM=1 \
|
|
|
|
-s TOTAL_MEMORY=20971520 \
|
|
|
|
-s ALLOW_MEMORY_GROWTH=1 \
|
|
|
|
-s STACK_SIZE=5MB \
|
2023-10-19 22:10:10 +00:00
|
|
|
-s ALLOW_TABLE_GROWTH \
|
2023-10-14 19:13:27 +00:00
|
|
|
-sWASM_BIGINT \
|
|
|
|
-sEXPORTED_FUNCTIONS='$(EXPORTS)'\
|
|
|
|
-lpython$(PYMAJOR).$(PYMINOR)$(CPYTHON_ABI_FLAGS) \
|
|
|
|
-lffi \
|
|
|
|
-lhiwire \
|
|
|
|
-lidbfs.js \
|
|
|
|
-lnodefs.js \
|
|
|
|
|
|
|
|
endif
|
|
|
|
|
2021-03-26 14:37:59 +00:00
|
|
|
export MAIN_MODULE_CFLAGS= $(CFLAGS_BASE) \
|
2021-12-05 20:34:09 +00:00
|
|
|
-Wall \
|
|
|
|
-Wno-warn-absolute-paths \
|
|
|
|
-Werror=unused-variable \
|
|
|
|
-Werror=sometimes-uninitialized \
|
|
|
|
-Werror=int-conversion \
|
|
|
|
-Werror=incompatible-pointer-types \
|
|
|
|
-Werror=unused-result \
|
2023-09-24 01:21:19 +00:00
|
|
|
-mreference-types \
|
2022-02-19 07:31:19 +00:00
|
|
|
-I$(PYTHONINCLUDE) \
|
2023-09-24 01:21:19 +00:00
|
|
|
-I$(PYTHONINCLUDE)/.. \
|
2022-03-05 20:32:04 +00:00
|
|
|
-s EXCEPTION_CATCHING_ALLOWED=['we only want to allow exception handling in side modules']
|
2021-03-26 14:37:59 +00:00
|
|
|
|
|
|
|
.output_vars:
|
|
|
|
set
|