#
# makefile for CC65 runtime library
#

.SUFFIXES: .o .s .c

#--------------------------------------------------------------------------
# Programs and flags

SYS	= apple2

AS	= ../../src/ca65/ca65
CC	= ../../src/cc65/cc65
CO	= ../../src/co65/co65
LD	= ../../src/ld65/ld65

AFLAGS	= -t $(SYS) --forget-inc-paths -I../../asminc
CFLAGS	= -Osir -g -T -t $(SYS) --forget-inc-paths -I . -I ../../include

#--------------------------------------------------------------------------
# Rules

%.o:	%.c
	@$(CC) $(CFLAGS) $<
	@$(AS) -o $@ $(AFLAGS) $(*).s

%.o:	%.s
	@$(AS) -g -o $@ $(AFLAGS) $<

%-emd.o: %.emd
	@$(CO) -o $(*)-emd.s --code-label _$(subst -,_,$(*)) $<
	@$(AS) -o $@ $(AFLAGS) $(*)-emd.s

%-joy.o: %.joy
	@$(CO) -o $(*)-joy.s --code-label _$(subst -,_,$(*)) $<
	@$(AS) -o $@ $(AFLAGS) $(*)-joy.s

%-mou.o: %.mou
	@$(CO) -o $(*)-mou.s --code-label _$(subst -,_,$(*)) $<
	@$(AS) -o $@ $(AFLAGS) $(*)-mou.s

%-ser.o: %.ser
	@$(CO) -o $(*)-ser.s --code-label _$(subst -,_,$(*)) $<
	@$(AS) -o $@ $(AFLAGS) $(*)-ser.s

%-tgi.o: %.tgi
	@$(CO) -o $(*)-tgi.s --code-label _$(subst -,_,$(*)) $<
	@$(AS) -o $@ $(AFLAGS) $(*)-tgi.s

%.emd:	%.o ../runtime/zeropage.o
	@$(LD) -o $@ -t module $^

%.joy:	%.o ../runtime/zeropage.o
	@$(LD) -o $@ -t module $^

%.mou:	%.o ../runtime/zeropage.o
	@$(LD) -o $@ -t module $^

%.ser:	%.o ../runtime/zeropage.o
	@$(LD) -o $@ -t module $^

%.tgi:	%.o ../runtime/zeropage.o
	@$(LD) -o $@ -t module $^

#--------------------------------------------------------------------------
# Object files

C_OBJS=	closedir.o		\
	opendir.o		\
	readdir.o		\
	rewinddir.o

S_OBJS=	_scrsize.o		\
	break.o			\
	cclear.o		\
	cgetc.o			\
	chline.o		\
	close.o			\
	clrscr.o		\
	color.o			\
	cout.o			\
	cputc.o			\
	crt0.o			\
	ctype.o			\
	curdevice.o		\
	cvline.o		\
	devicedir.o		\
	dioclose.o		\
	diocommon.o		\
	dioopen.o		\
	dioread.o		\
	diosectcount.o		\
	diosectsize.o		\
	diowrite.o		\
	dosdetect.o		\
	exec.o			\
	exehdr.o		\
	filedes.o		\
	filename.o		\
	get_ostype.o		\
	getdevice.o		\
	gotoxy.o		\
	gotoy.o			\
	home.o			\
	initcwd.o		\
	iobuf.o			\
	isdevice.o		\
	joy_stat_stddrv.o	\
	joy_stddrv.o		\
	kbhit.o			\
	mainargs.o		\
	mcbdefault.o		\
	mli.o			\
	mouse_stat_stddrv.o	\
	mouse_stddrv.o		\
	open.o			\
	oserrlist.o		\
	oserror.o		\
	randomize.o		\
	rdkey.o			\
	read.o			\
	reboot.o		\
	revers.o		\
	rwcommon.o		\
	syschdir.o		\
	sysmkdir.o		\
	sysremove.o		\
	sysrename.o		\
	sysrmdir.o		\
	systime.o		\
	sysuname.o		\
	tgi_colors.o		\
	tgi_stat_stddrv.o	\
	tgi_stddrv.o		\
	toascii.o		\
	vtabz.o			\
	wherex.o		\
	wherey.o		\
	write.o			\
	$(EMDS:.emd=-emd.o)	\
	$(JOYS:.joy=-joy.o)	\
	$(MOUS:.mou=-mou.o)	\
	$(SERS:.ser=-ser.o)	\
	$(TGIS:.tgi=-tgi.o)

S_EXTRA_OBJS=			\
	extra/iobuf-0800.o

#--------------------------------------------------------------------------
# Drivers

EMDS = apple2-auxmem.emd

JOYS = apple2-stdjoy.joy

MOUS = apple2-stdmou.mou

SERS = apple2-ssc.ser

TGIS = apple2-280-192-8.tgi apple2-40-48-16.tgi

#--------------------------------------------------------------------------
# Targets

.PHONY:	all clean zap

all:	$(C_OBJS) $(S_OBJS) $(S_EXTRA_OBJS) $(EMDS) $(JOYS) $(MOUS) $(SERS) $(TGIS)

../runtime/zeropage.o:
	$(MAKE) -C $(dir $@) $(notdir $@)

clean:
	@$(RM) $(C_OBJS:.o=.s) $(C_OBJS) $(S_OBJS) $(S_EXTRA_OBJS) \
	       $(EMDS:.emd=.o) $(EMDS:.emd=-emd.s) \
	       $(JOYS:.joy=.o) $(JOYS:.joy=-joy.s) \
	       $(MOUS:.mou=.o) $(MOUS:.mou=-mou.s) \
	       $(SERS:.ser=.o) $(SERS:.ser=-ser.s) \
	       $(TGIS:.tgi=.o) $(TGIS:.tgi=-tgi.s)

zap:	clean
	@$(RM) $(EMDS) $(JOYS) $(MOUS) $(SERS) $(TGIS)
