.PHONY: payloads palera1n palera1n_xcode palera1n_mingw clean

WITH_GUI ?= 0
WITH_TUI ?= 0
WITH_RAMDISK ?= 1
WITH_BINPACK ?= 1
WITH_STATIC ?= 0
BUILD_TYPE ?= Debug
CMAKE_SYSROOT ?=
CROSS_HOST_TRIPLE ?=
JOBS ?=

BUILD_ARGS :=
ifneq ($(strip $(JOBS)),)
BUILD_ARGS += --parallel $(JOBS)
endif

payloads:
	mkdir -p src/gen/images
	mkdir -p src/gen/payloads

	@for file in payloads/*; do \
		name=$$(basename "$$file"); \
		name=$${name%.*}; \
		echo " XXD    $$file"; \
		echo "#pragma once" > "src/gen/payloads/$$name.h"; \
		xxd -i "$$file" \
		| sed 's/unsigned char/static const unsigned char/g' \
		| sed 's/unsigned int/static const size_t/g' \
		>> "src/gen/payloads/$$name.h"; \
	done

	@for file in images/*; do \
		name=$$(basename "$$file"); \
		name=$${name%.*}; \
		echo " XXD    $$file"; \
		echo "#pragma once" > "src/gen/images/$$name.h"; \
		xxd -i "$$file" \
		| sed 's/unsigned char/static const unsigned char/g' \
		| sed 's/unsigned int/static const size_t/g' \
		>> "src/gen/images/$$name.h"; \
	done

	xxd -i -n "DFUHelperDeviceInfo" resources/DFUHelperDeviceInfo.json > src/gen/DFUHelperDeviceInfo.h

palera1n: payloads
	@cmake -S . -B build \
		-DCMAKE_SYSROOT="$(CMAKE_SYSROOT)" \
		-DCROSS_HOST_TRIPLE="$(CROSS_HOST_TRIPLE)" \
		-DCMAKE_BUILD_TYPE=$(BUILD_TYPE) \
		-DWITH_GUI=$(WITH_GUI) \
		-DWITH_TUI=$(WITH_TUI) \
		-DWITH_RAMDISK=$(WITH_RAMDISK) \
		-DWITH_BINPACK=$(WITH_BINPACK) \
		-DWITH_STATIC=$(WITH_STATIC) && \
	cmake --build build $(BUILD_ARGS)

palera1n_xcode: payloads
	@cmake -S . -B build \
		-G Xcode \
		-DCMAKE_SYSROOT="$(CMAKE_SYSROOT)" \
		-DCROSS_HOST_TRIPLE="$(CROSS_HOST_TRIPLE)" \
		-DCMAKE_BUILD_TYPE=$(BUILD_TYPE) \
		-DWITH_GUI=$(WITH_GUI) \
		-DWITH_TUI=$(WITH_TUI) \
		-DWITH_RAMDISK=$(WITH_RAMDISK) \
		-DWITH_BINPACK=$(WITH_BINPACK) \
		-DWITH_STATIC=$(WITH_STATIC)

palera1n_mingw: payloads
	@cmake -S . -B build \
		-G "MinGW Makefiles" \
		-DCMAKE_SYSROOT="$(CMAKE_SYSROOT)" \
		-DCROSS_HOST_TRIPLE="$(CROSS_HOST_TRIPLE)" \
		-DCMAKE_BUILD_TYPE=$(BUILD_TYPE) \
		-DWITH_GUI=$(WITH_GUI) \
		-DWITH_TUI=$(WITH_TUI) \
		-DWITH_RAMDISK=$(WITH_RAMDISK) \
		-DWITH_BINPACK=$(WITH_BINPACK) \
		-DWITH_STATIC=$(WITH_STATIC) && \
	cmake --build build $(BUILD_ARGS)

clean:
	@rm -rf build src/gen
