#
# Makefile.dos for UAE
#

CC        = gcc
CPP       = gcc -E
CFLAGS    = -O3 -fomit-frame-pointer -fstrength-reduce -malign-jumps=0 -malign-loops=0 -malign-functions=0 -Wall -Wno-unused -Wno-format -W -Wmissing-prototypes -Wstrict-prototypes -D__DOS__ -DX86_ASSEMBLY -D__inline__=inline -DSTATFS_NO_ARGS=2 -DSTATBUF_BAVAIL=f_bfree
CFLAGS_NOT_OPT = -D__DOS__ -DX86_ASSEMBLY -D__inline__=inline -DSTATFS_NO_ARGS=2 -DSTATBUF_BAVAIL=f_bfree
GFXOBJS   = dos-vbe.o dos-ui.o
ASMOBJS   = X86.o
CPUOBJS   = cpufast0.o cpufast1.o cpufast2.o cpufast3.o cpufast4.o cpufast5.o cpufast6.o cpufast7.o cpufast8.o cpufast9.o cpufastA.o cpufastB.o cpufastC.o cpufastD.o cpufastE.o cpufastF.o

.SUFFIXES: .o .c .h .m

INCLUDES=-Iinclude

OBJS = main.o newcpu.o memory.o debug.o custom.o cia.o disk.o blitter.o $(GFXOBJS) \
       autoconf.o os.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 $(ASMOBJS) \
       serial.o uaelib.o $(CPUOBJS) cpustbl.o dos-sb.o dos-dma.o

all: uae.exe readdisk.exe

readdisk.exe: readdisk.o
	$(CC) readdisk.o -o readdisk
	strip readdisk
	coff2exe readdisk

uae.exe: $(OBJS)
	$(CC) $(OBJS) -o uae -lm
	strip uae
	coff2exe uae

clean:
	-del *.o
	-del uae
	-del uae.exe
	-del readdisk
	-del readdisk.exe
	-del gencpu.exe
	-del genblitter.exe
	-del build68k.exe
	-del cpudefs.c
	-del cpuopti.exe
	-del cpu?.c
	-del blit.h
	-del cputbl.h
	-del cpustbl.c
	-del cpufast?.s
	-del blitfunc.c
	-del blitfunc.h
	-del blittable.c
	-del config.h

halfclean:
	-del *.o

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

genblitter.exe: genblitter.o
	$(CC) $(LDFLAGS) -o genblitter.exe genblitter.o
build68k.exe: build68k.o
	$(CC) $(LDFLAGS) -o build68k.exe build68k.o
cpuopti.exe: cpuopti.o
	$(CC) $(LDFLAGS) -o cpuopti.exe cpuopti.o
gencpu.exe: gencpu.o readcpu.o cpudefs.o
	$(CC) $(LDFLAGS) -o gencpu.exe gencpu.o readcpu.o cpudefs.o

custom.o: blit.h

cpudefs.c: build68k.exe table68k
	build68k >cpudefs.c
cpustbl.c: gencpu.exe
	gencpu s >cpustbl.c
cputbl.c: gencpu.exe
	gencpu t >cputbl.c
cputbl.h: gencpu.exe
	gencpu h >cputbl.h

cpu0.c: gencpu.exe
	gencpu f 0 >cpu0.c
cpu1.c: gencpu.exe
	gencpu f 1 >cpu1.c
cpu2.c: gencpu.exe
	gencpu f 2 >cpu2.c
cpu3.c: gencpu.exe
	gencpu f 3 >cpu3.c
cpu4.c: gencpu.exe
	gencpu f 4 >cpu4.c
cpu5.c: gencpu.exe
	gencpu f 5 >cpu5.c
cpu6.c: gencpu.exe
	gencpu f 6 >cpu6.c
cpu7.c: gencpu.exe
	gencpu f 7 >cpu7.c
cpu8.c: gencpu.exe
	gencpu f 8 >cpu8.c
cpu9.c: gencpu.exe
	gencpu f 9 >cpu9.c
cpuA.c: gencpu.exe
	gencpu f 10 >cpuA.c
cpuB.c: gencpu.exe
	gencpu f 11 >cpuB.c
cpuC.c: gencpu.exe
	gencpu f 12 >cpuC.c
cpuD.c: gencpu.exe
	gencpu f 13 >cpuD.c
cpuE.c: gencpu.exe
	gencpu f 14 >cpuE.c
cpuF.c: gencpu.exe
	gencpu f 15 >cpuF.c

cpu0.o: cpu0.c cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.c
cpu1.o: cpu1.c cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.c
cpu2.o: cpu2.c cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.c
cpu3.o: cpu3.c cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.c
cpu4.o: cpu4.c cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.c
cpu5.o: cpu5.c cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.c
cpu6.o: cpu6.c cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.c
cpu7.o: cpu7.c cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.c
cpu8.o: cpu8.c cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.c
cpu9.o: cpu9.c cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.c
cpuA.o: cpuA.c cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.c
cpuB.o: cpuB.c cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.c
cpuC.o: cpuC.c cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.c
cpuD.o: cpuD.c cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.c
cpuE.o: cpuE.c cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.c
cpuF.o: cpuF.c cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.c

cpufast0.o: cpufast0.s cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.s
cpufast1.o: cpufast1.s cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.s
cpufast2.o: cpufast2.s cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.s
cpufast3.o: cpufast3.s cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.s
cpufast4.o: cpufast4.s cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.s
cpufast5.o: cpufast5.s cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.s
cpufast6.o: cpufast6.s cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.s
cpufast7.o: cpufast7.s cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.s
cpufast8.o: cpufast8.s cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.s
cpufast9.o: cpufast9.s cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.s
cpufastA.o: cpufastA.s cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.s
cpufastB.o: cpufastB.s cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.s
cpufastC.o: cpufastC.s cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.s
cpufastD.o: cpufastD.s cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.s
cpufastE.o: cpufastE.s cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.s
cpufastF.o: cpufastF.s cputbl.h
	$(CC) $(INCLUDES) -c $(CFLAGS) $*.s

cpufast0.s: cpu0.c cputbl.h cpuopti.exe
	$(CC) $(INCLUDES) -S $(CFLAGS) $< -o cpu-tmp.s
	cpuopti <cpu-tmp.s >$@
	del cpu-tmp.s
cpufast1.s: cpu1.c cputbl.h cpuopti.exe
	$(CC) $(INCLUDES) -S $(CFLAGS) $< -o cpu-tmp.s
	cpuopti <cpu-tmp.s >$@
	del cpu-tmp.s
cpufast2.s: cpu2.c cputbl.h cpuopti.exe
	$(CC) $(INCLUDES) -S $(CFLAGS) $< -o cpu-tmp.s
	cpuopti <cpu-tmp.s >$@
	del cpu-tmp.s
cpufast3.s: cpu3.c cputbl.h cpuopti.exe
	$(CC) $(INCLUDES) -S $(CFLAGS) $< -o cpu-tmp.s
	cpuopti <cpu-tmp.s >$@
	del cpu-tmp.s
cpufast4.s: cpu4.c cputbl.h cpuopti.exe
	$(CC) $(INCLUDES) -S $(CFLAGS) $< -o cpu-tmp.s
	cpuopti <cpu-tmp.s >$@
	del cpu-tmp.s
cpufast5.s: cpu5.c cputbl.h cpuopti.exe
	$(CC) $(INCLUDES) -S $(CFLAGS) $< -o cpu-tmp.s
	cpuopti <cpu-tmp.s >$@
	del cpu-tmp.s
cpufast6.s: cpu6.c cputbl.h cpuopti.exe
	$(CC) $(INCLUDES) -S $(CFLAGS) $< -o cpu-tmp.s
	cpuopti <cpu-tmp.s >$@
	del cpu-tmp.s
cpufast7.s: cpu7.c cputbl.h cpuopti.exe
	$(CC) $(INCLUDES) -S $(CFLAGS) $< -o cpu-tmp.s
	cpuopti <cpu-tmp.s >$@
	del cpu-tmp.s
cpufast8.s: cpu8.c cputbl.h cpuopti.exe
	$(CC) $(INCLUDES) -S $(CFLAGS) $< -o cpu-tmp.s
	cpuopti <cpu-tmp.s >$@
	del cpu-tmp.s
cpufast9.s: cpu9.c cputbl.h cpuopti.exe
	$(CC) $(INCLUDES) -S $(CFLAGS) $< -o cpu-tmp.s
	cpuopti <cpu-tmp.s >$@
	del cpu-tmp.s
cpufastA.s: cpuA.c cputbl.h cpuopti.exe
	$(CC) $(INCLUDES) -S $(CFLAGS) $< -o cpu-tmp.s
	cpuopti <cpu-tmp.s >$@
	del cpu-tmp.s
cpufastB.s: cpuB.c cputbl.h cpuopti.exe
	$(CC) $(INCLUDES) -S $(CFLAGS) $< -o cpu-tmp.s
	cpuopti <cpu-tmp.s >$@
	del cpu-tmp.s
cpufastC.s: cpuC.c cputbl.h cpuopti.exe
	$(CC) $(INCLUDES) -S $(CFLAGS) $< -o cpu-tmp.s
	cpuopti <cpu-tmp.s >$@
	del cpu-tmp.s
cpufastD.s: cpuD.c cputbl.h cpuopti.exe
	$(CC) $(INCLUDES) -S $(CFLAGS) $< -o cpu-tmp.s
	cpuopti <cpu-tmp.s >$@
	del cpu-tmp.s
cpufastE.s: cpuE.c cputbl.h cpuopti.exe
	$(CC) $(INCLUDES) -S $(CFLAGS) $< -o cpu-tmp.s
	cpuopti <cpu-tmp.s >$@
	del cpu-tmp.s
cpufastF.s: cpuF.c cputbl.h cpuopti.exe
	$(CC) $(INCLUDES) -S $(CFLAGS) $< -o cpu-tmp.s
	cpuopti <cpu-tmp.s >$@
	del cpu-tmp.s

X86.o: X86.S
	$(CC) $(INCLUDES) -c $(CFLAGS) X86.S

gencpu.o: gencpu.c
	$(CC) $(INCLUDES) -c $(CFLAGS_NOT_OPT) gencpu.c

.m.o:
	$(CC) $(INCLUDES) -c $(CFLAGS) $(DEBUGFLAGS) $*.m
.c.o:
	$(CC) $(INCLUDES) -c $(CFLAGS) $(DEBUGFLAGS) $*.c
.c.s:
	$(CC) $(INCLUDES) -S $(CFLAGS) $*.c
.S.o:
	$(CC) $(INCLUDES) -c $(CFLAGS) $(DEBUGFLAGS) $*.S

# Saves recompiling...
touch:
	touch *.o
	touch build68k
	touch cpudefs.*
	touch gencpu.exe
	touch genblitter.exe
	touch cpu*.*

# Some more dependencies...
cpustbl.o: cputbl.h
cputbl.o: cputbl.h

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

main.o: config.h
cia.o: config.h include/events.h
custom.o: config.h include/events.h
newcpu.o: config.h include/events.h
autoconf.o: config.h
expansion.o: config.h
xwin.o: config.h
svga.o: config.h
bebox.o: config.h
os.o: config.h
memory.o: config.h
debug.o: config.h
fpp.o: config.h
ersatz.o: config.h
disk.o: config.h include/events.h
blitter.o: config.h include/events.h

config.h: ../config.h
	-copy ..\config.h
