.SECONDEXPANSION:
.SECONDARY:

VERSION			?= us
MODULE_NAME		:= sotn-debugmodule

# Directories
SOTN_ROOT       := ../..
INCLUDE_DIR     := $(SOTN_ROOT)/include
BUILD_DIR       := $(SOTN_ROOT)/build
CONFIG_DIR      := $(SOTN_ROOT)/config

# Compilers
CROSS           := mipsel-linux-gnu-
CC				:= $(CROSS)gcc
LD              := $(CROSS)ld
CPP				:= $(CROSS)cpp
OBJCOPY         := $(CROSS)objcopy
CC_FLAGS        := -std=c11 -c -G0 -O2 -g -funsigned-char -Werror -Wall -Wno-unused-function
CC_FLAGS        += -march=mips1 -mabi=32 -EL -mfp32 -fno-pic -mno-shared -mno-abicalls -fno-stack-protector -nostdlib
CPP_FLAGS       += -isystem $(INCLUDE_DIR) -isystem $(INCLUDE_DIR)/psxsdk -undef
CPP_FLAGS       += -D_internal_version_$(VERSION) -Dmips -D__OPTIMIZE__ -D__mips__ -D__mips -Dpsx -D__psx__ -D__psx -D_PSYQ -D__EXTENSIONS__ -D_MIPSEL -DNO_LOGS -D_LANGUAGE_C -DLANGUAGE_C

all: clean_symbols build
build: $(BUILD_DIR)/$(MODULE_NAME).bin
clean:
	rm -f $(BUILD_DIR)/$(MODULE_NAME).*
	rm -rf $(BUILD_DIR)/tools/$(MODULE_NAME)
	rm -f $(CONFIG_DIR)/symbols.$(VERSION).ld.txt
format:
	clang-format -i $$(find . -type f -name "*.c")
	clang-format -i $$(find . -type f -name "*.h")
clean_symbols:
	@echo "Processing: $(CONFIG_DIR)/symbols.$(VERSION).txt -> $(CONFIG_DIR)/symbols.$(VERSION).ld.txt"
	grep -o '^[^/]*' "$(CONFIG_DIR)/symbols.$(VERSION).txt" > "$(CONFIG_DIR)/symbols.$(VERSION).ld.txt"

$(BUILD_DIR)/$(MODULE_NAME).bin: $(BUILD_DIR)/$(MODULE_NAME).elf
	$(OBJCOPY) -O binary $< $@
	printf '\x00' | dd of=$@ bs=1 seek=40959 count=1 conv=notrunc

$(BUILD_DIR)/%.elf: $(BUILD_DIR)/tools/%/inject.o $(BUILD_DIR)/tools/%/debugmode.o $(BUILD_DIR)/tools/%/menu.o $(BUILD_DIR)/tools/%/fontmanager.o $(BUILD_DIR)/tools/%/debug_flags.o $(BUILD_DIR)/tools/%/entity_spawn.o $(BUILD_DIR)/tools/%/sfx_player.o $(BUILD_DIR)/tools/%/flag_checker.o
	$(LD) -o $@ -Map $*.map -T $*.ld -T $(CONFIG_DIR)/symbols.$(VERSION).ld.txt \$^

$(BUILD_DIR)/tools/$(MODULE_NAME)/%.o: $(BUILD_DIR)/tools/$(MODULE_NAME)/%.c
	$(CC) $(CC_FLAGS) -o $@ $<
$(BUILD_DIR)/tools/$(MODULE_NAME)/%.c: %.c
	mkdir -p $(BUILD_DIR)/tools/$(MODULE_NAME)
	$(CPP) $(CPP_FLAGS) -o $@ $<
