# UADE Library Makefile for PSP
#    2002 - 2005, UADE Team.

PSPSDK=$(shell psp-config --pspsdk-path)
PSPDIR=$(shell psp-config --psp-prefix)

CC = psp-gcc
NATIVECC = gcc
ARCHFLAGS =
ARCHLIBS =
DEBUGFLAGS =
AR = psp-ar

CFLAGS = -Wall -Wno-unused -Wno-format -Wmissing-prototypes \
		 -Wstrict-prototypes -fno-exceptions -O2 \
		 -G0 -DREGPARAM= \
		 -DPSP -Dfloat64=float

# Native flags are used to build tools that generate new code that is then
# compiled with the target compiler.
NATIVECFLAGS = -Wall -Wno-unused -Wno-format -Wmissing-prototypes 
		 -Wstrict-prototypes -fno-exceptions -O2 \
		 -G0 -DREGPARAM=

.SUFFIXES: .a .o .c .h .S

.SECONDARY: cpuemu.c cpustbl.c cputbl.h

INCLUDES = -I. -Iinclude -I/usr/local/pspdev/psp/sdk/include

CPUEMUOBJS = cpuemu1.o cpuemu2.o cpuemu3.o cpuemu4.o cpuemu5.o cpuemu6.o cpuemu7.o cpuemu8.o

BASEOBJS = newcpu.o memory.o custom.o cia.o audio.o compiler.o cpustbl.o \
           missing.o sd-sound.o md-support.o cfgfile.o fpp.o debug.o \
           readcpu.o cpudefs.o $(CPUEMUOBJS) \
           uade.o players.o strlrep.o uadeipc.o uademain.o

OBJS = main.o $(BASEOBJS) unixatomic.o ossupport.o ipcsupport.o
LIBOBJS = $(BASEOBJS) simpleipc.o simplesupport.o

all:	uadecore

uadecore:	$(OBJS)
	$(CC) $(ARCHFLAGS) $(DEBUGFLAGS) $(LIBRARIES) $(MATHLIB) -o $@ $(OBJS)

libuade.a:	$(LIBOBJS)
	$(AR) rs $@ $(LIBOBJS)
	$(CP) -fv libuade.a ../lib

# First native builds

build68k: build68k.o
	$(NATIVECC) $(NATIVECFLAGS) $(INCLUDES) -o build68k build68k.o

gencpu:	gencpu.o nativereadcpu.o nativecpudefs.o nativemissing.o
	$(NATIVECC) $(NATIVECFLAGS) $(INCLUDES) -o gencpu gencpu.o nativereadcpu.o nativecpudefs.o nativemissing.o

build68k.o:	build68k.c include/readcpu.h
	$(NATIVECC) $(NATIVECFLAGS) $(INCLUDES) -c $<

gencpu.o:	gencpu.c include/readcpu.h
	$(NATIVECC) $(NATIVECFLAGS) $(INCLUDES) -c $<

nativereadcpu.o:	readcpu.c include/readcpu.h
	$(NATIVECC) $(NATIVECFLAGS) $(INCLUDES) -c -o $@ $<

nativemissing.o:	missing.c
	$(NATIVECC) $(NATIVECFLAGS) $(INCLUDES) -c -o $@ $<

#cpuemu.c cputbl.h cpustbl.c: gencpu
#	./gencpu

nativecpudefs.o:	cpudefs.c include/readcpu.h
	$(NATIVECC) $(NATIVECFLAGS) $(INCLUDES) -c -o $@ $<

#cpudefs.c:	build68k table68k
#	./build68k <./table68k >cpudefs.c


# Then target builds

cpustbl.o: cpuemu.c
	$(CC) $(INCLUDES) -c $(INCDIRS) $(CFLAGS) $(X_CFLAGS) $(DEBUGFLAGS) -o $@ cpustbl.c

cpuemu1.o: cpuemu.c
	$(CC) -DPART_1 $(INCLUDES) -c $(INCDIRS) $(CFLAGS) $(X_CFLAGS) $(DEBUGFLAGS) -o $@ $<

cpuemu2.o: cpuemu.c
	$(CC) -DPART_2 $(INCLUDES) -c $(INCDIRS) $(CFLAGS) $(X_CFLAGS) $(DEBUGFLAGS) -o $@ $<

cpuemu3.o: cpuemu.c
	$(CC) -DPART_3 $(INCLUDES) -c $(INCDIRS) $(CFLAGS) $(X_CFLAGS) $(DEBUGFLAGS) -o $@ $<

cpuemu4.o: cpuemu.c
	$(CC) -DPART_4 $(INCLUDES) -c $(INCDIRS) $(CFLAGS) $(X_CFLAGS) $(DEBUGFLAGS) -o $@ $<

cpuemu5.o: cpuemu.c
	$(CC) -DPART_5 $(INCLUDES) -c $(INCDIRS) $(CFLAGS) $(X_CFLAGS) $(DEBUGFLAGS) -o $@ $<

cpuemu6.o: cpuemu.c
	$(CC) -DPART_6 $(INCLUDES) -c $(INCDIRS) $(CFLAGS) $(X_CFLAGS) $(DEBUGFLAGS) -o $@ $<

cpuemu7.o: cpuemu.c
	$(CC) -DPART_7 $(INCLUDES) -c $(INCDIRS) $(CFLAGS) $(X_CFLAGS) $(DEBUGFLAGS) -o $@ $<

cpuemu8.o: cpuemu.c
	$(CC) -DPART_8 $(INCLUDES) -c $(INCDIRS) $(CFLAGS) $(X_CFLAGS) -Wno-sign-compare $(DEBUGFLAGS) -o $@ $<

custom.o:	include/audio.h

.rc.res:
	$(WRC) $(INCLUDES) $<
.m.o:
	$(CC) $(INCLUDES) -c $(INCDIRS) $(CFLAGS) $(X_CFLAGS) $(DEBUGFLAGS) $<
.c.o:
	$(CC) $(INCLUDES) -c $(INCDIRS) $(CFLAGS) $(X_CFLAGS) $(DEBUGFLAGS) $< -o $@
.c.s:
	$(CC) $(INCLUDES) -S $(INCDIRS) $(CFLAGS) $(X_CFLAGS) $(DEBUGFLAGS) $< -o $@
.c.i:
	$(CC) $(INCLUDES) -E $(INCDIRS) $(CFLAGS) $(X_CFLAGS) $(DEBUGFLAGS) $< > $@
.S.o:
	$(CC) $(INCLUDES) -c $(INCDIRS) $(CFLAGS) $(X_CFLAGS) $(DEBUGFLAGS) $< -o $@
.s.o:
	$(CC) $(INCLUDES) -c $(INCDIRS) $(CFLAGS) $(X_CFLAGS) $(DEBUGFLAGS) $< -o $@

# Saves recompiling...
touch:
	touch *.o; touch build68k; touch cpudefs.c; touch cpudefs.o; touch gencpu; touch cpuemu.c; touch cpuemu*.o cpufast.o

cpudefs.o:	cpudefs.c include/readcpu.h
readcpu.o:	readcpu.c include/readcpu.h

main.o:	include/uae.h
uademain.o:	include/uae.h
cia.o: include/events.h
custom.o: include/events.h
newcpu.o: newcpu.c include/uade.h include/events.h include/uadeipc.h
	$(CC) $(INCLUDES) -c $(INCDIRS) $(CFLAGS) $(X_CFLAGS) $(DEBUGFLAGS) newcpu.c

sd-sound.o:	include/uade.h sd-sound.c sd-sound.h include/uadeconstants.h sd-sound-generic.h sd-sound-generic.c
audio.o: include/uade.h include/events.h sd-sound.h include/gensound.h include/audio.h include/uadeconstants.h sd-sound-generic.h
memory.o:
debug.o:
fpp.o:

uade.o: include/uade.h sd-sound.h include/uadeipc.h include/uadeconstants.h

uadeipc.o:	include/uadeipc.h

players.o:	players.c players.h

ossupport.o:	include/uade.h ossupport.c unixsupport.c include/unixsupport.h

ipcsupport.o:	include/uade.h ipcsupport.c include/ipcsupport.h unixipc.c

_clean:
	$(RM) -f *.o *.a

include $(PSPSDK)/lib/build.mak
