2022-03-17 22:48:56 +00:00
|
|
|
export PYVERSION ?= 3.10.2
|
2022-05-29 06:06:51 +00:00
|
|
|
# Note: when updating EMSCRIPTEN_VERSION make sure to update
|
|
|
|
# the version number in the "uname" patch.
|
2022-06-23 22:51:06 +00:00
|
|
|
export PYODIDE_EMSCRIPTEN_VERSION ?= 3.1.14
|
2019-01-10 12:40:01 +00:00
|
|
|
|
2022-03-29 03:07:36 +00:00
|
|
|
export PLATFORM_TRIPLET=wasm32-emscripten
|
2022-05-30 01:59:10 +00:00
|
|
|
export SYSCONFIG_NAME=_sysconfigdata__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
|
|
|
|
SHELL := /bin/bash
|
2018-05-16 17:06:44 +00:00
|
|
|
|
2021-03-26 14:37:59 +00:00
|
|
|
export TOOLSDIR=$(PYODIDE_ROOT)/tools
|
2021-07-06 11:28:39 +00:00
|
|
|
|
|
|
|
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)
|
2021-12-20 19:26:27 +00:00
|
|
|
|
|
|
|
export CPYTHONROOT=$(PYODIDE_ROOT)/cpython
|
|
|
|
export CPYTHONLIB=$(CPYTHONROOT)/installs/python-$(PYVERSION)/lib/python$(PYMAJOR).$(PYMINOR)
|
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)
|
|
|
|
export HOSTINSTALLDIR=$(PYODIDE_ROOT)/packages/.artifacts
|
2022-03-22 05:05:30 +00:00
|
|
|
export HOSTSITEPACKAGES=$(PYODIDE_ROOT)/packages/.artifacts/lib/python$(PYMAJOR).$(PYMINOR)/site-packages
|
2022-05-18 04:14:16 +00:00
|
|
|
export WASM_LIBRARY_DIR=$(PYODIDE_ROOT)/packages/.libs
|
|
|
|
export WASM_PKG_CONFIG_PATH=$(PYODIDE_ROOT)/packages/.libs/lib/pkgconfig
|
2021-12-20 19:26:27 +00:00
|
|
|
|
2021-07-06 11:28:39 +00:00
|
|
|
export PYTHONINCLUDE=$(PYODIDE_ROOT)/cpython/installs/python-$(PYVERSION)/include/python$(PYMAJOR).$(PYMINOR)
|
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
|
|
|
|
2021-12-25 20:08:43 +00:00
|
|
|
# For packages that depend on numpy.
|
|
|
|
# TODO: maybe move this somewhere else?
|
2022-05-12 03:31:16 +00:00
|
|
|
export NUMPY_LIB=$(HOSTSITEPACKAGES)/numpy/
|
2022-04-01 03:40:12 +00:00
|
|
|
|
2021-12-25 20:08:43 +00:00
|
|
|
|
2021-01-01 07:48:28 +00:00
|
|
|
# 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
|
2018-12-25 09:44:09 +00:00
|
|
|
export PYODIDE_PACKAGE_ABI=1
|
2021-03-26 14:37:59 +00:00
|
|
|
|
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-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
|
|
|
|
EXTRA_CFLAGS+=" -DDEBUG_F"
|
|
|
|
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) \
|
2021-03-26 14:37:59 +00:00
|
|
|
-s MODULARIZE=1 \
|
|
|
|
-std=c++14 \
|
|
|
|
-s LZ4=1 \
|
2021-06-26 08:34:31 +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)
|
|
|
|
|
|
|
|
export CXXFLAGS_BASE=
|
|
|
|
|
|
|
|
export SIDE_MODULE_LDFLAGS= $(LDFLAGS_BASE) -s SIDE_MODULE=1
|
2021-11-18 22:37:47 +00:00
|
|
|
export MAIN_MODULE_LDFLAGS= $(LDFLAGS_BASE) \
|
|
|
|
-s MAIN_MODULE=1 \
|
|
|
|
-s EXPORT_NAME="'_createPyodideModule'" \
|
2022-02-19 07:31:19 +00:00
|
|
|
-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 \
|
2022-06-23 14:15:21 +00:00
|
|
|
-s EXPORT_ALL=1 \
|
2022-06-15 00:01:09 +00:00
|
|
|
-s POLYFILL \
|
2022-02-19 07:31:19 +00:00
|
|
|
\
|
2021-07-06 11:28:39 +00:00
|
|
|
-lpython$(PYMAJOR).$(PYMINOR) \
|
2021-06-26 08:34:31 +00:00
|
|
|
-lffi \
|
|
|
|
-lsqlite3 \
|
|
|
|
-lbz2 \
|
|
|
|
-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 \
|
|
|
|
-leventloop.js \
|
2022-02-19 07:31:19 +00:00
|
|
|
\
|
2021-12-05 20:34:09 +00:00
|
|
|
--use-preload-plugins \
|
2021-11-18 22:37:47 +00:00
|
|
|
--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/*" \
|
2022-01-30 19:08:44 +00:00
|
|
|
--exclude-file "*/distutils/*" \
|
2022-04-15 01:04:01 +00:00
|
|
|
--pre-js src/core/pre.js \
|
2022-05-19 18:02:52 +00:00
|
|
|
--pre-js src/js/_pyodide.out.js \
|
|
|
|
--post-js src/core/post.js
|
2021-03-26 14:37:59 +00:00
|
|
|
|
2022-02-19 07:31:19 +00:00
|
|
|
|
2021-03-26 14:37:59 +00:00
|
|
|
export SIDE_MODULE_CXXFLAGS = $(CXXFLAGS_BASE)
|
|
|
|
|
|
|
|
export SIDE_MODULE_CFLAGS= $(CFLAGS_BASE)
|
|
|
|
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 \
|
2022-02-19 07:31: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
|
|
|
|
2022-03-12 06:05:36 +00:00
|
|
|
export STDLIB_MODULE_CFLAGS= $(SIDE_MODULE_CFLAGS) -I Include/ -I .
|
2021-03-26 14:37:59 +00:00
|
|
|
|
2022-06-09 17:57:34 +00:00
|
|
|
# For RUST
|
|
|
|
export CARGO_HOME ?= $(HOME)/.cargo
|
|
|
|
export CARGO_BUILD_TARGET=wasm32-unknown-emscripten
|
2022-06-21 06:21:33 +00:00
|
|
|
export CARGO_TARGET_WASM32_UNKNOWN_EMSCRIPTEN_LINKER=emcc
|
2022-06-09 17:57:34 +00:00
|
|
|
export PYO3_CONFIG_FILE=$(PYODIDE_ROOT)/tools/pyo3_config.ini
|
|
|
|
|
|
|
|
# idealy we could automatically include all SIDE_MODULE_LDFLAGS here
|
|
|
|
export RUSTFLAGS= \
|
|
|
|
-C relocation-model=pic \
|
2022-06-15 14:27:34 +00:00
|
|
|
-C link-arg=-sSIDE_MODULE=2 \
|
2022-06-21 06:21:33 +00:00
|
|
|
-C link-arg=-sWASM_BIGINT \
|
|
|
|
-Z link-native-libraries=no
|
2022-06-09 17:57:34 +00:00
|
|
|
|
2021-03-26 14:37:59 +00:00
|
|
|
.output_vars:
|
|
|
|
set
|