RARCH_VERSION		= "0.9.9.3"

DEBUG			= 0
HAVE_LOGGER		= 1
HAVE_FILE_LOGGER	= 0
PERF_TEST		= 0
WHOLE_ARCHIVE_LINK	= 0
BIG_STACK		= 0

PC_DEVELOPMENT_IP_ADDRESS	= "192.168.1.7"
PC_DEVELOPMENT_UDP_PORT		= 3490

# system platform
system_platform = unix
ifeq ($(shell uname -a),)
EXE_EXT = .exe
   system_platform = win
else ifneq ($(findstring Darwin,$(shell uname -a)),)
   system_platform = osx
else ifneq ($(findstring MINGW,$(shell uname -a)),)
   system_platform = win
endif

CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT)
CXX = $(DEVKITPPC)/bin/powerpc-eabi-g++$(EXE_EXT)
LD = $(DEVKITPPC)/bin/powerpc-eabi-ld$(EXE_EXT)
ELF2DOL = $(DEVKITPPC)/bin/elf2dol$(EXE_EXT)

DOL_TARGET := retroarch_ngc.dol
ELF_TARGET := retroarch_ngc.elf

INCLUDE := -I. -I$(DEVKITPRO)/libogc/include
LIBDIRS := -L$(DEVKITPRO)/libogc/lib/cube -L.

MACHDEP := -DGEKKO -DHW_DOL -mogc -mcpu=750 -meabi -mhard-float
CFLAGS += -Wall -std=gnu99 $(MACHDEP) $(INCLUDE)
ifeq ($(WHOLE_ARCHIVE_LINK), 1)
   WHOLE_START := -Wl,--whole-archive
   WHOLE_END := -Wl,--no-whole-archive
endif
LDFLAGS := $(MACHDEP) -Wl,-Map,$(notdir $(ELF_TARGET)).map
ifeq ($(BIG_STACK), 1)
   LDFLAGS += -T gx/ld/ogc.ld
endif
LIBS := -lfat $(WHOLE_START) -lretro_ngc $(WHOLE_END) -logc

OBJ = griffin/griffin.o

ifeq ($(PERF_TEST), 1)
   CFLAGS += -DPERF_TEST
endif

ifeq ($(HAVE_LOGGER), 1)
CFLAGS		+= -DHAVE_LOGGER
CFLAGS          += -DPC_DEVELOPMENT_IP_ADDRESS=\"$(PC_DEVELOPMENT_IP_ADDRESS)\" -DPC_DEVELOPMENT_UDP_PORT=$(PC_DEVELOPMENT_UDP_PORT)
CFLAGS          += -Iconsole/logger
LIBS += -lbba
endif

ifeq ($(HAVE_FILE_LOGGER), 1)
CFLAGS		+= -DHAVE_FILE_LOGGER
CFLAGS          += -Iconsole/logger
endif

CFLAGS += -std=gnu99 -DHAVE_RGUI -DRARCH_CONSOLE -DGEKKO -DHAVE_ZLIB -DWANT_MINIZ -DHAVE_RARCH_MAIN_WRAP -DHAVE_RARCH_MAIN_IMPLEMENTATION -DHAVE_GRIFFIN=1 -DHAVE_SCREENSHOTS -DPACKAGE_VERSION=\"$(RARCH_VERSION)\" -Wno-char-subscripts 

ifeq ($(DEBUG), 1)
   CFLAGS += -O0 -g
else
   CFLAGS += -O3
endif

all: $(DOL_TARGET)

%.dol: %.elf
	$(ELF2DOL) $< $@

$(ELF_TARGET): $(OBJ)
	$(CXX) -o $@ $(LDFLAGS) $(LIBDIRS) $(OBJ) $(LIBS)

%.o: %.c
	$(CC) $(CFLAGS) -c -o $@ $<

%.binobj: %.bin
	$(LD) -r -b binary -o $@ $<

%.bmpobj: %.bmp
	$(LD) -r -b binary -o $@ $<

pkg: all
	cp -r $(DOL_TARGET) ngc/pkg/CORE.dol

clean:
	rm -f $(DOL_TARGET)
	rm -f $(ELF_TARGET)
	rm -f $(OBJ)

.PHONY: clean