#
# Makefile.in for UAE
#


CC        = gcc -g -fomit-frame-pointer -fno-strict-aliasing -march=nocona -msse2
#CC        = gcc -g -pg
WRC       = not-found
CPP       = $(CC) -E
LDFLAGS   =  -L.

CFLAGS    = \
 -O2 \
 -Wall -Wno-unused -Wno-format -W -Wmissing-prototypes -Wstrict-prototypes \
 -DGCCCONSTFUNC="__attribute__((const))" \
 -DUNALIGNED_PROFITABLE \
 -DOPTIMIZED_FLAGS \
 -DREGPARAM="__attribute__((regparm(3)))" \
 -DUSE_ZFILE

#X_CFLAGS  =  -I/usr/pkg/include -DUSE_DGA_EXTENSION -I/usr/pkg/xorg/include -DSHM_SUPPORT_LINKS=1
X_CFLAGS  =  -I/usr/pkg/include -DUSE_DGA_EXTENSION -I/usr/X11R7/include -DSHM_SUPPORT_LINKS=1

TARGET    = x11
#LIBRARIES =  -L/usr/pkg/lib -L/usr/X11R7/lib -lSM -lICE -lXxf86dga -lXxf86vm -lXext -lX11 -Wl,-R/usr/pkg/lib -Wl,-R/usr/X11R7/lib -lvncserver -lintl -lXi -lXext -lX11 -lossaudio -lm
LIBRARIES =  -L/usr/pkg/lib -Wl,-R/usr/pkg/lib -lvncserver -lintl -lossaudio -lm
MATHLIB   = -lm
RESOBJS   = 

NO_SCHED_CFLAGS = 

INSTALL         = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA    = @INSTALL_DATA@
prefix          = /usr/local
exec_prefix     = ${prefix}
bindir          = ${exec_prefix}/bin
libdir          = ${exec_prefix}/lib
sysconfdir      = ${prefix}/etc

VPATH = ../src

.SUFFIXES: .o .c .h .m .i .S .rc .res

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

INCLUDES=-I. -I../src/include/

MINCS=\
include/newcpu.h \
include/memory.h \
include/mmu.h \
include/compiler.h

OBJS =\
main.o newcpu.o mmu.o memory.o cpufast.o custom.o events.o cia.o\
serial.o blitter.o autoconf.o ersatz.o filesys.o hardfile.o keybuf.o\
expansion.o zfile.o fpp.o readcpu.o cpudefs.o gfxutil.o gfxlib.o\
blitfunc.o blittable.o disk.o audio.o compiler.o uaelib.o drawing.o\
picasso96.o cpustbl.o uaeexe.o bsdsocket.o missing.o sd-sound.o\
od-joy.o md-support.o fsusage.o cfgfile.o native2amiga.o fsdb_unix.o\
fsdb.o identify.o savestate.o writelog.o console.o md-X86.o vnc.o\
xkey.o nogui.o debug.o scsi-none.o wdc.o lance.o


all: $(TARGET)

x11: progs

svgalib: progs

win32: progs $(RESOBJS)
	$(WRC) $(RESOBJS) uae.exe

ggilib: progs

asciiart: progs

amigaos: progs

p_os: progs

beos: progs

next: progs
	cp uae ../Uae.app/Uae

progs: uae readdisk

install:

readdisk: readdisk.o missing.o
	$(CC) readdisk.o missing.o -o readdisk $(LDFLAGS) $(DEBUGFLAGS)

uae: $(OBJS)
	$(CC) $(OBJS) -o uae $(GFXLDFLAGS) $(LDFLAGS) $(DEBUGFLAGS) $(LIBRARIES) $(MATHLIB)

clean:
	$(MAKE) -C tools clean
	-rm -f $(OBJS) *.o uae readdisk
	-rm -f blit.h cpudefs.c
	-rm -f cpuemu.c build68k cputmp.s cpufast*.s cpustbl.c cputbl.h
	-rm -f blitfunc.c blitfunc.h blittable.c

halfclean:
	-rm -f $(OBJS)

streifenfrei: clean
	-rm -f Makefile sysconfig.h
	-rm -f od-joy.c md-X86.S sd-sound.c md-support.c
	-rm -f machdep osdep threaddep sounddep target.h config.h

blit.h: tools/genblitter
	./tools/genblitter i >blit.h
blitfunc.c: tools/genblitter blitfunc.h
	./tools/genblitter f >blitfunc.c
blitfunc.h: tools/genblitter
	./tools/genblitter h >blitfunc.h
blittable.c: tools/genblitter blitfunc.h
	./tools/genblitter t >blittable.c

tools/genblitter:
	$(MAKE) -C tools genblitter
tools/build68k:
	$(MAKE) -C tools build68kc
tools/cpuopti:
	$(MAKE) -C tools cpuopti
tools/gencpu: gencpu.c $(MINCS)
	$(MAKE) -C tools gencpu

custom.o: blit.h
drawing.o: linetoscr.c

cpudefs.c: tools/build68k ../src/table68k
	./tools/build68k <../src/table68k >cpudefs.c

cpuemu.c: tools/gencpu ../src/table68k
	./tools/gencpu

# gencpu also creates cpustbl.c and cputbl.h
cpustbl.c: cpuemu.c ../src/table68k
cputbl.h: cpuemu.c ../src/table68k

#cpufast.s: cpuemu.c tools/cpuopti ../src/table68k
#	$(CC) $(INCLUDES) -S $(INCDIRS) $(CFLAGS) $(X_CFLAGS) $(DEBUGFLAGS) $(NO_SCHED_CFLAGS) $< -o cputmp.s
#	./tools/cpuopti <cputmp.s >$@
#	rm cputmp.s
cpufast.s: cpuemu.c ../src/table68k $(MINCS)
	$(CC) $(INCLUDES) -S $(INCDIRS) $(CFLAGS) $(X_CFLAGS) $(DEBUGFLAGS) $(NO_SCHED_CFLAGS) $< -o cpufast.s

console_missing.o: missing.c
	$(CC) $(INCLUDES) -c $(INCDIRS) $(CFLAGS) $(X_CFLAGS) $(DEBUGFLAGS) $(CFLAGS_$@) $< -o $@

osdep/beos.o: osdep/beos.cpp
	$(CC) $(INCLUDES) -c $(INCDIRS) $(CFLAGS) $(X_CFLAGS) $(DEBUGFLAGS) osdep/beos.cpp -o osdep/beos.o

.rc.res:
	$(WRC) $(INCLUDES) $<
.m.o:
	$(CC) $(INCLUDES) -c $(INCDIRS) $(CFLAGS) $(X_CFLAGS) $(DEBUGFLAGS) $<
.c.o:
	$(CC) $(INCLUDES) -c $(INCDIRS) $(CFLAGS) $(X_CFLAGS) $(DEBUGFLAGS) $(CFLAGS_$@) $< -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 cpuopti.o cpuopti cpuemu.o cpufast.s cpufast.o

build68k.o: include/readcpu.h
readcpu.o: include/readcpu.h

main.o: config.h
cia.o: config.h include/events.h $(MINCS)
custom.o: config.h include/events.h blit.h $(MINCS)
events.o: include/events.h
newcpu.o: config.h include/events.h $(MINCS)
autoconf.o: config.h
expansion.o: config.h
xwin.o: config.h
vnc.o: config.h
xkey.o: config.h
svga.o: config.h
audio.o: config.h include/events.h
memory.o: config.h $(MINCS)
debug.o: config.h
identify.o: config.h
fpp.o: config.h
ersatz.o: config.h
filesys.o: config.h
execlib.o: config.h
disk.o: config.h include/events.h
blitter.o: config.h include/events.h blit.h

# sam: this is for people with low memory. (is there a way do do this with a single rule ?)
cpufast1.s: cpuemu.c cpuopti
	$(CC) -DPART_1 $(INCLUDES) -S $(INCDIRS) $(CFLAGS) $(X_CFLAGS) $(DEBUGFLAGS) $(NO_SCHED_CFLAGS) $< -o cputmp1.s
	./tools/cpuopti <cputmp1.s >$@
	rm cputmp1.s
cpufast2.s: cpuemu.c cpuopti
	$(CC) -DPART_2 $(INCLUDES) -S $(INCDIRS) $(CFLAGS) $(X_CFLAGS) $(DEBUGFLAGS) $(NO_SCHED_CFLAGS) $< -o cputmp2.s
	./tools/cpuopti <cputmp2.s >$@
	rm cputmp2.s
cpufast3.s: cpuemu.c cpuopti
	$(CC) -DPART_3 $(INCLUDES) -S $(INCDIRS) $(CFLAGS) $(X_CFLAGS) $(DEBUGFLAGS) $(NO_SCHED_CFLAGS) $< -o cputmp3.s
	./tools/cpuopti <cputmp3.s >$@
	rm cputmp3.s
cpufast4.s: cpuemu.c cpuopti
	$(CC) -DPART_4 $(INCLUDES) -S $(INCDIRS) $(CFLAGS) $(X_CFLAGS) $(DEBUGFLAGS) $(NO_SCHED_CFLAGS) $< -o cputmp4.s
	./tools/cpuopti <cputmp4.s >$@
	rm cputmp4.s
cpufast5.s: cpuemu.c cpuopti
	$(CC) -DPART_5 $(INCLUDES) -S $(INCDIRS) $(CFLAGS) $(X_CFLAGS) $(DEBUGFLAGS) $(NO_SCHED_CFLAGS) $< -o cputmp5.s
	./tools/cpuopti <cputmp5.s >$@
	rm cputmp5.s
cpufast6.s: cpuemu.c cpuopti
	$(CC) -DPART_6 $(INCLUDES) -S $(INCDIRS) $(CFLAGS) $(X_CFLAGS) $(DEBUGFLAGS) $(NO_SCHED_CFLAGS) $< -o cputmp6.s
	./tools/cpuopti <cputmp6.s >$@
	rm cputmp6.s
cpufast7.s: cpuemu.c cpuopti
	$(CC) -DPART_7 $(INCLUDES) -S $(INCDIRS) $(CFLAGS) $(X_CFLAGS) $(DEBUGFLAGS) $(NO_SCHED_CFLAGS) $< -o cputmp7.s
	./tools/cpuopti <cputmp7.s >$@
	rm cputmp7.s
cpufast8.s: cpuemu.c cpuopti
	$(CC) -DPART_8 $(INCLUDES) -S $(INCDIRS) $(CFLAGS) $(X_CFLAGS) $(DEBUGFLAGS) $(NO_SCHED_CFLAGS) $< -o cputmp8.s
	./tools/cpuopti <cputmp8.s >$@
	rm cputmp8.s

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) $(DEBUGFLAGS) $< -o $@
