# 
# initramfs/Makefile
#

PWD = $(shell pwd)

include $(PWD)/../toolchain/vars.mk

TARGET = arm-crux-linux-gnueabi
DEVICE = versatile

WORK = $(PWD)/work
CLFS = $(PWD)/../toolchain/clfs
CROSSTOOLS = $(PWD)/../toolchain/crosstools


KERNEL_PATH = $(PWD)/../kernel/$(DEVICE)
KERNEL_VERSION = $(shell grep '^KERNEL_VERSION = ' $(KERNEL_PATH)/Makefile | sed 's|KERNEL_VERSION = ||')

BUSYBOX_VERSION  = 1.20.2
BUSYBOX_SOURCE   = http://busybox.net/downloads/busybox-$(BUSYBOX_VERSION).tar.bz2

.PHONY: all check-root busybox gen_init_cpio initramfs clean distclean

all: busybox gen_init_cpio initramfs

clean: busybox-clean gen_init_cpio-clean initramfs-clean

distclean: busybox-distclean gen_init_cpio-distclean initramfs-distclean

check-root:
	@if [ "$$UID" != "0" ]; then \
		echo "You need to be root to do this."; \
		echo "Now you should run 'make initramfs' as root to finish compilation or 'sudo make initramfs'."; \
		exit 1; \
	fi

$(WORK)/busybox-$(BUSYBOX_VERSION).tar.bz2:
	wget -P $(WORK) -c http://busybox.net/downloads/busybox-$(BUSYBOX_VERSION).tar.bz2

$(WORK)/busybox-$(BUSYBOX_VERSION): $(WORK)/busybox-$(BUSYBOX_VERSION).tar.bz2 $(PWD)/busybox-$(BUSYBOX_VERSION).config
	tar -C $(WORK) -xvjf $(WORK)/busybox-$(BUSYBOX_VERSION).tar.bz2
	cp -v $(PWD)/busybox-$(BUSYBOX_VERSION).config $(WORK)/busybox-$(BUSYBOX_VERSION)/.config
	touch $(WORK)/busybox-$(BUSYBOX_VERSION).tar.bz2

$(WORK)/busybox-$(BUSYBOX_VERSION)/busybox: $(WORK)/busybox-$(BUSYBOX_VERSION)
	export PATH=$(CROSSTOOLS)/bin:$$PATH &&  \
	export LD_LIBRARY_PATH=$(CROSSTOOLS)/lib:$$LD_LIBRARY_PATH && \
	make -C $(WORK)/busybox-$(BUSYBOX_VERSION) ARCH=arm CROSS_COMPILE=$(TARGET)- && \
	$(TARGET)-strip $(WORK)/busybox-$(BUSYBOX_VERSION)/busybox && \
	touch $(WORK)/busybox-$(BUSYBOX_VERSION)/busybox

busybox: $(WORK)/busybox-$(BUSYBOX_VERSION)/busybox

busybox-clean:
	rm -vrf $(WORK)/busybox-$(BUSYBOX_VERSION)

busybox-distclean: busybox-clean
	rm -vf $(WORK)/busybox-$(BUSYBOX_VERSION).tar.bz2

$(WORK)/gen_init_cpio: $(WORK)/gen_init_cpio.c
	cd $(WORK) && \
		$(CC) $(CFLAGS) -Wall -o gen_init_cpio gen_init_cpio.c

gen_init_cpio: $(WORK)/gen_init_cpio

gen_init_cpio-clean:
	rm -rf $(WORK)/gen_init_cpio

gen_init_cpio-distclean: gen_init_cpio-clean

$(WORK)/initramfs: check-root busybox $(WORK)/gen_init_cpio $(PWD)/init $(PWD)/initramfs.lst
	sed -e "s/#KERNEL_VERSION#/$(KERNEL_VERSION)/g; s/#BUSYBOX_VERSION#/$(BUSYBOX_VERSION)/g" \
		$(PWD)/initramfs.lst > $(WORK)/initramfs.lst
	$(WORK)/gen_init_cpio $(WORK)/initramfs.lst > $(WORK)/initramfs

initramfs: $(WORK)/initramfs

initramfs-clean:
	rm -f $(WORK)/initramfs $(WORK)/initramfs.lst

initramfs-distclean: initramfs-clean

# End of file