# Virtua - Sega Model 2 emulator
#
# Makefile
#
# Copyright (c) 1999 Richard Mitton

# Options
VPATH   = src
CC      = gcc
CFLAGS  = -Wall -mpentium -Isrc/ -g -O3
NASM    = nasm
NASMFLAGS = -f coff -isrc/
AS      = gcc
LD      = gcc
RM      = del
AR      = ar

# Main targets
_all_: virtua.exe _dis_

# Games
GAMES = vf2a vf2b vf21 doa manxtt vcop2 daytona zerogunr gunblade

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

obj/%.o: %.cc
	$(CC) $(CFLAGS) -c $< -o $@

obj/%.o: %.asm
	$(NASM) $(NASMFLAGS) $< -o $@

obj/%.o: %.s
	$(AS) -c $< -o $@

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

################
# CPU emulator #
################

src/i960cpu.h: i960sys.h
	touch $@

obj/cpu.a: obj/i960cpu.o obj/i960asm.o

obj/i960cpu.o: i960cpu.c i960cpu.h i960opc.h
obj/i960asm.o: i960asm.asm i960asm.inc

####################
# CPU disassembler #
####################

obj/dasm.a: obj/i960dasm.o

obj/i960dasm.o: i960dasm.c i960dasm.h i960cpu.h i960opc.h

##########
# Virtua #
##########

virtua.exe: obj/virtua.o obj/debugger.o obj/registers.o obj/textview.o \
            obj/unzip.o obj/data.o obj/cpu.a obj/dasm.a obj/fps.o
	$(LD) $^ -o $@ -lgui -lalleg -lz

src/virtua.h: i960cpu.h
	touch $@

obj/virtua.o: virtua.cc virtua.h data.h unzip.h
obj/debugger.o: debugger.cc virtua.h i960dasm.h
obj/registers.o: registers.cc virtua.h
obj/textview.o: textview.cc virtua.h
obj/unzip.o: unzip.cc virtua.h unzip.h
obj/fps.o: fps.c fps.h

src/data.h src/data.s: virtua.dat
	dat2s -p data_ -h src/data.h -o src/data.s $<

############################
# Command-line diassembler #
############################

d960.exe: obj/d960.o obj/dasm.a
	$(LD) $^ -o $@

#################
# Disassemblies #
#################

.PHONY: _dis_
_dis_: $(foreach foo, $(GAMES), dasm/$(foo).dis)

dasm/%.dis: dasm/%.rom d960.exe
	d960 $< $@

###########
# Cleanup #
###########
.PHONY: clean
clean:
	cd obj
	$(RM) *.*
	cd ../src
	$(RM) data.s
	$(RM) data.h
	cd ..
	$(RM) virtua.exe
	$(RM) d960.exe
	$(RM) dasm\*.dis
	$(RM) error.log
	$(RM) debug.txt
	$(RM) io.txt
	$(RM) ram*.bin
	@echo Files removed.

######################
# Backup source code #
######################
.PHONY: backup
backup: clean
	cd src
	copy *.* backup
	copy ..\info.txt backup
	@echo Backup done.
