PS5_HOST ?= ps5
PS5_PORT ?= 9021
PATCHDL_HTTP_PORT ?= 12880
ETAHEN_DEPS_DIR ?= vendor/etahen

ifdef PS5_PAYLOAD_SDK
    include $(PS5_PAYLOAD_SDK)/toolchain/prospero.mk
else
    $(error PS5_PAYLOAD_SDK is undefined)
endif

PYTHON ?= python3
BIN := patchdl-ps5.elf

SRCS := src/main.c \
        src/patchdl_assets.c \
        src/patchdl_websrv.c \
        src/patchdl_proc.c \
        src/patchdl_fw.c \
        src/patchdl_scan.c \
        src/patchdl_appdb.c \
        src/patchdl_net.c \
        src/patchdl_resolve.c \
        src/patchdl_verxml.c \
        src/patchdl_install.c \
        src/patchdl_notify.c

WEB_ASSETS := web/index.html web/styles.css web/app.js
GEN_SRCS := $(patsubst web/%,gen/web/%.c,$(WEB_ASSETS))

SQLITE_DIR := vendor/sqlite
SQLITE_OBJ := $(SQLITE_DIR)/sqlite3.o
SQLITE_CFLAGS := -O2 -w \
        -DSQLITE_THREADSAFE=0 \
        -DSQLITE_OMIT_LOAD_EXTENSION \
        -DSQLITE_OMIT_WAL \
        -DSQLITE_DEFAULT_MEMSTATUS=0 \
        -DSQLITE_OMIT_DEPRECATED

CFLAGS := -g -O2 -Wall -Werror -Isrc -I"$(ETAHEN_DEPS_DIR)/include" -I"$(SQLITE_DIR)" -DPATCHDL_HTTP_PORT=$(PATCHDL_HTTP_PORT)
LDADD := -L"$(ETAHEN_DEPS_DIR)/lib" -lmicrohttpd -lkernel_sys -lpthread

ifdef CURL_DIR
    CFLAGS += -DPATCHDL_HAVE_CURL -I"$(CURL_DIR)/include"
    LDADD  += -L"$(CURL_DIR)/lib" -lcurl -lpsl -lssl -lcrypto -lzstd -lz
endif

all: $(BIN)

gen/web:
	mkdir -p gen/web

gen/web/%.c: web/% scripts/gen_asset_module.py | gen/web
	$(PYTHON) scripts/gen_asset_module.py --path $* $< > $@

$(SQLITE_OBJ): $(SQLITE_DIR)/sqlite3.c
	$(CC) $(SQLITE_CFLAGS) -c -o $@ $<

$(BIN): $(SRCS) $(GEN_SRCS) $(SQLITE_OBJ)
	$(CC) $(CFLAGS) -o $@ $^ $(LDADD)

test: $(BIN)
	$(PS5_DEPLOY) -h $(PS5_HOST) -p $(PS5_PORT) $^

clean:
	rm -rf $(BIN) gen $(SQLITE_OBJ)

.PHONY: all clean test
