include ../../Makefile.inc
NATIVECC = gcc
ARCHFLAGS = 
ARCHLIBS = 
DEBUGFLAGS = 
#AR = /opt/mipsel-linux-uclibc/usr/bin/mipsel-linux-ar

W_OPTS	= -Wall -Wno-write-strings -Wno-sign-compare

F_OPTS = -falign-functions -falign-loops -falign-labels -falign-jumps \
	-ffast-math -fsingle-precision-constant -funsafe-math-optimizations \
	-fomit-frame-pointer -fno-builtin -fno-common \
	-fstrict-aliasing  -fexpensive-optimizations \
	-finline -finline-functions -fpeel-loops
#-mbranch-likely  ? REVIST ?
CC_OPTS	= 
	  

CFLAGS += $(W_OPTS) $(F_OPTS) $(CC_OPTS) \
         -DGCCCONSTFUNC="__attribute__((const))" \
	 -D_REENTRANT \
	 -DREGPARAM= \
	 -DHAVE_STRLCPY \
	 -D__inline__=inline \
	 -Dfloat64=float \
	 $(ARCHFLAGS) \
	 -DAMIGA_OPEN_HACK

LIBRARIES = -lm $(AUDIOLIBS) $(ARCHLIBS)

# 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 \
	       -fno-strength-reduce \
	       -O2 \
	       -g

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

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

INCLUDES=-I. -I./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

libuade.a:	$(LIBOBJS)
	$(AR) rs $@ $(LIBOBJS) 
	cp libuade.a ../../libs

all:	uadecore

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

clean:
	-rm -f $(OBJS) *.o uade libuade.a uadecore
	-rm -f gencpu cpudefs.c
	-rm -f cpuemu.c build68k cputmp.s cpustbl.c cputbl.h

# 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
audio.o: include/uade.h include/events.h sd-sound.h include/gensound.h include/audio.h include/uadeconstants.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
