MAPPERDIR = mappers
MAPPERS = mappers/m0.o mappers/m1.o mappers/m2.o mappers/m3.o mappers/m4.o mappers/m7.o mappers/m8.o
TARGET = gleam!
OBJECTS = gleam!.o fileio.o emulate.o mem.o g6502.o mappers.o ppu.o debug.o x11.o dc.o soundlin.o sounddc.o M6502.o $(MAPPERS)

## FOR DC
AS = sh-elf-as -little
CC = sh-elf-gcc
DCCFLAGS = -ml -DNO_OUTPUT -DTARGET_DC -I../../libdream -I../../libc -I../../vmsfs -I../libdream
DCLFLAGS = -ml -Wl,-Ttext,0x8c010000 -L../../libdream -L../../libc -ldream -lc -lgcc
CRT0 = ../../libc/crt0.o
OBJECTS += asmcpu.o ../../vmsfs/vmsfs.o
SUBDIRS += dc_sound

## FOR X
#CC = gcc #-DDEBUG
#LFLAGS = -lreadline -L/usr/X11R6/lib -lGL -lX11 -O6

## For both
CFLAGS = -I. $(DCCFLAGS) -fomit-frame-pointer -finline-functions -ffast-math -O6

all: $(SUBDIRS) $(TARGET)

dreamcast: $(SUBDIRS) $(TARGET)-dc 

dc_sound: dc_sound/dcsmain.h

$(TARGET): $(OBJECTS) $(MAPPERDIR)
	$(CC) -o $(TARGET) $(OBJECTS) $(LFLAGS)

$(TARGET)-dc: $(OBJECTS) $(MAPPERDIR)
	$(CC) -nostartfiles -nostdlib -o $(TARGET)-dc.elf $(CRT0) $(OBJECTS) $(DCLFLAGS) 
	sh-elf-strip $(TARGET)-dc.elf
	sh-elf-objcopy -O srec $(TARGET)-dc.elf $(TARGET)-dc.srec

gleam!.o: gleam!.c gleam!.h
	$(CC) -c -o gleam!.o gleam!.c $(CFLAGS)

fileio.o: fileio.c fileio.h
	$(CC) -c -o fileio.o fileio.c $(CFLAGS)

emulate.o: emulate.c emulate.h
	$(CC) -c -o emulate.o emulate.c $(CFLAGS)

mem.o: mem.c mem.h
	$(CC) -c -o mem.o mem.c $(CFLAGS)

g6502.o: g6502.c g6502.h tables.h
	$(CC) -c -o g6502.o g6502.c $(CFLAGS)

mappers.o: mappers.c mappers.h tables.h
	$(CC) -c -o mappers.o mappers.c $(CFLAGS)

ppu.o: ppu.c ppu.h tables.h
	$(CC) -c -o ppu.o ppu.c $(CFLAGS)

debug.o: debug.c debug.h tables.h
	$(CC) -c -o debug.o debug.c $(CFLAGS)

glx.o: glx.c
	$(CC) -c -o glx.o glx.c $(CFLAGS)

dc.o: dc.c dc_sound/dcsmain.h
	$(CC) -c -o dc.o dc.c $(CFLAGS)

asmcpu.o: asmcpu.s asmcpu/immediate.s asmcpu/macros.h asmcpu/asmtables.h \
	asmcpu/zeropage.s

M6502.o: M6502.c

soundlin.o: soundlin.c soundlin.h
sounddc.o: sounddc.c sounddc.h

dc_sound/dcsmain.h:
	make -C dc_sound

$(MAPPERDIR):
	make -C $(MAPPERDIR) all

clean:
	rm -f $(OBJECTS) *~ 
	make -C $(MAPPERDIR) clean
	make -C dc_sound clean

cleanall: clean
	rm -f $(TARGET) log *.mem map.vram gleam\!-dc.{srec,elf} 
