#
# Makefile for NILO
#
# Don't edit this file except to change the version, edit Config
#
# Common options:
#	-DVERSION=v	- Set the version string (but see comment in config.c)
#

include Config

DATEREF=	`./dateof.pl README`
GCC=		gcc
CPP=		gcc -E
CFLAGS+=	-I../oskit
CFLAGS+=	-DVERSION=\"$(DATEREF)\" -DVERBOSE -DLARGE_TFTP_BLOCKS #-DMYTFTP	# for non-root testing
KCFLAGS+=	-O6 -D__KERNEL__ -I. -I/usr/src/linux/include -I.
# Stack must be below 640kb so we have real memory there
RCONFIG+=	-DRELOC=$(RELOCADDR) -DSTACKADDR=0xA0000-$(RELOCADDR)
AR=		ar
RANLIB=		ranlib
AS86=		as86
LD86=		ld86

SRCS=	loader.asm start.S main.c
SRCS+=  config.c
RLOADER=	rloader.bin
RZLOADER=	rzloader.bin
START=	start.o
BOBJS=	main.o
BLIB=	bootlib.a
DOBJS=	protocol.o bootp.o tftp.o tagged.o arp.o printk.o vsprintf.o ctype.o net_init.o eth.o skbuff.o bogomips.o util.o auto_irq.o irq.o delay.o
DOBJS+=	3c509.o 3c507.o ne.o smc-ultra.o wd.o 8390.o
DLIB=	driver.a
FLIBS=	-L../oskit/lib -lmc -llmm
UOBJS=	unix.o
UTILS+=	objdump86 makerom lzhuf
UTILS+=	floppyload.bin
STDDEPS=$(START) $(BLIB) $(DLIB) $(UTILS)
CLEANFILES=	$(START) $(BOBJS) $(DOBJS) $(UOBJS)
CLEANFILES+=	$(BLIB) $(DLIB) sa-*.o $(UTILS)
CLEANFILES+=	*.rom *.lzrom *.tmp *.bin *.huf lzhuf

# Make sure that the relocation address is acceptable for all ROM sizes
RELOCADDR=0x98000

.SUFFIXES:	.S .asm .s .i .bin .rom .lzrom .exe

all:	$(UTILS) 3c509.rom 3c509.lzrom wd.rom wd.lzrom

clean:
	$(RM) -f $(CLEANFILES)

.S.s:
	$(CC) $(CFLAGS) $(ASFLAGS) $(RCONFIG) -E $< > $@

.S.o:
	$(CC) -D__ASSEMBLY__ $(CFLAGS) $(ASFLAGS) $(RCONFIG) -c -o $@ $<

# for most driver modules
.c.o:
	$(CC) $(CFLAGS) $(KCFLAGS) -c -o $@ $<

.c.i:
	$(CC) $(CFLAGS) $(KCFLAGS) -E $< > $@

.o.rom:	$(RLOADER) $(START) sa-$*.o $(STDDEPS)
	$(LD) $(LDFLAGS) -o $*.tmp $(START) $(BLIB) sa-$*.o $(DLIB) $(FLIBS) $(LIBS)
	$(OBJCOPY) $*.tmp $*.bin
	cat $(RLOADER) $*.bin > $@ 
	./makerom $@

.o.lzrom:	$(RZLOADER) $(START) sa-$*.o $(STDDEPS)
	$(LD) $(LDFLAGS) -o $*.tmp $(START) $(BLIB) sa-$*.o $(DLIB) $(FLIBS) $(LIBS)
	$(OBJCOPY) $*.tmp $*.bin
	./lzhuf e $*.bin $*.huf
	cat $(RZLOADER) $*.huf > $@
	./makerom $@

3c509.rom:	$(RLOADER) $(START) sa-3c509.o $(STDDEPS)

3c509.lzrom:	$(RZLOADER) $(START) sa-3c509.o $(STDDEPS)

3c507.rom:	$(RLOADER) $(START) sa-3c507.o $(STDDEPS)

3c507.lzrom:	$(RZLOADER) $(START) sa-3c507.o $(STDDEPS)

ne.rom:	$(RLOADER) $(START) sa-ne.o $(STDDEPS)

ne.lzrom:	$(RZLOADER) $(START) sa-ne.o $(STDDEPS)

smc-ultra.rom:	$(RLOADER) $(START) sa-smc-ultra.o $(STDDEPS)

smc-ultra.lzrom:	$(RZLOADER) $(START) sa-smc-ultra.o $(STDDEPS)

wd.rom:		$(RLOADER) $(START) sa-wd.o $(STDDEPS)

wd.lzrom:	$(RZLOADER) $(START) sa-wd.o $(STDDEPS)

sa-3c509.o:	standalone.c
	$(CC) $(CFLAGS) -DINCLUDE_3C509 $(KCFLAGS) -c standalone.c -o sa-3c509.o

sa-3c507.o:	standalone.c
	$(CC) $(CFLAGS) -DINCLUDE_3C507 $(KCFLAGS) -c standalone.c -o sa-3c507.o

sa-ne.o:	standalone.c
	$(CC) $(CFLAGS) -DINCLUDE_NE $(KCFLAGS) -c standalone.c -o sa-ne.o

sa-smc-ultra.o:	standalone.c
	$(CC) $(CFLAGS) -DINCLUDE_ULTRA $(KCFLAGS) -c standalone.c -o sa-smc-ultra.o

sa-wd.o:	standalone.c
	$(CC) $(CFLAGS) -DINCLUDE_WD $(KCFLAGS) -c standalone.c -o sa-wd.o

nilo:	main.o unix.o printk.o bootp.o tftp.o tagged.o arp.o
	$(GCC) -g -o nilo main.o unix.o printk.o bootp.o tftp.o tagged.o arp.o

# Don't compile main.c with -O6
main.o:	main.c bootp.h nilo.h printk.h tagged.h tftp.h
	$(CC) $(CFLAGS) -c -o main.o main.c

unix.o:	unix.c

# if you change the INCLUDES you have to delete config-all.o and remake

$(BLIB):	$(BOBJS)
	$(AR) rv $@ $(BOBJS)
	$(RANLIB) $@

$(DLIB):	$(DOBJS)
	$(AR) rv $@ $(DOBJS)
	$(RANLIB) $@

$(BOBJS):

$(TOBJS):

start.o:	start.S

main.o:		main.c nilo.h

irq.o:		irq.h

$(RLOADER):	loader.asm loader.inc objdump86
	$(CPP) -DBOOTROM $(RCONFIG) $(CFLAGS) -x assembler-with-cpp -o $*.s $<
	$(AS86) -0 -a -o $*.o $*.s
	$(LD86) -0 -s -o $*.tmp $*.o
	./objdump86 $*.tmp > $@
	$(RM) -f $*.s $*.o

$(RZLOADER):	zloader.asm loader.inc objdump86
	$(CPP) -DBOOTROM $(RCONFIG) $(CFLAGS) -x assembler-with-cpp -o $*.s $<
	$(AS86) -0 -a -o $*.o $*.s
	$(LD86) -0 -s -o $*.tmp $*.o
	./objdump86 $*.tmp > $@
	$(RM) -f $*.s $*.o

floppyload.bin:	floppyload.asm objdump86
	$(CPP) $(CFLAGS) -x assembler-with-cpp -o $*.s $<
	$(AS86) $(AS86FLAGS) -0 -a -o $*.o $*.s
	$(LD86) -0 -s -o $*.tmp $*.o
	./objdump86 $*.tmp > $@
	$(RM) -f $*.s $*.o

makerom: makerom.c
	$(GCC) -o $@ makerom.c

size86: size86.c
	$(GCC) -I. -o $@ size86.c

objdump86: objdump86.c
	$(GCC) -o $@ objdump86.c

lzhuf:	lzhuf.c
	$(GCC) -DENCODE -DDECODE -DMAIN -DVERBOSE -o $@ lzhuf.c

whatversion:
	@echo $(DATEREF)

archive:
	(datestamp=$(DATEREF); cd ..; tar zcf /tmp/nilo-$$datestamp.tar.gz nilo)

boot:	floppyload.bin 3c509.rom
	cat floppyload.bin 3c509.rom > /dev/fd0
