#Zlib
Z_LIB_DIR=  ./zlib/
Z_LIB    =  $(Z_LIB_DIR)libz.a

#unzip based on zlib.
UNZIP_DIR=  ./unzip/
UNZIP_LIB=  $(UNZIP_DIR)unzip.a

Z80_DIR  =  ./cpu
Z80_LIB  =  $(Z80_DIR)/z80_cpu.a
Z80_OBJS =  $(Z80_DIR)/z80.o $(Z80_DIR)/z80op1.o \
            $(Z80_DIR)/z80op2cb.o $(Z80_DIR)/z80op2dd.o \
            $(Z80_DIR)/z80op2ed.o $(Z80_DIR)/z80op2fd.o \
            $(Z80_DIR)/z80op3xycb.o $(Z80_DIR)/z80sub.o

DISASM_DIR = ./z80_disasm

# Uncomment this line before builting with internal debugger.
#OPT_OBJS   = $(DISASM_DIR)/Z80Dasm.o SmsDebugger.o 		

OSM_OBJS =      main.o \
                OsmoseCore.o\
                IOMapper.o \
                VDP.o \
                MemoryMapper.o \
                SmsEnvironment.o \
                SN76489.o \
                WaveWriter.o \
                PrecisionTimer.o \
		Options.o \
		OsmoseConfiguration.o \
		KeyConversion.o \
		NullVideoFilter.o \
		TvVideoFilter.o \
		MonochromVideoFilter.o \
		Scale2xVideoFilter.o \
		BilinearVideoFilter.o \
		TextWriter.o \
		PadInputDevice.o \
		PaddleInputDevice.o

OSM_EXE         =  osmose

# Compiler/Linker Flags
# add -O3 to CFLAGS for speedup -pg on LFLAGS and CFLAGS for gprof
CFLAGS =  -Wall -O3
LFLAGS =  -lSDL 
AFLAGS =  -f elf
CC  = g++
C_COMP = gcc
ASM = nasm

# Our needed rules. $* is current file, without suffix.
.SUFFIXES: .cxx .o
.cxx.o:
	$(CC) $(CFLAGS) -c $*.cxx -o $*.o

.SUFFIXES: .cpp .o
.cpp.o:
	$(CC) $(CFLAGS) -c $*.cpp -o $*.o

.SUFFIXES: .asm .o
.asm.o:
	$(ASM) $(AFLAGS) $*.asm

all: disasm z80_lib libs osmose

osmose: $(z80_lib) $(OSM_OBJS) $(OPT_OBJS) 
	$(CC)  $(CFLAGS) $(OSM_OBJS) $(Z80_LIB) $(OPT_OBJS) $(UNZIP_LIB) $(Z_LIB) -o $(OSM_EXE) $(LFLAGS)

z80_lib: $(Z80_OBJS)
	ar -rv $(Z80_LIB) $(Z80_DIR)/*.o

disasm: $(DISASM_OBJS)

clean:
	rm -f $(DISASM_DIR)/*.o
	rm -f $(Z80_DIR)/*.o $(Z80_DIR)/*.a
	rm -f *.o core $(OSM_EXE)
	rm -f $(Z_LIB_DIR)*.o $(Z_LIB_DIR)*.a
	rm -f $(UNZIP_DIR)*.o $(UNZIP_DIR)*.a

miniclean:
	rm -f *.o core $(OSM_EXE)

libs: 
	cd $(Z_LIB_DIR) && make libz.a
	cd $(UNZIP_DIR) && make unzip.a

	



