###
##
# Makefile for RetroArch Wii.
##

DEBUG			= 0
HAVE_LOGGER		= 0
HAVE_FILE_LOGGER	= 0

# 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

PC_DEVELOPMENT_IP_ADDRESS	= 255.255.255.255
PC_DEVELOPMENT_UDP_PORT		= 3490

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-salamander_wii.dol
ELF_TARGET := retroarch-salamander_wii.elf

INCLUDE := -I. -I$(DEVKITPRO)/libogc/include -Ilibretro-common/include -Ideps/libz
LIBDIRS := -L$(DEVKITPRO)/libogc/lib/wii -L.

MACHDEP := -DGEKKO -DHW_RVL -mrvl -mcpu=750 -meabi -mhard-float
CFLAGS += -Wall -std=gnu99 $(MACHDEP) $(INCLUDE)
LDFLAGS := $(MACHDEP) -Wl,-Map,$(notdir $(ELF_TARGET)).map
LIBS := -lfat -lwiiuse -logc -lbte

APP_BOOTER_DIR = wii/app_booter

OBJ = frontend/frontend_salamander.o \
		frontend/frontend_driver.o \
		frontend/drivers/platform_gx.o \
		frontend/drivers/platform_wii.o \
		frontend/drivers/platform_null.o \
		libretro-common/file/file_path.o \
		libretro-common/hash/rhash.o \
		libretro-common/string/stdstring.o \
		libretro-common/lists/string_list.o \
		libretro-common/lists/dir_list.o \
		libretro-common/streams/file_stream.o \
		libretro-common/file/retro_dirent.o \
		libretro-common/file/retro_stat.o \
		libretro-common/compat/compat_strl.o \
		libretro-common/compat/compat_strcasestr.o \
		libretro-common/file/config_file.o \
		file_path_str.o \
		verbosity.o \
		$(APP_BOOTER_DIR)/app_booter.binobj

ifeq ($(HAVE_LOGGER), 1)
CFLAGS		+= -DHAVE_LOGGER
CFLAGS          += -DPC_DEVELOPMENT_IP_ADDRESS=\"$(PC_DEVELOPMENT_IP_ADDRESS)\" -DPC_DEVELOPMENT_UDP_PORT=$(PC_DEVELOPMENT_UDP_PORT)
OBJ             += network/net_logger.o \
						 libretro-common/net/net_compat.o \
						 libretro-common/net/net_socket.o
endif

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

CFLAGS += -std=gnu99 -DIS_SALAMANDER -DRARCH_CONSOLE -DHAVE_RARCH_EXEC -DGEKKO -Wno-char-subscripts

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

ifeq ($(USBGECKO), 1)
LIBS += -ldb
CFLAGS += -DUSBGECKO
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 $@ $<

$(APP_BOOTER_DIR)/app_booter.bin:
	$(MAKE) -C $(APP_BOOTER_DIR)

pkg: all
	cp -r $(DOL_TARGET) pkg/wii/boot.dol

clean:
	rm -f $(DOL_TARGET)
	rm -f $(ELF_TARGET)
	rm -f $(OBJ)
	$(MAKE) -C $(APP_BOOTER_DIR) clean

.PHONY: clean
