# *****************************************************************************
# * Copyright (c) 2004, 2008 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
# ****************************************************************************/

JS2X_TARGETS = tools_build romfs_build clients_build bcm57xx stage1

SUBDIRS = slof rtas 
COMMON_LIBS = libc libipmi libbootmsg libbases libnvram libelf

all: $(JS2X_TARGETS) subdirs 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)\\\"\"

bcm57xx:
		make -C ../other-licence/bcm

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 ../js2*.img 
		make -C ../other-licence/bcm clean
		@make -C llfw clean
		@make -C $(TOPCMNDIR)/clients/takeover clean

distclean:	clean_here distclean_gen
		@for dir in $(SUBDIRS); do \
			$(MAKE) -C $$dir distclean || exit 1; \
		done
		rm -f ../boot_rom.bin ../js2*.img 
		make -C ../other-licence/bcm clean
		make -C llfw clean
		make -C $(TOPCMNDIR)/clients/takeover distclean

takeover: all
		$(MAKE) -C $(TOPCMNDIR)/clients/takeover

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

.tar_gz:	.driver_dirs takeover
		@mv ../boot_rom.bin \
			../driver-$(RELEASE)/$(RELEASE)-js2x.bin
		@mv $(TOPCMNDIR)/clients/takeover/takeover.elf \
			../driver-$(RELEASE)/$(RELEASE)-takeover.bin
		@cp ../VERSION ../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
