all:
	make build
	make install

install:
	zip -r application_dev.zip . -x "lib/pe-parse/*" -x "lib/libpcap/*"
	mv application_dev.zip ../../../dist/data/state/plugins/

build:
	make deps_a
	make deps_o
	make deps_so
	make deps_dll
	make deps_dylib
	make deps_pcap
	make deps_sqlite
	make deps_archive

deps_a:
	[ -d lib ] || mkdir lib
	emcc -O2 -c loader_a.c
	emcc --no-entry loader_a.o -o lib/loader_a.mjs
	gzip -f -k lib/loader_a.wasm

deps_o:
	[ -d lib ] || mkdir lib
	emcc -O2 -c loader_o.c
	emcc --no-entry loader_o.o -o lib/loader_o.mjs
	gzip -f -k lib/loader_o.wasm

deps_so:
	[ -d lib ] || mkdir lib
	emcc -O2 -c loader_so.c
	emcc --no-entry loader_so.o -o lib/loader_so.mjs
	gzip -f -k lib/loader_so.wasm

deps_dll:
	[ -d lib ] || mkdir lib
	[ -d lib/pe-parse ] || { \
		cd lib && git clone --branch v2.1.1 https://github.com/trailofbits/pe-parse && cd pe-parse; \
		emcmake cmake -B build -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DCMAKE_CXX_FLAGS="-Wno-deprecated-declarations -Wno-error=deprecated-declarations"; \
		emmake make -C build -j$(nproc); \
	}
	em++ -g -O2 -c loader_dll.cpp -I./lib/pe-parse/pe-parser-library/include/
	em++ -g --no-entry loader_dll.o -o lib/loader_dll.mjs ./lib/pe-parse/build/pe-parser-library/libpe-parse.a
	gzip -f -k lib/loader_dll.wasm

deps_dylib:
	[ -d lib ] || mkdir lib
	emcc -g -O2 -c loader_dylib.c
	emcc -g --no-entry loader_dylib.o -o lib/loader_dylib.mjs

deps_pcap:
	[ -d lib ] || mkdir lib
	[ -d lib/libpcap ] || { \
		cd lib && git clone --branch libpcap-1.10.5 https://github.com/the-tcpdump-group/libpcap && cd libpcap; \
		emcmake cmake -B build -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DPCAP_TYPE=null; \
		emmake make -C build -j$(nproc); \
	}
	emcc -g -O2 -c loader_pcap.c -I./lib/libpcap/
	emcc -g --no-entry loader_pcap.o -o lib/loader_pcap.mjs ./lib/libpcap/build/libpcap.a
	gzip -f -k lib/loader_pcap.wasm

deps_sqlite:
	[ -d lib ] || mkdir lib
	curl https://sql.js.org/dist/sql-wasm.js > lib/sql-wasm.js
	curl https://sql.js.org/dist/sql-wasm.wasm > lib/sqlite3.wasm
	gzip -f -k lib/sqlite3.wasm
	gzip -f -k lib/sql-wasm.js

deps_archive:
	[ -d lib ] || mkdir lib
	[ -d lib/libarchive ] || { \
		cd lib && git clone --depth 1 https://github.com/libarchive/libarchive && cd libarchive; \
		./build/autogen.sh; \
		emconfigure ./configure --disable-shared; \
		emmake make -j$(nproc); \
	}
	emcc -g -O2 -c loader_archive.c -I./lib/libarchive/libarchive
	emcc -g --no-entry loader_archive.o -o lib/loader_archive.mjs ./lib/libarchive/.libs/libarchive.a -s "EXPORTED_RUNTIME_METHODS=['FS', 'cwrap']" -lz
	gzip -f -k lib/loader_archive.wasm
	gzip -f -k lib/loader_archive.mjs

clean:
	rm *.o
	rm -rf lib
