#!/usr/bin/make

CPPFLAGS := -I. $(shell sdl-config --cflags) $(shell pkg-config --cflags x11)
LDLIBS := -lz $(shell sdl-config --libs) $(shell pkg-config --libs x11) -lpopt

-include config.mk

# Sane defaults
CONF_GUI?=1
ifeq ($(ARCH),armel)
	CONF_BUILD_ASM_CPU?=1
	CONF_BUILD_ASM_SPC700?=1
	CONF_BUILD_ASM_SA1?=0	# Still not there
	CONF_BUILD_MISC_ROUTINES?=misc_armel
else ifeq ($(ARCH),i386)
	CONF_BUILD_ASM_CPU?=0
	CONF_BUILD_ASM_SPC700?=0
	CONF_BUILD_ASM_SA1?=0
	CONF_BUILD_MISC_ROUTINES?=misc_i386
endif
# Hardware pixel doubling (in N8x0)
CONF_XSP?=0
# Hildon Desktop compositing (in Fremantle)
CONF_HD?=0
# Link to libzeemote
CONF_ZEEMOTE?=0

# SNES stuff
OBJS = apu.o c4.o c4emu.o cheats.o cheats2.o clip.o cpu.o cpuexec.o data.o
OBJS += dma.o dsp1.o font.o fxemu.o fxinst.o gfx.o globals.o loadzip.o memmap.o 
OBJS += ppu.o sa1.o sdd1.o sdd1emu.o snapshot.o soundux.o spc700.o srtc.o tile.o

ifeq ($(CONF_BUILD_ASM_CPU), 1)
	# ASM CPU Core from yoyofr's OpenSnes9X
	OBJS += os9x_asm_cpu.o os9x_65c816.o
	CPPFLAGS += -DCONF_BUILD_ASM_CPU=1
else
	OBJS += cpuops.o
endif

ifeq ($(CONF_BUILD_ASM_SPC700), 1)
	OBJS += spc700a.o
	CPPFLAGS += -DCONF_BUILD_ASM_SPC700=1
endif

ifeq ($(CONF_BUILD_ASM_SA1), 1)
	crash
else
	OBJS += sa1cpu.o
endif

OBJS += $(CONF_BUILD_MISC_ROUTINES).o

# from open-whatever sdk
OBJS += unzip.o ioapi.o
# my extensions to snes9x (speedhacks support)
OBJS += hacks.o
# the glue code that sticks it all together in a monstruous way
OBJS += platform/path.o platform/config.o
OBJS += platform/sdl.o platform/sdlv.o platform/sdla.o platform/sdli.o
OBJS += platform/sdlvscalers.o

ifeq ($(CONF_XSP), 1)
	CPPFLAGS += -DCONF_XSP=1 $(shell pkg-config --cflags xsp)
	LDLIBS += $(shell pkg-config --libs xsp)
endif
ifeq ($(CONF_HD), 1)
	CPPFLAGS += -DCONF_HD=1
	LDLIBS += -lSDL_haa
	CONF_EXIT_BUTTON ?= 1
endif
ifeq ($(CONF_GUI), 1)
	CPPFLAGS += -DCONF_GUI=1 $(shell pkg-config --cflags libosso gconf-2.0)
	LDLIBS += $(shell pkg-config --libs libosso gconf-2.0)
	OBJS += platform/osso.o
endif
ifeq ($(CONF_EXIT_BUTTON), 1)
	CPPFLAGS += -DCONF_EXIT_BUTTON=1
	LDLIBS += -lSDL_image
	OBJS += platform/sdlvexit.o
endif
ifeq ($(CONF_ZEEMOTE), 1)
	CPPFLAGS += -DCONF_ZEEMOTE=1
	LDLIBS += -lzeemote -lzeemote-conf -lbluetooth
	OBJS += platform/zeemote.o
endif

# automatic dependencies
DEPS := $(OBJS:.o=.d)

all: drnoksnes

clean:
	rm -f drnoksnes *.o *.d platform/*.o platform/*.d
	rm -f build-stamp configure-stamp

remake: clean deps all

-include $(DEPS)

drnoksnes: $(OBJS)
	$(CXX) $(CXXFLAGS) $(LDFLAGS) $^ $(LDLIBS) -o $@

install: drnoksnes
	install drnoksnes $(DESTDIR)/usr/games

deps: $(DEPS)
%.d: %.cpp
	@$(CXX) $(CPPFLAGS) -MM $^ -MF $@ -MT $@ -MT $*.o
%.d: %.c
	@$(CC) $(CPPFLAGS) -MM $^ -MF $@ -MT $@ -MT $*.o
%.d: %.s
	@touch $@

# GUI
gui:
	$(MAKE) -C gui all

gui_clean:
	$(MAKE) -C gui clean
	
gui_install:
	$(MAKE) -C gui install DESTDIR="$(DESTDIR)"
	
ifeq ($(CONF_GUI), 1)
all: gui
clean: gui_clean
install: gui_install
endif

distclean: clean
	rm -f config.mk

.PHONY: all clean remake deps install gui gui_clean distclean

