TOP:=$(abspath ..)
-include $(TOP)/common.mk

LINUXDIR:=linux-2.6-git
TOOLCHAIN:=sparc-linux-
FTP_KERNEL:=$(FTP_BASE)/linux/linux-2.6/kernel
BASENAME:=leon-linux-2.6

# Build Directory Config
ifeq ($(LB_LINUX_BUILDDIR),)
 BUILDDIR=build-linux
else
 BUILDDIR=$(subst ",,$(LB_LINUX_BUILDDIR))
endif

.PHONY: download unpack upgrade preconfig postconfig build clean

default: build

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

# Install latest Linux distribution in reference directory, make sure
# to do download target first...
install:
# Stop if package already installed.
	@if [ -f reference/CURRENT.$(BASENAME) ]; then \
	 if diff -q reference/CURRENT.$(BASENAME) reference/LATEST.$(BASENAME) > /dev/null; then \
	  echo ; \
	  echo "!!! Latest LEON Linux package already installed" ; \
	  echo ; \
	  exit 0 ; \
	  fi; \
	 fi; \
	 $(SCRIPTS)/unpack.sh $(PWD)/reference $(PWD) $(BASENAME) || exit 1; \
	 echo INSTALLING...; \
	 newname=`sed -n -e 's/^NAME=//gp' reference/LATEST.$(BASENAME)`; \
	 echo NEWNAME=$$newname ; \
	 rm -f leon-linux; \
	 ln -s $(BASENAME)-$$newname leon-linux; \
	 mv reference/LATEST.$(BASENAME) reference/CURRENT.$(BASENAME); \
	 if [ -x leon-linux/pkg/install.sh ]; then \
	  leon-linux/pkg/install.sh; \
	  fi; \
	 cd leon-linux; make install;

upgrade: download install

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

# Generate menu/xconfig configuration file
preconfig:

# Fixup before buildroot/linux etc. configuration
pre_postconfig: mkbuilddir
# Update Linux Configuration with PATH to CPIO Image if not updated before
ifeq ($(LB_LINUX_SET_CPIO),y)
	sed 's/^CONFIG_INITRAMFS_SOURCE=.*/CONFIG_INITRAMFS_SOURCE=\"..\/..\/dist\/.rootfs.cpio\"/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:

build:
	@if [ ! -d $(BUILDDIR) -o ! -f $(BUILDDIR)/.config ] ; then \
	 echo ; \
	 echo "!!! Build directory missing or Linux configuration not created." ; \
	 echo ; \
	 exit 1 ; \
	 fi;
# Update Linux Configuration with PATH to CPIO Image if not updated before
ifeq ($(LB_LINUX_SET_CPIO),y)
	sed 's/^CONFIG_INITRAMFS_SOURCE=.*/CONFIG_INITRAMFS_SOURCE=\"..\/..\/dist\/.rootfs.cpio\"/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
	cd $(BUILDDIR); \
	 make -C $(PWD)/$(LINUXDIR) ARCH=sparc O=`pwd` CROSS_COMPILE=$(TOOLCHAIN);
	cp -fa $(BUILDDIR)/arch/sparc/boot/image $(TOP)/output/images/
# Build U-boot Image?
ifeq ($(LB_LINUX_UBOOT),y)
	cd $(BUILDDIR); \
	 make -C $(PWD)/$(LINUXDIR) ARCH=sparc O=`pwd` CROSS_COMPILE=$(TOOLCHAIN) \
	      UIMAGE_LOADADDR=$(LB_LINUX_UBOOT_LOADADDR) uImage;
	cp -fa $(BUILDDIR)/arch/sparc/boot/uImage $(TOP)/output/images/uImage
endif

clean:
	cd $(BUILDDIR); \
	 make -C $(PWD)/$(LINUXDIR) ARCH=sparc O=`pwd` clean;

xconfig: mkbuilddir
	cd $(BUILDDIR); make -C $(PWD)/$(LINUXDIR) ARCH=sparc O=`pwd` xconfig

gconfig: mkbuilddir
	cd $(BUILDDIR); make -C $(PWD)/$(LINUXDIR) ARCH=sparc O=`pwd` gconfig

menuconfig: mkbuilddir
	cd $(BUILDDIR); make -C $(PWD)/$(LINUXDIR) ARCH=sparc O=`pwd` menuconfig

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

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