# Compiler and Flags
CC = C:/msys64/mingw64/bin/gcc.exe
CFLAGS = -Wall -O2 -std=gnu99 -Isrc/common/crypto -Isrc/common/scsi -Isrc/common/xbox
LDFLAGS = 

# Directories
BIN_DIR = bin
SRC_DIR = src

# Shared Common Objects
COMMON_SRCS = src/common/crypto/rc4.c \
              src/common/crypto/sha1.c \
              src/common/scsi/utils.c \
              src/common/xbox/unlock.c

COMMON_OBJS = src/common/crypto/rc4.o \
              src/common/crypto/sha1.o \
              src/common/scsi/utils.o \
              src/common/xbox/unlock.o

# Tool Targets
TOOLS = bin/xbox_auth_disc.exe \
        bin/hit_cipher_gcc.exe \
        bin/hit_mem_dump.exe \
        bin/lba_probe.exe \
        bin/flash_gcc.exe \
        bin/pp_gcc.exe \
        bin/scsi_cmd.exe \
		bin/bindiff.exe \
        bin/disc_dump.exe \
        bin/auth_probe.exe

.PHONY: all clean dirs

all: dirs $(TOOLS)
	@echo [+] All tools compiled successfully.

dirs:
	@if not exist $(BIN_DIR) mkdir $(BIN_DIR)

# --- Compile Shared Common Files ---
# Explicit rule for .c to .o compilation to prevent Make path confusion
%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@

# --- Compile Individual Tools ---

bin/xbox_auth_disc.exe: src/tools/auth/xbox_auth_disc/main.c $(COMMON_OBJS)
	$(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)

bin/hit_cipher_gcc.exe: src/tools/cipher/hit_cipher_gcc/hit_cipher.c
	$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS)

bin/hit_mem_dump.exe: src/tools/mem_dump/hit_mem_dump.c
	$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS)

bin/lba_probe.exe: src/tools/auth/lba_probe/lba_probe.c
	$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS)

bin/flash_gcc.exe: src/tools/flashers/flash_gcc/gcc_hitachi_flasher.c
	$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS)

bin/pp_gcc.exe: src/tools/pp/pp_gcc/pp_win.c
	$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS)

bin/scsi_cmd.exe: src/tools/scsi_cmd/main.c $(COMMON_OBJS)
	$(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)

bin/disc_dump.exe: src/tools/auth/disc_dump/main.c $(COMMON_OBJS)
	$(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)

bin/auth_probe.exe: src/tools/auth/auth_probe/main.c $(COMMON_OBJS)
	$(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)

bin/bindiff.exe: src/tools/bindiff/main.c
	$(CC) $(CFLAGS) $^ -o $@

# --- Cleanup ---
clean:
	@-del /Q /S src\*.o 2>nul
	@-del /Q bin\*.exe 2>nul
	@echo [-] Cleaned build artifacts.