export PYVERSION ?= 3.10.2 # Note: when updating EMSCRIPTEN_VERSION make sure to update # the version number in the "uname" patch. export PYODIDE_EMSCRIPTEN_VERSION ?= 3.1.14 export PLATFORM_TRIPLET=wasm32-emscripten export SYSCONFIG_NAME=_sysconfigdata__emscripten_$(PLATFORM_TRIPLET) # BASH_ENV tells bash to run pyodide_env.sh on startup, which sets various # environment variables. The next line instructs make to use bash to run each # command. export BASH_ENV := $(PYODIDE_ROOT)/pyodide_env.sh SHELL := /bin/bash export TOOLSDIR=$(PYODIDE_ROOT)/tools version_tuple := $(subst ., ,$(PYVERSION:v%=%)) export PYMAJOR=$(word 1,$(version_tuple)) export PYMINOR=$(word 2,$(version_tuple)) export PYMICRO=$(word 3,$(version_tuple)) export HOSTPYTHONROOT=$(shell python${PYMAJOR}.${PYMINOR} -c "import sys; print(sys.prefix)") export HOSTPYTHON=$(HOSTPYTHONROOT)/bin/python$(PYMAJOR).$(PYMINOR) export CPYTHONROOT=$(PYODIDE_ROOT)/cpython export CPYTHONLIB=$(CPYTHONROOT)/installs/python-$(PYVERSION)/lib/python$(PYMAJOR).$(PYMINOR) export CPYTHONBUILD=$(CPYTHONROOT)/build/Python-$(PYVERSION)/ export TARGETINSTALLDIR=$(PYODIDE_ROOT)/cpython/installs/python-$(PYVERSION) export HOSTINSTALLDIR=$(PYODIDE_ROOT)/packages/.artifacts export HOSTSITEPACKAGES=$(PYODIDE_ROOT)/packages/.artifacts/lib/python$(PYMAJOR).$(PYMINOR)/site-packages export WASM_LIBRARY_DIR=$(PYODIDE_ROOT)/packages/.libs export WASM_PKG_CONFIG_PATH=$(PYODIDE_ROOT)/packages/.libs/lib/pkgconfig export PYTHONINCLUDE=$(PYODIDE_ROOT)/cpython/installs/python-$(PYVERSION)/include/python$(PYMAJOR).$(PYMINOR) # Use env variable if defined, otherwise fallback to './' export PYODIDE_BASE_URL?=./ # For packages that depend on numpy. # TODO: maybe move this somewhere else? export NUMPY_LIB=$(HOSTSITEPACKAGES)/numpy/ # This environment variable is used for packages to detect if they are built # for pyodide during build time export PYODIDE=1 # This is the legacy environment variable used for the aforementioned purpose export PYODIDE_PACKAGE_ABI=1 export DBGFLAGS_NODEBUG=-g0 export DBGFLAGS_WASMDEBUG=-g2 export DBGFLAGS_SOURCEMAPDEBUG=-g3 export DBG_LDFLAGS_SOURCEMAPDEBUG=-gseparate-dwarf export DBGFLAGS=$(DBGFLAGS_NODEBUG) 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 EXTRA_CFLAGS+=" -DDEBUG_F" endif export OPTFLAGS=-O2 export CFLAGS_BASE=\ $(OPTFLAGS) \ $(DBGFLAGS) \ -fPIC \ $(EXTRA_CFLAGS) export LDFLAGS_BASE=\ $(OPTFLAGS) \ $(DBGFLAGS) \ $(DBG_LDFLAGS) \ -s MODULARIZE=1 \ -std=c++14 \ -s LZ4=1 \ -L $(CPYTHONROOT)/installs/python-$(PYVERSION)/lib/ \ -s WASM_BIGINT \ $(EXTRA_LDFLAGS) export CXXFLAGS_BASE= export SIDE_MODULE_LDFLAGS= $(LDFLAGS_BASE) -s SIDE_MODULE=1 export MAIN_MODULE_LDFLAGS= $(LDFLAGS_BASE) \ -s MAIN_MODULE=1 \ -s EXPORT_NAME="'_createPyodideModule'" \ -s EXCEPTION_CATCHING_ALLOWED=['we only want to allow exception handling in side modules'] \ -s DEMANGLE_SUPPORT=1 \ -s USE_FREETYPE=1 \ -s USE_LIBPNG=1 \ -s FORCE_FILESYSTEM=1 \ -s TOTAL_MEMORY=20971520 \ -s ALLOW_MEMORY_GROWTH=1 \ -s EXPORT_ALL=1 \ -s POLYFILL \ \ -lpython$(PYMAJOR).$(PYMINOR) \ -lffi \ -lsqlite3 \ -lbz2 \ -lstdc++ \ -lidbfs.js \ -lnodefs.js \ -lproxyfs.js \ -lworkerfs.js \ -lwebsocket.js \ -leventloop.js \ \ --use-preload-plugins \ --preload-file $(CPYTHONLIB)@/lib/python$(PYMAJOR).$(PYMINOR) \ --preload-file src/py/lib@/lib/python$(PYMAJOR).$(PYMINOR)/\ --exclude-file "*__pycache__*" \ --exclude-file "*/test/*" \ --exclude-file "*/tests/*" \ --exclude-file "*/distutils/*" \ --pre-js src/core/pre.js \ --pre-js src/js/_pyodide.out.js \ --post-js src/core/post.js export SIDE_MODULE_CXXFLAGS = $(CXXFLAGS_BASE) export SIDE_MODULE_CFLAGS= $(CFLAGS_BASE) export MAIN_MODULE_CFLAGS= $(CFLAGS_BASE) \ -Wall \ -Wno-warn-absolute-paths \ -Werror=unused-variable \ -Werror=sometimes-uninitialized \ -Werror=int-conversion \ -Werror=incompatible-pointer-types \ -Werror=unused-result \ -I$(PYTHONINCLUDE) \ -s EXCEPTION_CATCHING_ALLOWED=['we only want to allow exception handling in side modules'] export STDLIB_MODULE_CFLAGS= $(SIDE_MODULE_CFLAGS) -I Include/ -I . # For RUST export CARGO_HOME ?= $(HOME)/.cargo export CARGO_BUILD_TARGET=wasm32-unknown-emscripten export CARGO_TARGET_WASM32_UNKNOWN_EMSCRIPTEN_LINKER=emcc export PYO3_CONFIG_FILE=$(PYODIDE_ROOT)/tools/pyo3_config.ini export RUST_TOOLCHAIN=nightly-2022-06-26 # idealy we could automatically include all SIDE_MODULE_LDFLAGS here export RUSTFLAGS= \ -C link-arg=-sSIDE_MODULE=2 \ -C link-arg=-sWASM_BIGINT \ -Z link-native-libraries=no .output_vars: set