CC ?= cc
CFLAGS ?= -std=c11 -O2 -Wall -Wextra -Wpedantic
PKG_CONFIG ?= pkg-config
SDL_CFLAGS := $(shell $(PKG_CONFIG) --cflags sdl3)
SDL_LIBS := $(shell $(PKG_CONFIG) --libs sdl3)

PREFIX ?= /usr/local
BINDIR ?= $(PREFIX)/bin
DATADIR ?= $(PREFIX)/share
APPLICATIONSDIR ?= $(DATADIR)/applications

# Windows cross-build (Linux -> Windows x86-64 via MinGW-w64).
# Download SDL3-devel-<version>-mingw.tar.gz from the official SDL release,
# extract it, and point SDL3_MINGW at the extracted SDL3-<version> directory.
MINGW_CC ?= x86_64-w64-mingw32-gcc
SDL3_MINGW ?=
WIN_ARCH := x86_64-w64-mingw32
WIN_OUT := build/windows-x86_64
WIN_EXE := $(WIN_OUT)/future-doom.exe
WIN_DLL := $(WIN_OUT)/SDL3.dll

future-doom: src/main.c src/audio.h src/music.h
	$(CC) $(CFLAGS) $(SDL_CFLAGS) -o $@ src/main.c $(SDL_LIBS)

music2mid: tools/music2mid.c src/music.h
	$(CC) $(CFLAGS) -o $@ tools/music2mid.c

midi: music2mid
	./music2mid stage1.mid

windows-check:
	@command -v $(MINGW_CC) >/dev/null 2>&1 || { echo "Missing $(MINGW_CC). On EndeavourOS: sudo pacman -S mingw-w64-gcc"; exit 1; }
	@test -n "$(SDL3_MINGW)" || { echo "Set SDL3_MINGW to the extracted SDL3 MinGW development directory."; echo "Example: make windows SDL3_MINGW=$$HOME/Downloads/SDL3-3.4.16"; exit 1; }
	@test -f "$(SDL3_MINGW)/$(WIN_ARCH)/include/SDL3/SDL.h" || { echo "SDL3 headers not found under $(SDL3_MINGW)/$(WIN_ARCH)"; exit 1; }
	@test -f "$(SDL3_MINGW)/$(WIN_ARCH)/lib/libSDL3.dll.a" || { echo "SDL3 MinGW import library not found."; exit 1; }
	@test -f "$(SDL3_MINGW)/$(WIN_ARCH)/bin/SDL3.dll" || { echo "SDL3.dll not found."; exit 1; }

windows: windows-check
	@mkdir -p "$(WIN_OUT)"
	$(MINGW_CC) $(CFLAGS) \
		-I"$(SDL3_MINGW)/$(WIN_ARCH)/include" \
		-L"$(SDL3_MINGW)/$(WIN_ARCH)/lib" \
		-o "$(WIN_EXE)" src/main.c -lSDL3 -mwindows
	cp "$(SDL3_MINGW)/$(WIN_ARCH)/bin/SDL3.dll" "$(WIN_DLL)"
	cp README.md COPYING "$(WIN_OUT)/"
	@echo
	@echo "Windows build ready in $(WIN_OUT)/"
	@echo "Test future-doom.exe on an actual Windows machine before release."

windows-zip: windows
	@command -v zip >/dev/null 2>&1 || { echo "Missing zip utility."; exit 1; }
	rm -f future-doom-v1.0.25-windows-x86_64.zip
	cd build && zip -9 -r ../future-doom-v1.0.25-windows-x86_64.zip windows-x86_64
	@echo "Created future-doom-v1.0.25-windows-x86_64.zip"

install: future-doom
	mkdir -p "$(DESTDIR)$(BINDIR)" "$(DESTDIR)$(APPLICATIONSDIR)"
	install -m 755 future-doom "$(DESTDIR)$(BINDIR)/future-doom"
	install -m 644 packaging/future-doom.desktop "$(DESTDIR)$(APPLICATIONSDIR)/future-doom.desktop"

uninstall:
	rm -f "$(DESTDIR)$(BINDIR)/future-doom"
	rm -f "$(DESTDIR)$(APPLICATIONSDIR)/future-doom.desktop"

clean:
	rm -f future-doom music2mid stage1.mid future-doom-v1.0.25-windows-x86_64.zip
	rm -rf build

.PHONY: clean midi install uninstall windows windows-check windows-zip
