SHELL=bash -o pipefail
TOP:=$(abspath ../..)
-include $(TOP)/common.mk

BRDIR=$(BUILDROOT_SRC)
BUILDDIR=$(BUILDROOT_BUILDDIR)
LEONLINK:=$(BUILDROOT_LEONLINK)
FTP_BR=$(FTP_BASE)/linux/linux-2.6/distributions/buildroot
BASENAME:=leon-buildroot

# mirrors file can override e.g. FTP_BASE or FTP_BR
MIRRORS=$(TOP)/.mirrors
-include $(MIRRORS)

.PHONY: download unpack install preconfig postconfig build clean mkbuilddir

# Find Latest Buildroot dist from Gaisler FTP server
download:
	@$(SCRIPTS)/download.sh $(FTP_BR) $(PWD)/reference $(BASENAME)

# Install latest Buildroot distribution in reference directory, make sure
# to do download target first...
install: download
	if [ -e $(BRDIR) -o -e $(BUILDDIR) ]; then \
		echo "Buildroot already installed. Will not overwrite current install"; \
		exit 1; \
	  fi
	$(SCRIPTS)/unpack.sh $(PWD)/reference $(PWD) $(BASENAME)
	@echo INSTALLING...
	newname=`sed -n -e 's/^NAME=//gp' reference/LATEST.$(BASENAME)`; \
	 echo NEWNAME=$$newname ; \
	 if [ -h $(LEONLINK) ]; then \
		rm $(LEONLINK) || exit 1; \
	 fi; \
	 ln -s $(BASENAME)-$$newname $(LEONLINK)
	if [ -x $(LEONLINK)/pkg/install.sh ]; then \
	  $(LEONLINK)/pkg/install.sh; \
	 fi
	cd $(LEONLINK) && \
	 make MIRRORS=`readlink -m $(MIRRORS)` BR_TREE=../$(BRDIR) install
	mv reference/LATEST.$(BASENAME) reference/CURRENT.$(BASENAME)

# Create build directory and initialize a default LEON config if no
# configuration is present
mkbuilddir:
	-@if [ ! -d $(BUILDDIR) ]; then \
	 mkdir -p $(BUILDDIR); \
	 cp $(LEONLINK)/config/defconfig $(BUILDDIR)/.config ; \
	 fi;

# Generate menu/xconfig configuration file
preconfig:

# Fixup before configuration
pre_postconfig: mkbuilddir
	-@rm -f ../.rootfs.cpio ../.toolchain_path
	-@ln -s buildroot/$(BUILDDIR)/images/rootfs.cpio ../.rootfs.cpio
	echo $(PWD)/$(BUILDDIR)/output/staging/usr/bin > ../.toolchain_path
	-@rm -f ../../output/images/fs
	-@ln -s ../../dist/buildroot/$(BUILDDIR)/images ../../output/images/fs
# Update Buildroot Configuration to create CPIO Image if user enabled it
ifeq ($(LB_LINUX_SET_CPIO),y)
	sed 's/^# BR2_TARGET_ROOTFS_CPIO is not set/BR2_TARGET_ROOTFS_CPIO=y/g' \
	 $(BUILDDIR)/.config > $(BUILDDIR)/.config.tmp
	if diff -q $(BUILDDIR)/.config $(BUILDDIR)/.config.tmp > /dev/null ; then \
	 rm -f $(BUILDDIR)/.config.tmp ; \
	 else \
	 mv $(BUILDDIR)/.config.tmp $(BUILDDIR)/.config ; \
	 fi;
endif

# Fixup after configuration
postconfig: mkbuilddir

_build:
	-@rm -f ../.rootfs.cpio
	-@ln -s buildroot/$(BUILDDIR)/images/rootfs.cpio ../.rootfs.cpio
	@if [ ! -d $(BUILDDIR) -o ! -f $(BUILDDIR)/.config ] ; then \
	 echo ; \
	 echo "!!! Build directory missing or Buildroot configuration not created." ; \
	 echo ; \
	 exit 1 ; \
	 fi;
	cd $(BUILDDIR); \
	 make -C $(PWD)/$(BRDIR) BUILDROOT_DL_DIR=$(PWD)/downloads O=`pwd` 2>&1

build: oldconfig
	$(MAKE) _build 2>&1 | tee $(BUILDDIR)/build.log

clean:
	cd $(BUILDDIR); \
	 make -C $(PWD)/$(BRDIR) BUILDROOT_DL_DIR=$(PWD)/downloads O=`pwd` clean;

xconfig: mkbuilddir
	cd $(BUILDDIR); make -C $(PWD)/$(BRDIR) BUILDROOT_DL_DIR=$(PWD)/downloads O=`pwd` xconfig

gconfig: mkbuilddir
	cd $(BUILDDIR); make -C $(PWD)/$(BRDIR) BUILDROOT_DL_DIR=$(PWD)/downloads O=`pwd` gconfig

menuconfig: mkbuilddir
	cd $(BUILDDIR); make -C $(PWD)/$(BRDIR) BUILDROOT_DL_DIR=$(PWD)/downloads O=`pwd` menuconfig

oldconfig: mkbuilddir
	cd $(BUILDDIR) && make -C $(PWD)/$(BRDIR) BUILDROOT_DL_DIR=$(PWD)/downloads O=`pwd` oldconfig

# olddefconfig might not be available
defaultoldconfig:
	yes "" | make oldconfig

cfg_save:
	@if [ ! -d $(BUILDDIR) ] ; then \
	  echo ; \
	  echo "!!! No Buildroot Configuration created in project" ; \
	  echo ; \
	  exit 1; \
	  fi;
	mkdir -p $(CFG_BASE)/dist/buildroot/$(BUILDDIR)
	cp -a $(BUILDDIR)/.config $(CFG_BASE)/dist/buildroot/$(BUILDDIR)/.config

cfg_load:
	cp -fR $(CFG_BASE)/dist/buildroot/* .
