# Makefile for Frodo GP32 port, adapted from:
# Makefile.in for Frodo (generic Unix/X11)
# Copyright (C) 1995-1997 Christian Bauer <cbauer@iphcip1.physik.uni-mainz.de>

## Version information
VERSION   = 4
REVISION  = 1

CC     = /usr/local/devkitadv/bin/arm-agb-elf-g++
CXX    = /usr/local/devkitadv/bin/arm-agb-elf-g++
OBJCOPY = /usr/local/devkitadv/bin/arm-agb-elf-objcopy
B2FXE = /usr/local/devkitadv/bin/b2fxec
#B2FXE = /usr/local/devkitadv/bin/b2fxe

#LIBS   = -lstdc++ -Lgp32/libpogo -lpogo -lm -lg -lgcc
LIBS   = -Lgp32/libpogo -lpogo -Lgp32/sound -lgpsound
#CFLAGS = -I./ -DGP32 -Igp32/ -Igp32/libpogo/ -O2 -fno-builtin -ffreestanding -fno-exceptions -mcpu=arm9tdmi -mtune=arm9tdmi -nostdinc
CFLAGS = -I./ -DGP32 -Igp32/ -Igp32/libpogo/ -O3 -Igp32/sound/ -fno-builtin -ffreestanding -fno-exceptions -mcpu=arm9tdmi -mtune=arm9tdmi -nostdinc
#LDFLAGS = -Wl,-T gp32/lnkscript -nostartfiles -nostdlib
LDFLAGS = -Wl,-T gp32/lnkscript -Wl,--gc-sections

INSTALL         = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA    = @INSTALL_DATA@
prefix          = @prefix@
exec_prefix     = @exec_prefix@
bindir          = @bindir@
libdir          = @libdir@
sysconfdir      = @sysconfdir@

.SUFFIXES: .o .cpp .h

## Files
OBJS    = main.o Display.o Prefs.o SID.o REU.o IEC.o 1541fs.o \
          1541d64.o 1541t64.o 1541job.o SAM.o
OBJS2	= gp32/menu.o gp32/ui.o gp32/input.o gp32/gpmisc.o gp32/xlatgp32.o
SLOBJS  = $(OBJS) C64.o CPUC64.o VIC.o CIA.o CPU1541.o $(OBJS2)
PCOBJS  = $(OBJS) C64_PC.o CPUC64_PC.o VIC.o CIA.o CPU1541_PC.o $(OBJS2)
PCFLAGS = -DPRECISE_CPU_CYCLES=1 -DPRECISE_CIA_CYCLES=1 -DPC_IS_POINTER=0
SCOBJS  = $(OBJS) C64_SC.o CPUC64_SC.o VIC_SC.o CIA_SC.o CPU1541_SC.o \
		CPU_common.o $(OBJS2)
SCFLAGS = -DFRODO_SC
SRCS    = main.cpp Display.cpp Prefs.cpp SID.cpp REU.cpp IEC.cpp 1541fs.cpp \
          1541d64.cpp 1541t64.cpp 1541job.cpp SAM.cpp C64.cpp \
          C64_PC.cpp C64_SC.cpp CPUC64.cpp CPUC64_PC.cpp CPUC64_SC.cpp \
          VIC.cpp VIC_SC.cpp CIA.cpp CIA_SC.cpp CPU1541.cpp CPU1541_PC.cpp \
          CPU1541_SC.cpp CPU_common.cpp

#all: Frodo.gxb Frodo.fxe FrodoPC.gxb FrodoPC.fxe FrodoSC.gxb FrodoSC.fxe
all: Frodo.gxb Frodo.fxe FrodoPC.gxb FrodoPC.fxe

Frodo.elf: $(SLOBJS)
	$(CXX) -o Frodo.elf $(SLOBJS) $(LDFLAGS) $(LIBS)

FrodoPC.elf: $(PCOBJS)
	$(CXX) -o FrodoPC.elf $(PCOBJS) $(LDFLAGS) $(LIBS)

FrodoSC.elf: $(SCOBJS)
	$(CXX) -o FrodoSC.elf $(SCOBJS) $(LDFLAGS) $(LIBS)

clean:
	rm -f $(SLOBJS) $(PCOBJS) $(SCOBJS)
	rm -f Frodo FrodoPC FrodoSC
	rm -f *.fxe *.gxb *.elf

distclean: clean
	rm -rf autom4te.cache
	rm -f config.cache config.log config.status
	rm -f ../*~ *~ gp32/*~ gp32/libpogo/*~ gp32/libpogo/smfs/*~
	rm -f gp32/libpogo/*.o gp32/libpogo/*.a
	rm -f gp32/libpogo/smfs/*.o gp32/libpogo/smfs/*.a
	rm -f gp32/sound/*.o gp32/sound/*.a
	rm -f *.zip

srcdist: distclean
	tar Cczf ../.. ../../Frodo-4.1b-gp32-src.tar.gz Frodo-4.1b.gp32/        

bindist: Frodo.fxe FrodoPC.fxe
	zip frodo-b7.zip Frodo.fxe FrodoPC.fxe README.gp32 c64list.txt

depend dep:
	makedepend $(CPPFLAGS) -Y. $(SRCS) 2>/dev/null

%.gxb: %.elf
	$(OBJCOPY) -v -O binary $< $@

%.fxe: %.gxb
	$(B2FXE) -b fxelogo.bmp $< $@

.cpp.o:
	$(CC) $(INCLUDES) $(CFLAGS) -o $@ -c $*.cpp
       
.cpp.s:
	$(CC) $(INCLUDES) $(CFLAGS) $(EXTRAFLAGS) -o $@ -S $*.cpp -g0

C64_PC.o: C64.cpp C64.h C64_GP32.i CmdPipe.h CPUC64.h CPU1541.h VIC.h SID.h CIA.h REU.h IEC.h 1541job.h Display.h Prefs.h
	$(CC) $(INCLUDES) $(CFLAGS) $(PCFLAGS) -o $@ -c $*.cpp

CPUC64_PC.o: CPUC64.cpp CPUC64.h CPU_emulline.i C64.h VIC.h SID.h CIA.h REU.h IEC.h Display.h Version.h
	$(CC) $(INCLUDES) $(CFLAGS) $(PCFLAGS) -o $@ -c $*.cpp

CPU1541_PC.o: CPU1541.cpp CPU1541.h CPU_emulline.i 1541job.h C64.h CIA.h Display.h
	$(CC) $(INCLUDES) $(CFLAGS) $(PCFLAGS) -o $@ -c $*.cpp

C64_SC.o: C64_SC.cpp C64.h C64_GP32.i CmdPipe.h CPUC64.h CPU1541.h VIC.h SID.h CIA.h REU.h IEC.h 1541job.h Display.h Prefs.h
	$(CC) $(INCLUDES) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp

CPUC64_SC.o: CPUC64_SC.cpp CPUC64.h CPU_emulcycle.i CPU_common.h C64.h VIC.h SID.h CIA.h REU.h IEC.h Display.h Version.h
	$(CC) $(INCLUDES) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp

CPU1541_SC.o: CPU1541_SC.cpp CPU1541.h CPU_emulcycle.i CPU_common.h 1541job.h C64.h CIA.h Display.h
	$(CC) $(INCLUDES) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp

VIC_SC.o: VIC_SC.cpp VIC.h C64.h CPUC64.h Display.h Prefs.h
	$(CC) $(INCLUDES) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp

CIA_SC.o: CIA_SC.cpp CIA.h CPUC64.h CPU1541.h VIC.h Prefs.h
	$(CC) $(INCLUDES) $(CFLAGS) $(SCFLAGS) -o $@ -c $*.cpp

#-------------------------------------------------------------------------
# DO NOT DELETE THIS LINE -- make depend depends on it.

main.o: main_GP32.i sysdeps.h sysconfig.h main.h C64.h Display.h Prefs.h SAM.h
Display.o: Display_GP32.i sysdeps.h sysconfig.h Display.h main.h Prefs.h
Prefs.o: sysdeps.h sysconfig.h Prefs.h Display.h C64.h main.h
SID.o: SID_GP32.i sysdeps.h sysconfig.h SID.h Prefs.h
REU.o: sysdeps.h sysconfig.h REU.h CPUC64.h C64.h Prefs.h
IEC.o: sysdeps.h sysconfig.h IEC.h 1541fs.h 1541d64.h 1541t64.h Prefs.h
IEC.o: Display.h
1541fs.o: sysdeps.h sysconfig.h 1541fs.h IEC.h main.h Prefs.h
1541d64.o: sysdeps.h sysconfig.h 1541d64.h IEC.h Prefs.h
1541t64.o: sysdeps.h sysconfig.h 1541t64.h IEC.h Prefs.h
1541job.o: sysdeps.h sysconfig.h 1541job.h CPU1541.h CIA.h Prefs.h C64.h
SAM.o: sysdeps.h sysconfig.h SAM.h C64.h CPUC64.h CPU1541.h CIA.h Prefs.h
SAM.o: VIC.h SID.h
C64.o: C64_GP32.i
C64.o: sysdeps.h sysconfig.h C64.h CPUC64.h CPU1541.h CIA.h Prefs.h VIC.h
C64.o: SID.h REU.h IEC.h 1541job.h Display.h
C64_PC.o: C64.cpp sysdeps.h sysconfig.h C64.h CPUC64.h CPU1541.h CIA.h
C64_PC.o: Prefs.h VIC.h SID.h REU.h IEC.h 1541job.h Display.h
C64_SC.o: C64.cpp sysdeps.h sysconfig.h C64.h CPUC64.h CPU1541.h CIA.h
C64_SC.o: Prefs.h VIC.h SID.h REU.h IEC.h 1541job.h Display.h
CPUC64.o: sysdeps.h sysconfig.h CPUC64.h C64.h VIC.h SID.h CIA.h Prefs.h
CPUC64.o: REU.h IEC.h Display.h Version.h CPU_emulline.i
CPUC64_PC.o: CPUC64.cpp sysdeps.h sysconfig.h CPUC64.h C64.h VIC.h SID.h
CPUC64_PC.o: CIA.h Prefs.h REU.h IEC.h Display.h Version.h CPU_emulline.i
CPUC64_SC.o: sysdeps.h sysconfig.h CPUC64.h C64.h CPU_common.h VIC.h SID.h
CPUC64_SC.o: CIA.h Prefs.h REU.h IEC.h Display.h Version.h CPU_emulcycle.i
VIC.o: sysdeps.h sysconfig.h VIC.h C64.h CPUC64.h Display.h Prefs.h
VIC_SC.o: sysdeps.h sysconfig.h VIC.h C64.h CPUC64.h Display.h Prefs.h
CIA.o: sysdeps.h sysconfig.h CIA.h Prefs.h CPUC64.h C64.h CPU1541.h VIC.h
CIA_SC.o: sysdeps.h sysconfig.h CIA.h Prefs.h CPUC64.h C64.h CPU1541.h VIC.h
CPU1541.o: sysdeps.h sysconfig.h CPU1541.h CIA.h Prefs.h C64.h 1541job.h
CPU1541.o: Display.h CPU_emulline.i
CPU1541_PC.o: CPU1541.cpp sysdeps.h sysconfig.h CPU1541.h CIA.h Prefs.h C64.h
CPU1541_PC.o: 1541job.h Display.h CPU_emulline.i
CPU1541_SC.o: sysdeps.h sysconfig.h CPU1541.h CIA.h Prefs.h C64.h
CPU1541_SC.o: CPU_common.h 1541job.h Display.h CPU_emulcycle.i
CPU_common.o: sysdeps.h sysconfig.h CPU_common.h
