all:
	make build
	make install

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

build:
	make deps_raw
	make deps_tiff
	make deps_heif

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

deps_stb:
	[ -d lib/vendor ] || mkdir -p lib/vendor
	[ -d lib/vendor/stb ] || git clone --depth 1 https://github.com/nothings/stb ./lib/vendor/stb

deps_raw:
	[ -d lib/vendor ] || mkdir -p lib/vendor
	[ -d lib/vendor/libraw ] || { \
		make deps_stb; \
		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

deps_jpg:
	[ -d lib/vendor ] || mkdir -p lib/vendor
	[ -d lib/vendor/libjpeg-turbo/install ] || { \
		cd lib/vendor && git clone --branch 3.1.0 https://github.com/libjpeg-turbo/libjpeg-turbo && cd libjpeg-turbo; \
		emcmake cmake -B build -DCMAKE_INSTALL_PREFIX=./install -DCMAKE_BUILD_TYPE=Release -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DWITH_SIMD=OFF; \
		emmake make -C build -j 8; \
		emmake make -C build install; \
	}

deps_webp:
	[ -d lib/vendor ] || mkdir -p lib/vendor
	[ -d lib/vendor/libwebp-1.5.0/install ] || { \
		cd lib/vendor && curl -LO https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.5.0.tar.gz; \
		tar -zxvf libwebp-1.5.0.tar.gz && cd libwebp-1.5.0 ; \
		emcmake cmake -B build -DCMAKE_INSTALL_PREFIX=./install -D WEBP_USE_THREAD=OFF; \
		emmake make -C build -j 8 webp; \
		emmake make -C build install; \
	}

deps_tiff:
	[ -d lib/vendor ] || mkdir -p lib/vendor
	[ -d lib/vendor/libtiff/install ] || { \
		make deps_jpg && make deps_webp; \
		cd lib/vendor && git clone --branch v4.7.0 https://gitlab.com/libtiff/libtiff && cd libtiff; \
		emcmake cmake -B build -DCMAKE_INSTALL_PREFIX=./install -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release -Dwebp=ON -DWebP_INCLUDE_DIR=../libwebp-1.5.0/src -DWebP_LIBRARY_RELEASE=../libwebp-1.5.0/install/lib/libwebp.a -Djpeg=ON -DJPEG_INCLUDE_DIR=../libjpeg-turbo/install/include -DJPEG_LIBRARY_RELEASE=../libjpeg-turbo/install/lib/libjpeg.a -Dtiff-tools=OFF -Dtiff-contrib=OFF -Dtiff-tests=OFF; \
		emmake make -C build -j 8 tiff; \
		emmake make -C build install; \
	}
	emcc -O3 -c loader_tiff.c -I./lib/vendor/libtiff/install/include -I./lib/vendor/libjpeg-turbo/install/include
	emcc -O3 loader_tiff.o ./lib/vendor/libtiff/install/lib/libtiff.a ./lib/vendor/libjpeg-turbo/install/lib/libjpeg.a ./lib/vendor/libwebp-1.5.0/install/lib/libwebp.a ./lib/vendor/libwebp-1.5.0/install/lib/libsharpyuv.a -lz -s EXPORT_ES6=1 -s "EXPORTED_FUNCTIONS=['_main']" -s "EXPORTED_RUNTIME_METHODS=['FS', 'callMain']" -s INVOKE_RUN=0 -s ALLOW_MEMORY_GROWTH=1 -o lib/tiff_wasm.js
	brotli -f -k ./lib/tiff_wasm.js
	brotli -f -k ./lib/tiff_wasm.wasm

deps_heif:
	[ -d lib/vendor ] || mkdir -p lib/vendor
	make deps_jpg && make deps_webp && make deps_tiff
	[ -d lib/vendor/libde265/install ] || { \
		cd lib/vendor && git clone --branch v1.0.16 https://github.com/strukturag/libde265 && cd libde265; \
		emcmake cmake -B build -DCMAKE_INSTALL_PREFIX=./install -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release; \
		emmake make -C build -j 8; \
		emmake make -C build install; \
	}
	[ -d lib/vendor/aom/install ] || { \
		cd lib/vendor && git clone --branch v3.12.1 https://aomedia.googlesource.com/aom && cd aom; \
		emcmake cmake -B build -DCMAKE_INSTALL_PREFIX=./install -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release -DAOM_TARGET_CPU=generic -DENABLE_AVX2=OFF; \
		emmake make -C build -j 8; \
		emmake make -C build install; \
	}
	[ -d lib/vendor/libheif/install ] || { \
		cd lib/vendor && git clone --branch v1.19.8 https://github.com/strukturag/libheif && cd libheif; \
		emcmake cmake -B build -DCMAKE_INSTALL_PREFIX=./install -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release -DTIFF_INCLUDE_DIR=../libtiff/install/include -DJPEG_INCLUDE_DIR=../libjpeg-turbo/install/include -DJPEG_LIBRARY_RELEASE=../libjpeg-turbo/install/lib/libjpeg.a -DTIFF_INCLUDE_DIR=../libtiff/install/include -DTIFF_LIBRARY_RELEASE=../libtiff/install/lib/libtiff.a -DLIBSHARPYUV_INCLUDE_DIR=../libwebp-1.5.0/install/include/webp/ -DLIBSHARPYUV_LIBRARY=../libwebp-1.5.0/install/lib/libsharpyuv.a -DLIBDE265_INCLUDE_DIR=../libde265/install/include -DLIBDE265_LIBRARY=../libde265/install/lib/libde265.a -DAOM_INCLUDE_DIR=../aom/install/include/ -DAOM_LIBRARY=../aom/install/lib/libaom.a -DWITH_X265=OFF -DWITH_EXAMPLES=OFF -DBUILD_TESTING=OFF -DENABLE_MULTITHREADING_SUPPORT=OFF -DENABLE_PARALLEL_TILE_DECODING=OFF; \
		emmake make -C build -j 8; \
		emmake make -C build install; \
	}
	em++ -O3 -c loader_heic.c -I./lib/vendor/libheif/install/include -I./lib/vendor/libjpeg-turbo/install/include
	em++ -O3 loader_heic.o ./lib/vendor/libheif/install/lib/libheif.a ./lib/vendor/aom/install/lib/libaom.a ./lib/vendor/libjpeg-turbo/install/lib/libjpeg.a ./lib/vendor/libwebp-1.5.0/install/lib/libsharpyuv.a ./lib/vendor/libde265/install/lib/libde265.a -s EXPORT_ES6=1 -s "EXPORTED_FUNCTIONS=['_main']" -sASSERTIONS -s "EXPORTED_RUNTIME_METHODS=['FS', 'callMain']" -s INVOKE_RUN=0 -s ALLOW_MEMORY_GROWTH=1 -o lib/heic_wasm.js --bind
	brotli -f -k ./lib/heic_wasm.js
	brotli -f -k ./lib/heic_wasm.wasm
