# Standard makefile to use as a base for DJGPP projects
# By MARTINEZ Fabrice aka SNK of SUPREMACY

# Programs to use during make
AR = ar
CC = gcc
LD = gcc
ASM = nasmw
PACKER = upx

# Flags for debugging
SYMBOLS=0

# Flags for compilation
ASMFLAGS = -f coff

ifdef SYMBOLS
LDFLAGS = 
else
LDFLAGS = -s
endif

CFLAGS = -fomit-frame-pointer -O3 -march=pentium -Werror -Wall \
	-W -Wno-sign-compare -Wno-unused \
	-Wpointer-arith -Wbad-function-cast -Wcast-align -Waggregate-return \
	-Wshadow \
	-Wstrict-prototypes

CDEFS = -DA68KEM
ASMDEFS =

# Object files
M68KOBJS = obj/mc68000/68kem.oa
MAINOBJS = obj/neocd.o obj/z80/z80.oa obj/z80/z80intrf.o obj/cheats/cheats.o obj/sound/stream.o \
	   obj/ym2610/ym2610.o obj/ym2610/adpcm.o

# Library files
LIBS = obj/memory.a obj/video.a obj/input.a obj/cdrom.a obj/cdaudio.a \
	obj/config.a obj/gui.a obj/winlow.a -lalleg -laudio

# Make rules
all: neocd.exe

neocd.exe:	$(M68KOBJS) $(MAINOBJS) $(LIBS)
		$(LD) $(LDFLAGS) $(M68KOBJS) $(MAINOBJS) $(LIBS) -o $@

src/mc68000/68kem.asm:  src/mc68000/make68k.c
	 $(CC) $(CDEFS) $(CFLAGS) -DDOS -o src/mc68000/make68k.exe $<
	 src/mc68000/make68k $@

src/z80/z80.asm:	src/z80/makez80.c
	$(CC) -o src/z80/makez80.exe $<
	src/z80/makez80 $@ -s -x86

src/%.asm:

obj/%.o:	src/%.c
		$(CC) $(CDEFS) $(DEBUGDEF) $(CFLAGS) -c $< -o $@

obj/%.oa:	src/%.asm
		$(ASM) -o $@ $(ASMFLAGS) $(ASMDEFS) $<

obj/%.a:
		$(AR) cr $@ $^

# Rules to manage files
pack:		neocd.exe
		$(PACKER) neocd.exe

mkdir:
		md obj
		md obj\mc68000
		md obj\memory
		md obj\cdrom
		md obj\video
		md obj\cdaudio
		md obj\cheats
		md obj\input
		md obj\config
		md obj\gui
		md obj\winlow
		md obj\z80
		md obj\ym2610
		md obj\sound

clean:
		del obj\*.o*
		del obj\memory\*.o*
		del obj\mc68000\*.o*
		del obj\cdrom\*.o*
		del obj\video\*.o*
		del obj\cdaudio\*.o*
		del obj\cheats\*.o*
		del obj\input\*.o*
		del obj\gui\*.o*
		del obj\winlow\*.o*
		del obj\z80\*.o*
		del obj\ym2610\*.o*
		del obj\sound\*.o*
		del neocd.exe

# Rules to make libraries

obj/memory.a	:	obj/memory/memory.oa
obj/cdrom.a	:	obj/cdrom/extract8.oa obj/cdrom/cdrom.o
obj/video.a	:	obj/video/video.o obj/video/draw_fix.oa obj/video/blit.oa
obj/cdaudio.a	:	obj/cdaudio/cdaudio.o
obj/input.a	:	obj/input/input.o obj/input/macro.o
obj/config.a	:	obj/config/config.o
obj/gui.a	:	obj/gui/gui.o
obj/winlow.a	:	obj/winlow/winlow.o obj/winlow/winlow.oa
