-
Notifications
You must be signed in to change notification settings - Fork 1
/
Makefile
154 lines (132 loc) · 5.69 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
WASI_SDK := $(abspath wasi-sdk/build/install/opt/wasi-sdk/)
WASMTIME := $(abspath wasmtime)
WASM_TOOLS := $(abspath wasm-tools)
WIT_BINDGEN := $(abspath wit-bindgen)
CPYTHON := $(abspath cpython/builddir/wasi/install)
RUNNER := $(abspath runner)
NUMPY := $(abspath numpy)
WASM_TOOLS_CLI := $(WASM_TOOLS)/target/release/wasm-tools
WIT_BINDGEN_CLI := $(WIT_BINDGEN)/target/release/wit-bindgen
RUNNER_CLI := $(RUNNER)/target/release/runner
BUILD_DIR := build
CC := $(WASI_SDK)/bin/clang
LDFLAGS := -shared
CFLAGS := -Wall -Wextra -Werror -Wno-unused-parameter -MD -MP -I$(BUILD_DIR) -I$(CPYTHON)/include/python3.11 -fPIC
WASI_ADAPTER := $(WASMTIME)/target/wasm32-unknown-unknown/release/wasi_snapshot_preview1.wasm
LIBC := \
$(WASI_SDK)/share/wasi-sysroot/lib/wasm32-wasi/libc.so \
$(WASI_SDK)/share/wasi-sysroot/lib/wasm32-wasi/libwasi-emulated-mman.so \
$(WASI_SDK)/share/wasi-sysroot/lib/wasm32-wasi/libwasi-emulated-process-clocks.so \
$(WASI_SDK)/share/wasi-sysroot/lib/wasm32-wasi/libwasi-emulated-getpid.so \
$(WASI_SDK)/share/wasi-sysroot/lib/wasm32-wasi/libwasi-emulated-signal.so
LIBCXX := $(WASI_SDK)/share/wasi-sysroot/lib/wasm32-wasi/libc++.so
LIBCXXABI := $(WASI_SDK)/share/wasi-sysroot/lib/wasm32-wasi/libc++abi.so
CPYTHON_ARCHIVES := \
$(CPYTHON)/lib/libpython3.11.a \
$(CPYTHON)/../Modules/_decimal/libmpdec/libmpdec.a \
$(CPYTHON)/../Modules/expat/libexpat.a
NUMPY_LIBRARIES := \
$(BUILD_DIR)/numpy/core/_struct_ufunc_tests.cpython-311-wasm32-wasi.so \
$(BUILD_DIR)/numpy/core/_rational_tests.cpython-311-wasm32-wasi.so \
$(BUILD_DIR)/numpy/core/_operand_flag_tests.cpython-311-wasm32-wasi.so \
$(BUILD_DIR)/numpy/core/_umath_tests.cpython-311-wasm32-wasi.so \
$(BUILD_DIR)/numpy/core/_multiarray_tests.cpython-311-wasm32-wasi.so \
$(BUILD_DIR)/numpy/core/_multiarray_umath.cpython-311-wasm32-wasi.so \
$(BUILD_DIR)/numpy/core/_simd.cpython-311-wasm32-wasi.so \
$(BUILD_DIR)/numpy/linalg/lapack_lite.cpython-311-wasm32-wasi.so \
$(BUILD_DIR)/numpy/linalg/_umath_linalg.cpython-311-wasm32-wasi.so \
$(BUILD_DIR)/numpy/fft/_pocketfft_internal.cpython-311-wasm32-wasi.so \
$(BUILD_DIR)/numpy/random/_common.cpython-311-wasm32-wasi.so \
$(BUILD_DIR)/numpy/random/_philox.cpython-311-wasm32-wasi.so \
$(BUILD_DIR)/numpy/random/_pcg64.cpython-311-wasm32-wasi.so \
$(BUILD_DIR)/numpy/random/_mt19937.cpython-311-wasm32-wasi.so \
$(BUILD_DIR)/numpy/random/_generator.cpython-311-wasm32-wasi.so \
$(BUILD_DIR)/numpy/random/bit_generator.cpython-311-wasm32-wasi.so \
$(BUILD_DIR)/numpy/random/mtrand.cpython-311-wasm32-wasi.so \
$(BUILD_DIR)/numpy/random/_sfc64.cpython-311-wasm32-wasi.so \
$(BUILD_DIR)/numpy/random/_bounded_integers.cpython-311-wasm32-wasi.so
.PHONY: test
test: $(BUILD_DIR)/bar.wasm $(RUNNER_CLI)
$(RUNNER_CLI) \
--env PYTHONPATH=/python:/build \
--env PYTHONHOME=/python \
--mapdir /python::$(CPYTHON)/lib/python3.11 \
--mapdir /build::$(abspath $(BUILD_DIR)) \
$<
$(BUILD_DIR)/bar.wasm: $(WASM_TOOLS_CLI)
$(BUILD_DIR)/bar.wasm: \
$(BUILD_DIR)/libbar.so \
$(BUILD_DIR)/libfoo.so \
$(BUILD_DIR)/libpython3.11.so \
$(LIBC) \
$(LIBCXX) \
$(LIBCXXABI) \
$(NUMPY_LIBRARIES) \
$(WASI_ADAPTER)
$(WASM_TOOLS_CLI) component link \
--adapt wasi_snapshot_preview1=$(WASI_ADAPTER) \
--dl-openable $(BUILD_DIR)/libfoo.so \
$(BUILD_DIR)/libbar.so \
$(BUILD_DIR)/libpython3.11.so \
$(LIBC) \
$(LIBCXX) \
$(LIBCXXABI) \
$(shell echo $(NUMPY_LIBRARIES) | \
sed 's_$(BUILD_DIR)/\([^ ]*\)_--dl-openable /build/\1=$(BUILD_DIR)/\1_g') \
-o $@
$(BUILD_DIR)/libbar.so: $(BUILD_DIR)/bar.o $(BUILD_DIR)/bar_component_type.o $(BUILD_DIR)/bar_impl.o
$(CC) $(LDFLAGS) -o $@ $^
$(BUILD_DIR)/libfoo.so: $(BUILD_DIR)/foo.o
$(CC) $(LDFLAGS) -o $@ $^
$(BUILD_DIR)/libpython3.11.so: $(CPYTHON_ARCHIVES)
$(CC) $(LDFLAGS) -o $@ \
-Wl,--whole-archive $(CPYTHON)/lib/libpython3.11.a -Wl,--no-whole-archive \
$(CPYTHON)/../Modules/_decimal/libmpdec/libmpdec.a \
$(CPYTHON)/../Modules/expat/libexpat.a
$(CPYTHON)/../../build/libpython3.11.a:
@mkdir -p cpython/builddir/build
(cd cpython/builddir/build && ../../configure --prefix=$$(pwd)/install && make)
$(CPYTHON)/lib/libpython3.11.a: $(CPYTHON)/../../build/libpython3.11.a $(CC)
@mkdir -p cpython/builddir/wasi
(cd cpython/builddir/wasi && \
WASI_SDK_PATH=$(WASI_SDK) \
CONFIG_SITE=../../Tools/wasm/config.site-wasm32-wasi \
CFLAGS=-fPIC \
../../Tools/wasm/wasi-env \
../../configure \
-C \
--host=wasm32-unknown-wasi \
--build=$$(../../config.guess) \
--with-build-python=$$(if [ -e $$(pwd)/../build/python.exe ]; \
then echo $$(pwd)/../build/python.exe; \
else echo $$(pwd)/../build/python; \
fi) \
--prefix=$$(pwd)/install \
--enable-wasm-dynamic-linking \
--disable-test-modules && \
make install)
$(BUILD_DIR)/bar.c: $(CPYTHON_ARCHIVES) $(WIT_BINDGEN_CLI)
$(BUILD_DIR)/bar.c $(BUILD_DIR)/bar.h $(BUILD_DIR)/bar_component_type.o: test.wit
@mkdir -p "$(@D)"
$(WIT_BINDGEN_CLI) c --out-dir "$(@D)" $<
$(BUILD_DIR)/bar.o $(BUILD_DIR)/bar_impl.o $(BUILD_DIR)/foo.o: $(CC)
$(BUILD_DIR)/%.o: %.c
@mkdir -p "$(@D)"
$(CC) $(CFLAGS) -o $@ -c $<
$(WASI_ADAPTER):
cargo build --target wasm32-unknown-unknown \
--manifest-path $(WASMTIME)/crates/wasi-preview1-component-adapter/Cargo.toml --release
$(WASM_TOOLS_CLI):
cargo build --release --manifest-path $(WASM_TOOLS)/Cargo.toml
$(WIT_BINDGEN_CLI):
cargo build --release --manifest-path $(WIT_BINDGEN)/Cargo.toml
$(RUNNER_CLI):
cargo build --release --manifest-path $(RUNNER)/Cargo.toml
$(LIBC) $(LIBCXX) $(LIBCXXABI) $(CC): wasi-sdk/build/wasi-libc.BUILT wasi-sdk/build/libcxx.BUILT
wasi-sdk/build/wasi-libc.BUILT wasi-sdk/build/libcxx.BUILT:
(cd wasi-sdk && make build/wasi-libc.BUILT build/libcxx.BUILT)
$(NUMPY_LIBRARIES):
bash build-numpy.sh
.PHONY: clean
clean:
rm -rf $(BUILD_DIR)