# *****************************************************************************
# * Copyright (c) 2004, 2011 IBM Corporation
# * All rights reserved.
# * This program and the accompanying materials
# * are made available under the terms of the BSD License
# * which accompanies this distribution, and is available at
# * http://www.opensource.org/licenses/bsd-license.php
# *
# * Contributors:
# *     IBM Corporation - initial implementation
# ****************************************************************************/

BOARD_TARGETS = tools_build romfs_build clients_build netdrivers stage1 subdirs

SUBDIRS = slof veth virtio-net

COMMON_LIBS = libc libbootmsg libbases libnvram libelf libhvcall libvirtio

all: $(BOARD_TARGETS)
	$(MAKE) boot_rom.bin

.PHONY : subdirs $(SUBDIRS) clean distclean

include config
include Makefile.dirs
include $(TOPCMNDIR)/make.rules
include $(TOPCMNDIR)/Makefile.gen

subdirs: $(SUBDIRS)

$(SUBDIRS): common-libs
	@echo " ====== Building $@ ======"
	$(MAKE) -C $@ $(MAKEARG)

stage1:	common-libs
	@echo " ====== Building llfw ======"
	$(MAKE) -C llfw RELEASE=-DRELEASE=\"\\\"$(RELEASE)\\\"\"

netdrivers: common-libs
	$(MAKE) -C ../drivers/e1k

clean_here:
	rm -f ../slof/OF.ffs
	rm -f ../boot_rom.bin

clean:	clean_here clean_gen
	@for dir in $(SUBDIRS); do \
		$(MAKE) -C $$dir clean || exit 1; \
	done
	rm -f ../boot_rom.bin 
	@$(MAKE) -C llfw clean

distclean:	clean_here distclean_gen
	@for dir in $(SUBDIRS); do \
		$(MAKE) -C $$dir distclean || exit 1; \
	done
	rm -f ../boot_rom.bin 
	$(MAKE) -C llfw clean

.driver_dirs:
	@rm -rf ../driver-$(RELEASE)
	@mkdir -p ../driver-$(RELEASE)

.tar_gz:	.driver_dirs
	@mv ../boot_rom.bin ../driver-$(RELEASE)/$(RELEASE)-slof.bin
	@cp ../VERSION ../driver-$(RELEASE)
	@cp changes.txt ../driver-$(RELEASE)
	@cd ../driver-$(RELEASE) && md5sum * > md5sum.txt
	@chmod 644 ../driver-$(RELEASE)/*
	@mv ../driver-$(RELEASE) ../driver-$(RELEASE)-`date +%Y-%h%d`
	@tar czf ../driver-$(RELEASE)-`date +%Y-%h%d`.tar.gz \
		../driver-$(RELEASE)-`date +%Y-%h%d` > /dev/null  2>&1
	@rm -rf ../driver-$(RELEASE)-`date +%Y-%h%d`

driver:		driver_prep clean .tar_gz
