pyodide/numpy/Makefile

241 lines
7.0 KiB
Makefile

PYODIDE_ROOT=$(abspath ..)
include ../Makefile.envs
PYVERSION=3.6.4
PYMINOR=$(basename $(PYVERSION))
NPYVERSION=1.14.1
ROOT=$(abspath .)
HOSTPYTHONINSTALL=$(ROOT)/../cpython/build/$(PYVERSION)/host
HOSTPYTHON=$(HOSTPYTHONINSTALL)/bin/python3$(EXE)
PYTHONINCLUDE=$(ROOT)/../cpython/installs/python-$(PYVERSION)/include/python$(PYMINOR)
HOSTROOT=$(ROOT)/host
HOSTDIR=$(HOSTROOT)/numpy-$(NPYVERSION)
HOSTBUILD=$(HOSTDIR)/build
BUILD=$(ROOT)/build
BUILDCORE=$(BUILD)/numpy/core
BUILDLINALG=$(BUILD)/numpy/linalg
BUILDFFT=$(BUILD)/numpy/fft
BUILDRANDOM=$(BUILD)/numpy/random
ZIPFILE=$(ROOT)/downloads/numpy-$(NPYVERSION).zip
URL=https://pypi.python.org/packages/a3/99/74aa456fc740a7e8f733af4e8302d8e61e123367ec660cd89c53a3cd4d70/numpy-1.14.1.zip
PLATFORMSLUG=$(shell $(HOSTPYTHON) -c "import sysconfig; print(sysconfig.get_platform())")-$(PYMINOR)
INCLUDE=$(HOSTDIR)/numpy/core/include
SRC=$(HOSTDIR)/numpy/core/src
GENINCLUDE=$(HOSTBUILD)/src.$(PLATFORMSLUG)/numpy/core/include
GENSRC=$(HOSTBUILD)/src.$(PLATFORMSLUG)/numpy/core/src
LINALG_SRC=$(HOSTDIR)/numpy/linalg
LINALG_GENSRC=$(HOSTBUILD)/src.$(PLATFORMSLUG)/numpy/linalg
FFT_SRC=$(HOSTDIR)/numpy/fft
RANDOM_SRC=$(HOSTDIR)/numpy/random
CC=emcc
AR=emar
CFLAGS=-O3 -Werror -std=c99 -DNPY_INTERNAL_BUILD=1 -DHAVE_NPY_CONFIG_H=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 -D_LARGEFILE64_SOURCE=1 -I$(ROOT)/config -I$(INCLUDE) -I$(GENINCLUDE)/numpy -I$(INCLUDE)/private -I$(SRC) -I$(SRC)/.. -I$(SRC)/private -I$(SRC)/npymath -I$(SRC)/multiarray -I$(SRC)/umath -I$(SRC)/npysort -I$(PYTHONINCLUDE) -I$(GENSRC)/private -I$(GENSRC)/npymath -I$(GENSRC)/umath
LDFLAGS=\
-Werror \
-s EMULATED_FUNCTION_POINTERS=1 \
-s EMULATE_FUNCTION_POINTER_CASTS=1 \
-s SIDE_MODULE=1 \
-s WASM=1 \
--memory-init-file 0
all: \
$(BUILD)/numpy/__init__.py \
$(BUILDCORE)/multiarray.so \
$(BUILDCORE)/umath.so \
$(BUILDLINALG)/lapack_lite.so \
$(BUILDLINALG)/_umath_linalg.so \
$(BUILDRANDOM)/mtrand.so
clean:
rm -fr $(HOSTROOT)
rm -fr $(BUILD)
$(ZIPFILE):
[ -d $(ROOT)/downloads ] || mkdir $(ROOT)/downloads
wget -q -O $@ $(URL)
md5sum --quiet --check checksums || (rm $@; false)
$(HOSTDIR)/setup.py: $(ZIPFILE)
[ -d $(HOSTROOT) ] || mkdir $(HOSTROOT)
unzip $(ZIPFILE) -d $(HOSTROOT)
touch $(HOSTDIR)/setup.py
$(HOSTBUILD)/lib.$(PLATFORMSLUG)/numpy/__init__.py: $(ROOT)/.patched
( \
cd $(HOSTDIR); \
$(HOSTPYTHON) setup.py build \
)
$(BUILD)/numpy/__init__.py: $(HOSTBUILD)/lib.$(PLATFORMSLUG)/numpy/__init__.py
[ -d $(BUILD) ] || mkdir $(BUILD)
cp -r $(HOSTBUILD)/lib.$(PLATFORMSLUG)/numpy $(BUILD) && \
cd $(BUILD); find . -name "*.so" -type f -delete
$(ROOT)/.patched: $(HOSTDIR)/setup.py
cat patches/*.patch | (cd $(HOSTDIR) ; patch -p1)
touch $@
NPYMATH_SRC=\
$(GENSRC)/npymath/ieee754.bc \
$(GENSRC)/npymath/npy_math_complex.bc \
$(SRC)/npymath/halffloat.bc \
$(SRC)/npymath/npy_math.bc \
NPYSORT_SRC=\
$(GENSRC)/npysort/binsearch.bc \
$(GENSRC)/npysort/heapsort.bc \
$(GENSRC)/npysort/mergesort.bc \
$(GENSRC)/npysort/quicksort.bc \
$(GENSRC)/npysort/selection.bc \
MULTIARRAY_SRC=\
$(GENSRC)/multiarray/arraytypes.bc \
$(GENSRC)/multiarray/einsum.bc \
$(GENSRC)/multiarray/lowlevel_strided_loops.bc \
$(GENSRC)/multiarray/nditer_templ.bc \
$(GENSRC)/multiarray/scalartypes.bc \
$(SRC)/multiarray/alloc.bc \
$(SRC)/multiarray/array_assign.bc \
$(SRC)/multiarray/array_assign_array.bc \
$(SRC)/multiarray/array_assign_scalar.bc \
$(SRC)/multiarray/arrayobject.bc \
$(SRC)/multiarray/buffer.bc \
$(SRC)/multiarray/calculation.bc \
$(SRC)/multiarray/common.bc \
$(SRC)/multiarray/compiled_base.bc \
$(SRC)/multiarray/conversion_utils.bc \
$(SRC)/multiarray/convert.bc \
$(SRC)/multiarray/convert_datatype.bc \
$(SRC)/multiarray/ctors.bc \
$(SRC)/multiarray/datetime.bc \
$(SRC)/multiarray/datetime_busday.bc \
$(SRC)/multiarray/datetime_busdaycal.bc \
$(SRC)/multiarray/datetime_strings.bc \
$(SRC)/multiarray/descriptor.bc \
$(SRC)/multiarray/dragon4.bc \
$(SRC)/multiarray/dtype_transfer.bc \
$(SRC)/multiarray/flagsobject.bc \
$(SRC)/multiarray/getset.bc \
$(SRC)/multiarray/hashdescr.bc \
$(SRC)/multiarray/item_selection.bc \
$(SRC)/multiarray/iterators.bc \
$(SRC)/multiarray/mapping.bc \
$(SRC)/multiarray/methods.bc \
$(SRC)/multiarray/multiarraymodule.bc \
$(SRC)/multiarray/nditer_api.bc \
$(SRC)/multiarray/nditer_constr.bc \
$(SRC)/multiarray/nditer_pywrap.bc \
$(SRC)/multiarray/number.bc \
$(SRC)/multiarray/numpyos.bc \
$(SRC)/multiarray/refcount.bc \
$(SRC)/multiarray/scalarapi.bc \
$(SRC)/multiarray/sequence.bc \
$(SRC)/multiarray/shape.bc \
$(SRC)/multiarray/strfuncs.bc \
$(SRC)/multiarray/temp_elide.bc \
$(SRC)/multiarray/ucsnarrow.bc \
$(SRC)/multiarray/usertypes.bc \
$(SRC)/multiarray/vdot.bc \
$(SRC)/private/mem_overlap.bc \
$(SRC)/private/npy_longdouble.bc \
$(SRC)/private/ufunc_override.bc
UMATH_SRC=\
$(GENSRC)/umath/loops.bc \
$(GENSRC)/umath/scalarmath.bc \
$(SRC)/private/mem_overlap.bc \
$(SRC)/private/npy_longdouble.bc \
$(SRC)/private/ufunc_override.bc \
$(SRC)/umath/extobj.bc \
$(SRC)/umath/override.bc \
$(SRC)/umath/reduction.bc \
$(SRC)/umath/ufunc_object.bc \
$(SRC)/umath/ufunc_type_resolution.bc \
$(SRC)/umath/umathmodule.bc \
LAPACK_BLAS_SRC=\
$(LINALG_SRC)/lapack_lite/python_xerbla.bc \
$(LINALG_SRC)/lapack_lite/f2c_z_lapack.bc \
$(LINALG_SRC)/lapack_lite/f2c_d_lapack.bc \
$(LINALG_SRC)/lapack_lite/f2c_s_lapack.bc \
$(LINALG_SRC)/lapack_lite/f2c_c_lapack.bc \
$(LINALG_SRC)/lapack_lite/f2c_lapack.bc \
$(LINALG_SRC)/lapack_lite/f2c_blas.bc \
$(LINALG_SRC)/lapack_lite/f2c_config.bc \
$(LINALG_SRC)/lapack_lite/f2c.bc
LAPACK_LITE_SRC=\
$(LINALG_SRC)/lapack_litemodule.bc
UMATH_LINALG_SRC=\
$(LINALG_GENSRC)/umath_linalg.bc
FFTPACK_LITE_SRC=\
$(FFT_SRC)/fftpack_litemodule.bc \
$(FFT_SRC)/fftpack.bc
MTRAND_SRC=\
$(RANDOM_SRC)/mtrand/mtrand.bc \
$(RANDOM_SRC)/mtrand/randomkit.bc \
$(RANDOM_SRC)/mtrand/initarray.bc \
$(RANDOM_SRC)/mtrand/distributions.bc
$(BUILDCORE)/multiarray.so: $(MULTIARRAY_SRC) $(NPYMATH_SRC) $(NPYSORT_SRC)
$(CC) $(LDFLAGS) $^ -o $(BUILDCORE)/multiarray.wasm
mv $(BUILDCORE)/multiarray.wasm $(BUILDCORE)/multiarray.so
$(BUILDCORE)/umath.so: $(UMATH_SRC) $(NPYMATH_SRC)
$(CC) $(LDFLAGS) $^ -o $(BUILDCORE)/umath.wasm
mv $(BUILDCORE)/umath.wasm $(BUILDCORE)/umath.so
$(BUILDLINALG)/lapack_lite.so: $(LAPACK_LITE_SRC) $(LAPACK_BLAS_SRC) $(NPYMATH_SRC)
$(CC) $(LDFLAGS) $^ -o $(BUILDLINALG)/lapack_lite.wasm
mv $(BUILDLINALG)/lapack_lite.wasm $(BUILDLINALG)/lapack_lite.so
$(BUILDLINALG)/_umath_linalg.so: $(UMATH_LINALG_SRC) $(LAPACK_BLAS_SRC) $(NPYMATH_SRC)
$(CC) $(LDFLAGS) $^ -o $(BUILDLINALG)/_umath_linalg.wasm
mv $(BUILDLINALG)/_umath_linalg.wasm $(BUILDLINALG)/_umath_linalg.so
$(BUILDFFT)/fftpack_lite.so: $(FFTPACK_LITE_SRC)
$(CC) $(LDFLAGS) $^ -o $(BUILDFFT)/fftpack_lite.wasm
mv $(BUILDFFT)/fftpack_lite.wasm $(BUILDFFT)/fftpack_lite.so
$(BUILDRANDOM)/mtrand.so: $(MTRAND_SRC)
$(CC) $(LDFLAGS) $^ -o $(BUILDRANDOM)/mtrand.wasm
mv $(BUILDRANDOM)/mtrand.wasm $(BUILDRANDOM)/mtrand.so
%.bc: %.c $(BUILD)/numpy/__init__.py
$(CC) $(CFLAGS) -include math.h -c $< -o $@