.EXPORT_ALL_VARIABLES:

#TEXTADDR	=0x411000a0
TEXTADDR	=0x411000c0
DATAADDR	=0x1000
CROSS_COMPILE	=arm-linux-

VERSION		=1.06

TOPDIR		:= $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else pwd; fi)
HPATH		=$(TOPDIR)/include
FINDHPATH	=$(HPATH)/bios

CFLAGS		=-O2 -fomit-frame-pointer -I$(HPATH) -Wall
LDFLAGS		=-N -Ttext $(TEXTADDR) -Tdata $(DATAADDR)

HOSTCC		=gcc
HOSTCFLAGS	=-Wall -Wstrict-prototypes -O2 -fomit-frame-pointer

CC		=$(CROSS_COMPILE)gcc
LD		=$(CROSS_COMPILE)ld
AR		=$(CROSS_COMPILE)ar
STRIP		=$(CROSS_COMPILE)strip
GCCLIB		=$(shell $(CC) $(CFLAGS) --print-libgcc-file-name)

ELF		:=$(shell $(LD) --version | grep 'elf32arm\|armelf' >/dev/null && echo y)
NEW_GCC		:=$(shell if $(CC) --version 2>&1 | grep '^2\.7' > /dev/null; then echo n; else echo y; fi)

ifeq ($(NEW_GCC),y)
CFLAGS		+=-mapcs-32 -mcpu=strongarm110
else
CFLAGS		+=-m6
endif

ifeq ($(ELF),y)
BIOS		=bios.elf
CFLAGS		+=-DELF
else
BIOS		=bios.a.out
endif

CFLAGS		+=-DVERSION=\"${VERSION}\"

SUBDIRS		=init lib drivers
BIOSOBJS	=init/crt0.o init/init.o
DRIVERS		=drivers/drivers.o drivers/block/block.a drivers/net/net.a \
		 drivers/scsi/scsi.a drivers/char/char.a drivers/isa/isa.a
LIBS		=lib/lib.a $(GCCLIB)

all:		bios scripts/mkboot

depend dep: dep-files

bios.a.out:	subdirs debug.o
		$(LD) $(LDFLAGS) -o $@ $(BIOSOBJS) debug.o \
		$(DRIVERS) \
		$(LIBS)

bios.elf:	subdirs debug.o
		$(LD) $(LDFLAGS) -T elfbios.lds -o $@ $(BIOSOBJS) debug.o \
		$(DRIVERS) \
		$(LIBS)

bios:		scripts/mkaif $(BIOS)
		scripts/mkaif $(BIOS) $@

clean:
		$(RM) `find . -name '*.[oas]' -print`
		$(RM) `find . -name '.*.flags' -print`
		$(RM) bios bios.a.out bios.elf

mrproper:	clean
		$(RM) `find . -name '.depend' -print`
		$(RM) scripts/mkaif scripts/mkdep

subdirs:	$(patsubst %, _dir_%,$(SUBDIRS))

$(patsubst %, _dir_%, $(SUBDIRS)) : dummy
		$(MAKE) -C $(patsubst _dir_%, %, $@)

dep-files: scripts/mkdep
		scripts/mkdep `find $(FINDHPATH) -follow -name \*.h -print` > .hdepend
		$(MAKE) $(patsubst %,_sfdep_%,$(SUBDIRS)) _FASTDEP_ALL_SUB_DIRS="$(SUBDIRS)"

scripts/mkdep: scripts/mkdep.c
		$(HOSTCC) $(HOSTCFLAGS) -o scripts/mkdep scripts/mkdep.c

scripts/mkaif: scripts/mkaif.c
		$(HOSTCC) $(HOSTCFLAGS) -o scripts/mkaif scripts/mkaif.c

scripts/mkboot: scripts/mkboot.c
		$(HOSTCC) $(HOSTCFLAGS) -o scripts/mkboot scripts/mkboot.c

tar:		mrproper
		@( cd ..; tar zcf bios-${VERSION}.tar.gz bios )

dummy:

include Rules.make
