2018-03-30 17:08:06 +00:00
|
|
|
PYODIDE_ROOT=$(abspath ..)
|
|
|
|
include ../Makefile.envs
|
|
|
|
|
2018-02-27 22:57:22 +00:00
|
|
|
ROOT=$(abspath .)
|
|
|
|
|
2021-03-26 14:37:59 +00:00
|
|
|
PYTHON_CFLAGS=$(CFLAGS_BASE)
|
|
|
|
|
2022-07-01 18:20:45 +00:00
|
|
|
BUILD=$(CPYTHONROOT)/build/Python-$(PYVERSION)
|
|
|
|
INSTALL=$(CPYTHONINSTALL)
|
2018-02-27 22:57:22 +00:00
|
|
|
TARBALL=$(ROOT)/downloads/Python-$(PYVERSION).tgz
|
|
|
|
URL=https://www.python.org/ftp/python/$(PYVERSION)/Python-$(PYVERSION).tgz
|
2021-07-06 11:28:39 +00:00
|
|
|
LIB=libpython$(PYMAJOR).$(PYMINOR).a
|
2018-02-27 22:57:22 +00:00
|
|
|
|
2022-05-08 00:56:59 +00:00
|
|
|
SQLITETARBALL=$(ROOT)/downloads/sqlite-autoconf-3380500.tar.gz
|
|
|
|
SQLITEBUILD=$(ROOT)/build/sqlite-autoconf-3380500
|
|
|
|
SQLITEURL=https://sqlite.org/2022/sqlite-autoconf-3380500.tar.gz
|
2019-03-26 12:44:21 +00:00
|
|
|
|
2021-06-26 08:34:31 +00:00
|
|
|
FFIBUILD=$(ROOT)/build/libffi
|
|
|
|
LIBFFIREPO=https://github.com/hoodmane/libffi-emscripten
|
2022-06-23 19:05:40 +00:00
|
|
|
LIBFFI_TAG=2022-06-23
|
2018-07-18 13:26:18 +00:00
|
|
|
|
2021-06-26 08:34:31 +00:00
|
|
|
all: $(INSTALL)/lib/$(LIB) $(INSTALL)/lib/libffi.a
|
2018-02-27 22:57:22 +00:00
|
|
|
|
|
|
|
|
2021-01-10 17:19:34 +00:00
|
|
|
$(INSTALL)/lib/$(LIB): $(BUILD)/$(LIB) remove_modules.txt
|
2018-02-27 22:57:22 +00:00
|
|
|
( \
|
|
|
|
cd $(BUILD); \
|
|
|
|
sed -i -e 's/libinstall:.*/libinstall:/' Makefile; \
|
2018-03-20 22:58:59 +00:00
|
|
|
touch $(BUILD)/$(LIB) ; \
|
2020-12-07 23:19:16 +00:00
|
|
|
emmake make PYTHON_FOR_BUILD=$(HOSTPYTHON) CROSS_COMPILE=yes inclinstall libinstall $(LIB) -j $${PYODIDE_JOBS:-3} && \
|
2021-01-05 13:14:55 +00:00
|
|
|
cp $(LIB) $(INSTALL)/lib/ \
|
2018-02-27 22:57:22 +00:00
|
|
|
)
|
2021-01-05 13:14:55 +00:00
|
|
|
# Generate sysconfigdata. It outputs into a subfolder of build/, and
|
|
|
|
# the subfolder is written to pybuilddir.txt.
|
2021-07-06 11:28:39 +00:00
|
|
|
_PYTHON_SYSCONFIGDATA_NAME=$(SYSCONFIG_NAME) _PYTHON_PROJECT_BASE=$(BUILD) $(HOSTPYTHON) -m sysconfig --generate-posix-vars
|
2022-05-30 01:59:10 +00:00
|
|
|
|
|
|
|
$(eval PYBUILDDIR=`cat pybuilddir.txt`)
|
|
|
|
PYTHONPATH=$(PYBUILDDIR) python adjust_sysconfig.py
|
|
|
|
cp $(PYBUILDDIR)/$(SYSCONFIG_NAME).py $(INSTALL)/lib/python$(PYMAJOR).$(PYMINOR)/
|
2022-07-01 18:20:45 +00:00
|
|
|
mkdir -p $(SYSCONFIGDATA_DIR)
|
|
|
|
cp $(PYBUILDDIR)/$(SYSCONFIG_NAME).py $(SYSCONFIGDATA_DIR)
|
2021-07-06 11:28:39 +00:00
|
|
|
cd $(INSTALL)/lib/python$(PYMAJOR).$(PYMINOR)/ && rm -rf `cat $(ROOT)/remove_modules.txt`
|
2022-05-30 01:59:10 +00:00
|
|
|
rm -rf $(PYBUILDDIR)
|
|
|
|
rm pybuilddir.txt
|
2018-02-27 22:57:22 +00:00
|
|
|
|
|
|
|
|
|
|
|
clean:
|
2021-11-16 19:22:50 +00:00
|
|
|
-rm -fr $(ROOT)/build
|
|
|
|
-rm -fr $(ROOT)/installs
|
|
|
|
|
|
|
|
clean-all: clean
|
|
|
|
-rm -fr $(ROOT)/downloads
|
2018-02-27 22:57:22 +00:00
|
|
|
|
2018-05-16 17:06:44 +00:00
|
|
|
|
2018-02-27 22:57:22 +00:00
|
|
|
$(TARBALL):
|
|
|
|
[ -d $(ROOT)/downloads ] || mkdir $(ROOT)/downloads
|
|
|
|
wget -q -O $@ $(URL)
|
2022-03-17 22:48:56 +00:00
|
|
|
shasum --algorithm 256 --check checksums --quiet || (rm $@; false)
|
2018-02-27 22:57:22 +00:00
|
|
|
|
|
|
|
|
2019-03-26 12:44:21 +00:00
|
|
|
$(SQLITETARBALL):
|
|
|
|
[ -d $(ROOT)/downloads ] || mkdir $(ROOT)/downloads
|
|
|
|
wget -q -O $@ $(SQLITEURL)
|
|
|
|
|
|
|
|
|
2018-02-27 22:57:22 +00:00
|
|
|
|
|
|
|
$(BUILD)/.patched: $(TARBALL)
|
|
|
|
[ -d $(BUILD) ] || (mkdir -p $(dir $(BUILD)); tar -C $(dir $(BUILD)) -xf $(TARBALL))
|
|
|
|
cat patches/*.patch | (cd $(BUILD) ; patch -p1)
|
|
|
|
touch $@
|
|
|
|
|
|
|
|
|
2021-06-26 08:34:31 +00:00
|
|
|
$(INSTALL)/lib/libsqlite3.a: $(SQLITETARBALL)
|
2019-03-26 12:44:21 +00:00
|
|
|
[ -d $(ROOT)/build ] || (mkdir $(ROOT)/build)
|
|
|
|
tar -C $(ROOT)/build/ -xf $(SQLITETARBALL)
|
2021-01-01 09:45:44 +00:00
|
|
|
# sqlite fails to detect that popen is not available. We have to set it
|
|
|
|
# as a CPPFLAG
|
2019-03-26 12:44:21 +00:00
|
|
|
( \
|
|
|
|
cd $(SQLITEBUILD); \
|
2021-03-26 14:37:59 +00:00
|
|
|
emconfigure ./configure CFLAGS="$(PYTHON_CFLAGS)" CPPFLAGS="-DSQLITE_OMIT_POPEN"; \
|
2020-06-28 13:51:46 +00:00
|
|
|
emmake make -j $${PYODIDE_JOBS:-3}; \
|
2019-03-26 12:44:21 +00:00
|
|
|
)
|
2021-06-26 08:34:31 +00:00
|
|
|
mkdir -p $(INSTALL)/lib/
|
|
|
|
cp $(SQLITEBUILD)/.libs/libsqlite3.a $(INSTALL)/lib/libsqlite3.a
|
2019-03-26 12:44:21 +00:00
|
|
|
|
|
|
|
|
2021-06-26 08:34:31 +00:00
|
|
|
$(INSTALL)/lib/libffi.a :
|
|
|
|
rm -rf $(FFIBUILD)
|
2022-06-08 19:37:24 +00:00
|
|
|
git clone $(LIBFFIREPO) --depth 1 --branch $(LIBFFI_TAG) $(FFIBUILD)
|
|
|
|
. $(PYODIDE_ROOT)/emsdk/emsdk/emsdk_env.sh && cd $(FFIBUILD) && ./build.sh && make install
|
2021-06-26 08:34:31 +00:00
|
|
|
cp $(FFIBUILD)/target/include/*.h $(BUILD)/Include/
|
|
|
|
mkdir -p $(INSTALL)/lib
|
|
|
|
cp $(FFIBUILD)/target/lib/libffi.a $(INSTALL)/lib/
|
|
|
|
|
2022-07-28 08:17:58 +00:00
|
|
|
$(BUILD)/Makefile: $(BUILD)/.patched $(INSTALL)/lib/libsqlite3.a
|
2021-07-01 17:47:44 +00:00
|
|
|
# --enable-big-digits=30 :
|
|
|
|
# Python integers have "digits" of size 15 by default on systems with 32
|
|
|
|
# bit pointers and size 30 on systems with 16 bit pointers. Python uses
|
|
|
|
# "digits" of size 15 by default on systems with 32 bit pointers and size
|
|
|
|
# 30 on systems with 16 bit pointers. WASM has 32 bit pointers so Python
|
|
|
|
# will default to the size 15 digits but WASM has native 64 bit arithmetic
|
|
|
|
# so it is more efficient to use 30 bit digits.
|
2018-02-27 22:57:22 +00:00
|
|
|
cp config.site $(BUILD)/
|
|
|
|
( \
|
|
|
|
cd $(BUILD); \
|
2021-02-06 07:58:12 +00:00
|
|
|
CONFIG_SITE=./config.site READELF=true emconfigure \
|
2019-03-26 12:44:21 +00:00
|
|
|
./configure \
|
2021-03-26 14:37:59 +00:00
|
|
|
CFLAGS="${PYTHON_CFLAGS}" \
|
2022-07-28 08:17:58 +00:00
|
|
|
CPPFLAGS="-I$(SQLITEBUILD) -sUSE_BZIP2=1 -sUSE_ZLIB=1" \
|
2022-03-29 03:07:36 +00:00
|
|
|
PLATFORM_TRIPLET="$(PLATFORM_TRIPLET)" \
|
2019-08-22 11:43:18 +00:00
|
|
|
--without-pymalloc \
|
|
|
|
--disable-shared \
|
|
|
|
--disable-ipv6 \
|
2021-07-01 17:47:44 +00:00
|
|
|
--enable-big-digits=30 \
|
2021-06-26 08:34:31 +00:00
|
|
|
--enable-optimizations \
|
2021-02-06 07:58:12 +00:00
|
|
|
--host=wasm32-unknown-emscripten\
|
2019-08-22 11:43:18 +00:00
|
|
|
--build=$(shell $(BUILD)/config.guess) \
|
2021-07-01 17:47:44 +00:00
|
|
|
--prefix=$(INSTALL) \
|
2018-02-27 22:57:22 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
|
2021-06-26 08:34:31 +00:00
|
|
|
$(BUILD)/Modules/Setup.local : Setup.local
|
|
|
|
cp Setup.local $(BUILD)/Modules/
|
|
|
|
|
|
|
|
$(BUILD)/$(LIB): $(BUILD)/Makefile $(BUILD)/pyconfig.h $(BUILD)/Modules/Setup.local $(INSTALL)/lib/libffi.a
|
2018-02-27 22:57:22 +00:00
|
|
|
cp Setup.local $(BUILD)/Modules/
|
2018-09-25 20:53:40 +00:00
|
|
|
cat pyconfig.undefs.h >> $(BUILD)/pyconfig.h
|
2018-02-27 22:57:22 +00:00
|
|
|
( \
|
|
|
|
cd $(BUILD); \
|
2020-12-07 23:19:16 +00:00
|
|
|
emmake make CROSS_COMPILE=yes $(LIB) -j $${PYODIDE_JOBS:-3} \
|
2018-02-27 22:57:22 +00:00
|
|
|
)
|
2018-03-20 22:58:59 +00:00
|
|
|
touch $(BUILD)/$(LIB)
|