#
# Amiga Linux/m68k Loader
#
# Makefile
#

RELEASE =	2.0

SRCDIR =	amiga-lilo-$(RELEASE)
LINUXSRC =	/usr/src/linux

CC =		gcc
CFLAGS =	-O2 -fomit-frame-pointer -Wall
AMICC =		m68k-cbm-amigados-gcc
AMICFLAGS =	$(CFLAGS) -m68030 -I$(LINUXSRC)/include
AMILD =		m68k-cbm-amigados-ld -fl libnix -s
AMILIBS =	-lnix
YACC =		bison -d
LEX =		flex
INSTALL =	install
RLATEX =	./rlatex
DVIPS =		dvips
MAKE =		make


OBJS =		lilo loader lilo.dvi lilo.ps.gz

LILOOBJS =	lilo.c bootcode.o conf.tab.o lex.conf.o head.o
LOADEROBJS =	loader.o linuxboot.o monitor.o

SUBDIRS =	debug doc-exp


All:		$(OBJS)


# Targets

lilo:		$(LILOOBJS)
		$(CC) -o lilo $(LILOOBJS)

loader:		$(LOADEROBJS)
		$(AMILD) -o loader $(LOADEROBJS) $(AMILIBS)


# Dependencies

lilo.o:		lilo.c lilo.h linuxboot.h lilo_proto.h
bootcode.o:	bootcode.S
head.o:		head.S bootlib.h
lex.conf.o:	lex.conf.c lilo.h linuxboot.h lilo_proto.h conf.tab.h
conf.tab.o:	conf.tab.c lilo.h linuxboot.h lilo_proto.h
loader.o:	loader.a.c bootlib.h lilo.h linuxboot.h loader.h loader_proto.h
monitor.o:	monitor.a.c lilo.h linuxboot.h loader.h loader_proto.h
linuxboot.o:	linuxboot.a.c linuxboot.h


# Symbolic links

linuxboot.h:	$(LINUXSRC)/arch/m68k/boot/amiga/linuxboot.h
		ln -sf $(LINUXSRC)/arch/m68k/boot/amiga/linuxboot.h

linuxboot.a.c:	$(LINUXSRC)/arch/m68k/boot/amiga/linuxboot.c
		ln -sf $(LINUXSRC)/arch/m68k/boot/amiga/linuxboot.c \
		linuxboot.a.c


# Installation

install:	$(OBJS)
		$(INSTALL) -m 700 lilo $(DESTDIR)/sbin
		$(INSTALL) -d -m 700 $(DESTDIR)/boot
		$(INSTALL) -m 600 loader $(DESTDIR)/boot
		$(INSTALL) -m 644 lilo.conf.example $(DESTDIR)/etc
		$(INSTALL) -m 644 lilo.8 $(DESTDIR)/usr/man/man8
		$(INSTALL) -m 644 lilo.conf.5 $(DESTDIR)/usr/man/man5
		$(INSTALL) -d -m 755 $(DESTDIR)/usr/doc/lilo
		$(INSTALL) -m 644 lilo.tex $(DESTDIR)/usr/doc/lilo
		$(INSTALL) -m 644 lilo.dvi $(DESTDIR)/usr/doc/lilo
		$(INSTALL) -m 644 lilo.ps.gz $(DESTDIR)/usr/doc/lilo


# Clean up

clean:
		rm -f $(OBJS) *.aux *.log *.o *.ps *.toc conf.tab.* \
		lex.conf.c linuxboot.a.c linuxboot.h
		for i in $(SUBDIRS); do $(MAKE) -C $$i clean; done


# Distribution

DISTOBJS =	$(DESTDIR)/boot/loader \
		$(DESTDIR)/etc/lilo.conf.example \
		$(DESTDIR)/sbin/lilo \
		$(DESTDIR)/usr/doc/lilo/lilo.dvi \
		$(DESTDIR)/usr/doc/lilo/lilo.ps.gz \
		$(DESTDIR)/usr/doc/lilo/lilo.tex \
		$(DESTDIR)/usr/man/man5/lilo.conf.5 \
		$(DESTDIR)/usr/man/man8/lilo.8

PREFIX =	amiga-lilo-$(RELEASE)

dist:
		$(MAKE) install
		$(MAKE) clean
		tar cvf - $(DISTOBJS) | gzip -9v > ../$(PREFIX)-bin.tar.gz
		(cd ..; tar cvf - $(SRCDIR) | gzip -9v > $(PREFIX)-src.tar.gz)


# General rules

%.o:		%.S
		$(CC) -D__ASSEMBLY__ -c $< -o $*.o

%.o:		%.c
		$(CC) $(CFLAGS) -c $< -o $*.o

%.o:		%.a.c
		$(AMICC) $(AMICFLAGS) -c $< -o $*.o

lex.%.c:	%.l
		$(LEX) -P$* $<

%.tab.c:	%.y
		$(YACC) -p $* $<

%.dvi:		%.tex
		$(RLATEX) $<

%.ps:		%.dvi
		$(DVIPS) $< -o $*.ps

%.ps.gz:	%.ps
		gzip -9cv $< > $*.ps.gz		    
