all:
	make build
	make install

install:
	zip -r9 application_adobe.zip . -x "lib/vendor/*"
	mv application_adobe.zip ../../../dist/data/state/plugins/

build:
	make deps_psd
	make deps_swf
	make deps_aco
	make deps_ase
	make deps_postscript
	make deps_zipimage
	make deps_raw

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

deps_psd:
	[ -d lib/vendor ] || mkdir -p lib/vendor
	[ -d lib/vendor/stb ] || git clone --depth 1 https://github.com/nothings/stb ./lib/vendor/stb
	emcc -O2 -c loader_psd.c -I./lib/vendor/stb/
	emcc --no-entry loader_psd.o -o lib/psd_wasm.mjs -sINITIAL_HEAP=0KB -sINITIAL_MEMORY=512MB

deps_aco:
	[ -d lib ] || mkdir libo
	emcc -O2 -c loader_aco.c
	emcc --no-entry loader_aco.o -o lib/aco_wasm.mjs
	brotli -f -k lib/aco_wasm.wasm

deps_ase:
	[ -d lib ] || mkdir lib
	emcc -O2 -c loader_ase.c
	emcc --no-entry loader_ase.o -o lib/ase_wasm.mjs
	brotli -f -k lib/ase_wasm.wasm

deps_swf:
	[ -d lib ] || mkdir lib
	curl https://cdn.jsdelivr.net/npm/@ruffle-rs/ruffle@0.1.0-nightly.2025.4.10/ruffle.min.js > lib/ruffle.min.js
	curl https://cdn.jsdelivr.net/npm/@ruffle-rs/ruffle@0.1.0-nightly.2025.4.10/core.ruffle.7876019b45e2fd1b67c8.js > lib/core.ruffle.7876019b45e2fd1b67c8.js
	curl https://cdn.jsdelivr.net/npm/@ruffle-rs/ruffle@0.1.0-nightly.2025.4.10/873e868f9d62a25fefad.wasm > lib/873e868f9d62a25fefad.wasm

deps_postscript:
	[ -d lib ] || mkdir lib
	curl https://raw.githubusercontent.com/ochachacha/ps-wasm/refs/heads/master/extension/ps-wasm-chrome/gs.js > lib/gs.js
	curl https://raw.githubusercontent.com/ochachacha/ps-wasm/refs/heads/master/extension/ps-wasm-chrome/gs.wasm > lib/gs.wasm
	brotli -f -k lib/gs.js
	brotli -f -k lib/gs.wasm

deps_zipimage:
	[ -d lib ] || mkdir lib
	[ -d lib/zip ] || { \
		mkdir lib/zip && cd lib/zip; \
		curl -sLO https://deno.land/x/zipjs@v2.7.60/index.js; \
		mkdir lib && cd lib; \
		curl -sLO https://deno.land/x/zipjs@v2.7.60/lib/zip-fs.js; \
		curl -sLO https://deno.land/x/zipjs@v2.7.60/lib/z-worker-inline.js; \
		mkdir core && cd core; \
		curl -sLO https://deno.land/x/zipjs@v2.7.60/lib/core/io.js; \
		curl -sLO https://deno.land/x/zipjs@v2.7.60/lib/core/zip-reader.js; \
		curl -sLO https://deno.land/x/zipjs@v2.7.60/lib/core/zip-writer.js; \
		curl -sLO https://deno.land/x/zipjs@v2.7.60/lib/core/zip-fs-core.js; \
		curl -sLO https://deno.land/x/zipjs@v2.7.60/lib/core/codec-worker.js; \
		curl -sLO https://deno.land/x/zipjs@v2.7.60/lib/core/zip-entry.js; \
		curl -sLO https://deno.land/x/zipjs@v2.7.60/lib/core/configuration.js; \
		curl -sLO https://deno.land/x/zipjs@v2.7.60/lib/core/codec-pool.js; \
		curl -sLO https://deno.land/x/zipjs@v2.7.60/lib/core/constants.js; \
		mkdir util && cd util; \
		curl -sLO https://deno.land/x/zipjs@v2.7.60/lib/core/util/default-mime-type.js; \
		curl -sLO https://deno.land/x/zipjs@v2.7.60/lib/core/util/stream-codec-shim.js; \
		curl -sLO https://deno.land/x/zipjs@v2.7.60/lib/core/util/decode-text.js; \
		curl -sLO https://deno.land/x/zipjs@v2.7.60/lib/core/util/encode-text.js; \
		curl -sLO https://deno.land/x/zipjs@v2.7.60/lib/core/util/cp437-decode.js; \
		curl -sLO https://deno.land/x/zipjs@v2.7.60/lib/core/util/mime-type.js; \
		cd ../ && mkdir streams && cd streams; \
		curl -sLO https://deno.land/x/zipjs@v2.7.60/lib/core/streams/codec-stream.js; \
		curl -sLO https://deno.land/x/zipjs@v2.7.60/lib/core/streams/zip-entry-stream.js; \
		curl -sLO https://deno.land/x/zipjs@v2.7.60/lib/core/streams/crc32-stream.js; \
		curl -sLO https://deno.land/x/zipjs@v2.7.60/lib/core/streams/aes-crypto-stream.js; \
		curl -sLO https://deno.land/x/zipjs@v2.7.60/lib/core/streams/zip-crypto-stream.js; \
		curl -sLO https://deno.land/x/zipjs@v2.7.60/lib/core/streams/common-crypto.js; \
		curl -sLO https://deno.land/x/zipjs@v2.7.60/lib/core/streams/stream-adapter.js; \
		mkdir codecs && cd codecs; \
		curl -sLO https://deno.land/x/zipjs@v2.7.60/lib/core/streams/codecs/sjcl.js; \
		curl -sLO https://deno.land/x/zipjs@v2.7.60/lib/core/streams/codecs/crc32.js; \
		curl -sLO https://deno.land/x/zipjs@v2.7.60/lib/core/streams/codecs/deflate.js; \
		curl -sLO https://deno.land/x/zipjs@v2.7.60/lib/core/streams/codecs/inflate.js; \
	}

deps_raw:
	[ -d lib/vendor ] || mkdir -p lib/vendor
	[ -d lib/vendor/libraw ] || { \
		docker build -f loader_raw.Dockerfile -t librawbuild .; \
		mkdir -p lib/vendor/libraw; \
		docker run --rm -v "$(PWD)/lib/vendor/libraw":/tmp librawbuild bash -c "cp -R ~/libraw/* /tmp/"; \
	}
	em++ -O3 -c loader_raw.cpp -I./lib/vendor/libraw/includes -I./lib/vendor/stb
	em++ -O3 --no-entry --bind loader_raw.o -L./lib/vendor/libraw/libs -l:libraw.a -l:liblcms2.a -o lib/raw_wasm.js -sEXPORT_ES6=1 -sALLOW_MEMORY_GROWTH=1
	brotli -f -k ./lib/raw_wasm.js
	brotli -f -k ./lib/raw_wasm.wasm
