all:
	make build
	make install

install:
	zip -r9 application_engineering.zip . -x "lib/orc/*" -x "lib/arrow/*"
	mv application_engineering.zip ../../../dist/data/state/plugins/

build:
	make avro_deps
	make parquet_deps
	make arrow_deps
	make orc_deps
	make feather_deps

clean:
	[ ! -d lib ] || rm -rf lib

arrow_deps:
	[ -d lib ] || mkdir lib
	curl -s https://cdn.jsdelivr.net/npm/arrow-wasm@0.0.20/+esm > lib/arrow_wasm.js
	curl -s https://cdn.jsdelivr.net/npm/arrow-wasm/dist/assets/arrow-wasm-43ede98b.wasm > lib/arrow_wasm.wasm
	sed -i -E 's|assets/arrow-wasm-[^\.]+|/plugin/application_engineering/lib/arrow_wasm|g' lib/arrow_wasm.js
	gzip -f -k lib/arrow_wasm.wasm
	make ipc_deps

avro_deps:
	[ -d lib ] || mkdir lib
	curl -s https://cdn.jsdelivr.net/npm/avsc@5.7.7/+esm > lib/avsc.js

parquet_deps:
	[ -d lib ] || mkdir lib
	curl -s https://cdn.jsdelivr.net/npm/parquet-wasm@0.6.0/esm/parquet_wasm_bg.wasm > lib/parquet_wasm_bg.wasm
	curl -s https://cdn.jsdelivr.net/npm/parquet-wasm@0.6.0/esm/+esm > lib/parquet_wasm.js
	gzip -f -k lib/parquet_wasm_bg.wasm
	make ipc_deps

feather_deps:
	[ -d lib ] || mkdir lib
	[ -d lib/arrow ] || { \
		cd lib && git clone --branch apache-arrow-20.0.0 https://github.com/apache/arrow && cd arrow/cpp; \
		emcmake cmake -B build -DCMAKE_BUILD_TYPE=Release -DARROW_BUILD_STATIC=ON -DARROW_BUILD_SHARED=OFF -DARROW_WITH_UTF8PROC=ON -DARROW_WITH_RE2=OFF; \
		emmake make -C build -j 8; \
	}
	em++ -O2 -c loader_feather.cpp -I./lib/arrow/cpp/src/ -I./lib/arrow/cpp/build/src/
	em++ -O2 loader_feather.o -o lib/loader_feather.js -s WASM=1 -s EXPORTED_FUNCTIONS='["_execute"]' -s EXPORTED_RUNTIME_METHODS='["ccall","UTF8ToString","FS"]' -s ALLOW_MEMORY_GROWTH=1 -s MODULARIZE=1 -s EXPORT_ES6=1 -s ASSERTIONS=1 ./lib/arrow/cpp/build/release/libarrow_bundled_dependencies.a ./lib/arrow/cpp/build/release/libarrow.a
	gzip -f -k lib/loader_feather.wasm
	gzip -f -k lib/loader_feather.js

ipc_deps:
	curl -s https://cdn.jsdelivr.net/npm/apache-arrow@19.0.0/+esm > lib/ipc.js
	curl -s https://cdn.jsdelivr.net/npm/tslib@2.8.1/+esm > lib/tslib.js
	curl -s https://cdn.jsdelivr.net/npm/flatbuffers@24.12.23/+esm > lib/flatbuffers.js
	sed -i -E 's|/npm/([^@]+)@[^/]+/\+esm|./\1.js|g' ./lib/ipc.js

orc_deps:
	./loader_orc.sh
	gzip -f -k lib/orc_wasm.wasm
