#
# Z80 emulator
#
###############
#
# User options...
#
CPMIO = yes		# Use the CPMIO library for terminal I/O?

#DEBUG = yes		# Debug build? (emits a stream of trace messages)

CPMGSX = yes		# Use the CPMGSX library for GSX emulation?
#
CC      = gcc		# C compiler
COPY    = cp		# Copy command
RM      = rm -f		# Delete command
XLIBDIR = /usr/X11/lib	# X11 libraries
#
##########################################################################
#
ifdef CPMIO
  DCPMIO     = -DUSE_CPMIO
  LCPMIO     = -lcpmio -lncurses -lreadline
  LIBCPMIO   = libcpmio.a
  SLIBCPMIO  = cpmio/libcpmio.a
  HCPMIO     = cpmio.h
  SHCPMIO    = cpmio/cpmio.h
  CCPMIO     = cpmio/clean
  SCPMIO     = cpmio
  TCPMIO     = cpmio/tar
else
  DCPMIO     = 
  LCPMIO     =
  LIBCPMIO   =
  HCPMIO     =
  SHCPMIO    =
  CCPMIO     =
  SCPMIO     =
  TCPMIO     =
endif

ifdef DEBUG
  DFLAGS = -DDEBUG
else
  DFLAGS =
endif

ifdef CPMGSX 
  DCPMGSX     = -DUSE_CPMGSX
  LCPMGSX     = -lcgsx -lxgks -lX11 -L$(XLIBDIR) -lm
  LIBCPMGSX   = libcgsx.a
  SLIBCPMGSX  = cpmgsx/libcgsx.a
  HCPMGSX     = cpmgsx.h
  SHCPMGSX    = cpmgsx/cpmgsx.h
  CCPMGSX     = cpmgsx/clean
  SCPMGSX     = cpmgsx
  TCPMIO     = cpmio/tar
else
  DCPMGSX     =
  LCPMGSX     =
  LIBCPMGSX   =
  HCPMGSX     =
  SHCPMGSX    =
  CCPMGSX     =
  SCPMGSX     =
  TCPMGSX     =
endif



CFLAGS  = -g -pedantic -Wall -O2 -fno-strength-reduce -DZXCC -DUNIX -DLINUX \
                                  -DLSB_FIRST $(DCPMIO) $(DFLAGS) $(DCPMGSX)
OBJECTS = zxcc.o zxcbdos.o zxdbdos.o zxbdos.o Z80.o Debug.o
SUBDIRS        = $(SCPMIO) $(SCPMGSX) cpmredir
SUBDIR_TARGETS = $(SLIBCPMIO) $(SLIBCPMGSX) cpmredir/libcpmredir.a
SUBDIR_CLEAN   = $(CCPMIO) $(CCPMGSX) cpmredir/clean
SUBDIR_TAR     = $(TCPMIO) $(TCPMGSX) cpmredir/tar

all:	zxcc zxc zxas zxlink zxlibr bios.bin zxcc.doc

$(SUBDIR_TARGETS):
	set -e; for i in $(SUBDIRS); do $(MAKE) -C $$i; done

$(SUBDIR_CLEAN):
	set -e; for i in $(SUBDIRS); do $(MAKE) -C $$i clean; done

$(SUBDIR_TAR):
	set -e; for i in $(SUBDIRS); do $(MAKE) -C $$i tar; done

libcpmredir.a:	cpmredir/libcpmredir.a
	$(COPY) cpmredir/libcpmredir.a libcpmredir.a

cpmredir.h:	cpmredir/cpmredir.h
	$(COPY) cpmredir/cpmredir.h cpmredir.h

libcpmio.a:	$(SLIBCPMIO)
	$(COPY) $(SLIBCPMIO) $(LIBCPMIO)

cpmio.h:	$(SHCPMIO)
	$(COPY) $(SHCPMIO) $(HCPMIO)

libcgsx.a:	$(SLIBCPMGSX)
	$(COPY) $(SLIBCPMGSX) $(LIBCPMGSX)

cpmgsx.h:	$(SHCPMGSX)
	$(COPY) $(SHCPMGSX) $(HCPMGSX)

clean:	$(SUBDIR_CLEAN)
	$(RM) zxcc zxc zxas zxlink zxlibr bios.bin *.o $(LIBCPMIO) $(HCPMIO) \
	      $(LIBCPMGSX) $(HCPMGSX) libcpmredir.a cpmredir.h

zxcc:		${OBJECTS} $(LIBCPMIO) $(LIBCPMGSX) libcpmredir.a
		${CC} -o zxcc -L. ${OBJECTS} ${LCPMIO} ${LCPMGSX} -lcpmredir

zxc:		zxc.o
		${CC} -o zxc zxc.o
zxlink:         zxlink.o
		${CC} -o zxlink zxlink.o
zxlibr:         zxlibr.o
		${CC} -o zxlibr zxlibr.o
zxas:           zxas.o
		${CC} -o zxas zxas.o

Z80.o:    Z80.c Z80.h Codes.h CodesED.h CodesCB.h CodesXX.h Tables.h CodesXCB.h
zxcc.o:   zxcc.h Z80.h $(HCPMIO) $(HCPMGSX) cpmredir.h
zxcbdos.o zxdbdos.o zxbdos.o: zxcbdos.h zxdbdos.h zxbdos.h zxcc.h Z80.h \
          $(HCPMIO) $(HCPMGSX)
zxc.o:    zxcc.h $(HCPMIO) $(HCPMGSX)
bios.bin: bios.zsm
	z80asm -fb bios.zsm	

zxcc.doc: zxcc.html
	lynx -dump zxcc.html >zxcc.doc

tar:	zxcc.doc 
	tar chf zxcc.tar Codes.h CodesCB.h CodesED.h CodesXCB.h CodesXX.h \
		Debug.c Makefile Tables.h Z80.c Z80.h bios.zsm dasm.c zxas.c \
		zxbdos.c zxc.c zxcc.c zxcc.h zxlibr.c zxlink.c bios.bin \
                README zxcc.doc zxcc.html Makefile.dj2 zxcc.exe zxc.exe \
		zxas.exe zxlibr.exe zxlink.exe zxcbdos.h zxdbdos.h zxbdos.h \
                zxcbdos.c zxdbdos.c

