## Common -*- makefile -*- for cbmlink

# Installation directory prefix for Debian GNU/Linux
DESTDIR =
# Installation directory prefix for other systems
PREFIX = $(DESTDIR)/usr
#PREFIX = $(DESTDIR)/usr/local

# Where to put binaries on 'make install'?
BINDIR = $(PREFIX)/bin
# Where to put manual pages on 'make installman'?
MANDIR = $(PREFIX)/share/man/man1

## Installation commands
RM = rm -f
INSTALLDIR = install -d
INSTALLDATA = install -c -m 444
INSTALLBIN = install -c

## C compiler options
CPPFLAGS = \
	$(COMM_SERIAL:yes=-DCOMM_SERIAL) \
	$(COMM_PC:yes=-DCOMM_PC) \
	$(COMM_AMIGA:yes=-DCOMM_AMIGA) \
	$(DEFINES) -Iext -Iop -Icomm# -DCOMM_DEBUG

MANPAGES = cbmlink.1

EXTSRCS = ext/ext.c ext/rdfile.c ext/wrfile.c ext/disk.c ext/qdisk.c
EXTHDRS = $(EXTSRCS:.c=.h)
OPSRCS = op/mem.c op/run.c
OPHDRS = $(OPSRCS:.c=.h)
COMMCOMM = comm/info.c comm/commsel.c
COMMSERIAL = comm/c2n232.c comm/serial.c
COMMPC = comm/pcpar.c comm/kontros.c comm/pc64.c comm/prlink.c \
	comm/x1541.c comm/c64net.c
COMMAMIGA = comm/amigapar.c comm/prlink88.c comm/prlink48.c \
	comm/transnib.c comm/emul1541.c comm/em1541.c
COMMSRCS = $(COMMCOMM) $(COMM_SERIAL:yes=$(COMMSERIAL)) \
	$(COMM_PC:yes=$(COMMPC)) $(COMM_AMIGA:yes=$(COMMAMIGA))
COMMHDRS = $(COMMSRCS:.c=.h) comm/comm.h

SRCS = cbmlink.c $(EXTSRCS) $(OPSRCS) $(COMMSRCS)
HDRS = $(EXTHDRS) $(OPHDRS) $(COMMHDRS)
OBJS = $(SRCS:.c=.o)

COMMOPT = $(COMMSERIAL) $(COMMPC) $(COMMAMIGA)
ALLSRCS = cbmlink.c $(EXTSRCS) $(OPSRCS) $(COMMCOMM) $(COMMOPT)
ALLOBJS = $(ALLSRCS:.c=.o)

bugger:
	@echo Choose the target system, e.g.: make -f Makefile.unix
	@exit 1

real-all: $(TARGET)

clean:
	$(RM) $(ALLOBJS)

reallyclean: clean
	$(RM) cbmlink cbmlink.com cbmlink.exe

install: cbmlink
	$(INSTALLDIR) $(BINDIR)
	$(INSTALLBIN) cbmlink $(BINDIR)

installman: $(MANPAGES)
	$(INSTALLDIR) $(MANDIR)
	$(INSTALLDATA) $(MANPAGES) $(MANDIR)

$(TARGET): $(OBJS)
	$(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)

.phony: all clean reallyclean install installman

.SUFFIXES:
.SUFFIXES: .c .h .o .1 .dvi .pdf .txt

.c.o:
	$(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
.1.dvi:
	groff -man -Tdvi $< > $@
.dvi.pdf:
	dvipdfm $<
.1.txt:
	groff -man -Tlatin1 $< | sed -e 's/.//g;' > $@

# Disable the built-in rules of GNU Make for making "cbmlink"
%: %.c
%: %.o

# Dependencies
cbmlink.o: comm/commsel.h $(EXTHDRS) $(OPHDRS)
cbmlink.o $(OPSRCS:.c=.o): comm/info.h comm/comm.h
ext/ext.o: $(OPHDRS)
$(EXTSRCS:.c=.o): comm/info.h comm/comm.h
comm/commsel.o: $(COMMHDRS)
$(COMMSRCS:.c=.o): comm/info.h
$(COMMPC:.c=.o): comm/pcpar.h
$(COMMAMIGA:.c=.o): comm/amigapar.h

ext/ext.o: ext/ext.h op/mem.h op/run.h
ext/rdfile.o: ext/rdfile-o.h ext/ext.h
ext/wrfile.o: ext/wrfile-o.h ext/ext.h
ext/disk.o: ext/disk-o.h ext/ext.h
ext/qdisk.o: ext/qdisk-o.h ext/rdfile.h
op/mem.o: op/mem.h
op/run.o: op/run.h

ext/rdfile-o.h ext/wrfile-o.h ext/disk-o.h: ext/asm/cgen.sh \
	ext/asm/cbm/rom.s ext/asm/cbm2/rom.s \
	ext/asm/pet3000/rom.s ext/asm/pet4000/rom.s \
	ext/asm/pet.s ext/asm/ext.s
ext/rdfile-o.h: ext/asm/rdfile.s
	cd ext/asm && ./cgen.sh rdfile > ../rdfile-o.h
ext/wrfile-o.h: ext/asm/rdfile.s
	cd ext/asm && ./cgen.sh wrfile > ../wrfile-o.h
ext/disk-o.h: ext/asm/rdfile.s
	cd ext/asm && ./cgen.sh disk > ../disk-o.h

ext/qdisk-o.h: ext/asm/trackgen.sh
# to do: add other dependencies and rules
# to do: separate qdisk-41.h

comm/pcpar.o: comm/pcpar.h
comm/kontros.o: comm/kontros.h
comm/pc64.o: comm/pc64.h
comm/prlink.o: comm/prlink.h
comm/x1541.o: comm/x1541.h
comm/c64net.o: comm/c64net.h

comm/amigapar.o: comm/amigapar.h
comm/prlink88.o: comm/prlink88.h
comm/prlink48.o: comm/prlink48.h
comm/transnib.o: comm/transnib.h
comm/emul1541.o: comm/emul1541.h
comm/em1541.o: comm/em1541.h comm/emul1541.c
