#!/usr/bin/make -f
# -*- makefile -*-

#export DH_VERBOSE=1

SOURCE_VERSION := $(shell sed -n 's/^Build-Depends-Indep: .*kernel-source-\([^ ]*\).*$$/\1/; t e; b; :e; p; q' debian/control)
WEEK := $(shell date +%Y%W)

KERNELRELEASE = $(shell cat $(CURDIR)/kernel-source-$(SOURCE_VERSION)/include/config/kernel.release 2> /dev/null)

PRODUCT := rx-34
DEBIAN_DIR := debian
PACKAGE := $(PRODUCT)-kernel
DEFCONFIG := n800_defconfig

ARCH = $(shell dpkg-architecture -qDEB_HOST_ARCH_CPU)

INCLUDE_HEADERS =  asm asm-generic asm-$(ARCH) Kbuild linux mtd rdma sound acpi config math-emu net rxrpc video keys media pcmcia scsi

build: kernel-oprofile kernel headers kernel modules

kernel: configure-stamp
	echo "compile $(PRODUCT) kernel"
	cd $(CURDIR)/kernel-source-$(SOURCE_VERSION)/ && \
	make HOSTCC=host-gcc bzImage

kernel-oprofile: configure-oprofile-stamp
	echo "compile $(PRODUCT) oprofile kernel"
	cd $(CURDIR)/kernel-source-$(SOURCE_VERSION)-oprofile/ && \
	make HOSTCC=host-gcc

modules: configure-stamp
	echo "compile $(PRODUCT) kernel modules"
	cd $(CURDIR)/kernel-source-$(SOURCE_VERSION)/ && \
	make HOSTCC=host-gcc modules

headers: configure-stamp
	echo "prepare $(PRODUCT) kernel headers"
	cd $(CURDIR)/kernel-source-$(SOURCE_VERSION)/ && \
	make HOSTCC=host-gcc modules_prepare

configure-stamp: sources-stamp
	cd $(CURDIR)/kernel-source-$(SOURCE_VERSION)/ && \
	make HOSTCC=host-gcc $(DEFCONFIG)
	touch $@

configure-oprofile-stamp: sources-oprofile-stamp
	cd $(CURDIR)/kernel-source-$(SOURCE_VERSION)-oprofile/ && \
	make HOSTCC=host-gcc $(DEFCONFIG) && \
	patch -p1 < $(CURDIR)/$(DEBIAN_DIR)/oprofile_config.patch && \
	make HOSTCC=host-gcc oldconfig
	touch $@

sources-stamp:
	test -d $(CURDIR)/kernel-source-$(SOURCE_VERSION) || tar jxf /usr/src/kernel-source-$(SOURCE_VERSION).tar.bz2
	touch $@

sources-oprofile-stamp: sources-stamp
	cp -a $(CURDIR)/kernel-source-$(SOURCE_VERSION)/ $(CURDIR)/kernel-source-$(SOURCE_VERSION)-oprofile/
	touch $@

clean:
	dh_testdir
	dh_testroot
	rm -f configure-stamp sources-stamp
	rm -f configure-oprofile-stamp sources-oprofile-stamp
	rm -rf kernel-source-$(SOURCE_VERSION)
	rm -rf kernel-source-$(SOURCE_VERSION)-oprofile
	dh_clean

install: build install-kernel install-modules install-headers install-kernel-oprofile

install-kernel:
	dh_testdir
	dh_testroot
	dh_installdirs

	install $(CURDIR)/kernel-source-$(SOURCE_VERSION)/arch/arm/boot/zImage \
                $(CURDIR)/$(DEBIAN_DIR)/$(PACKAGE)/usr/share/osso/kernels/zImage-$(PRODUCT)-$(WEEK) && \
	cd $(CURDIR)/kernel-source-$(SOURCE_VERSION); \
	chmod a-x $(CURDIR)/$(DEBIAN_DIR)/$(PACKAGE)/usr/share/osso/kernels/zImage-$(PRODUCT)-$(WEEK)

install-kernel-oprofile:
	dh_testdir
	dh_testroot
	dh_installdirs

	mkdir -p $(CURDIR)/$(DEBIAN_DIR)/$(PRODUCT)-kernel-oprofile/usr/share/osso/kernels/
	mkdir -p $(CURDIR)/$(DEBIAN_DIR)/$(PACKAGE)-debug/usr/lib/debug/
	install $(CURDIR)/kernel-source-$(SOURCE_VERSION)-oprofile/arch/arm/boot/zImage \
		$(CURDIR)/$(DEBIAN_DIR)/$(PRODUCT)-kernel-oprofile/usr/share/osso/kernels/zImage-oprofile-$(PRODUCT)-$(WEEK)
	chmod a-x $(CURDIR)/$(DEBIAN_DIR)/$(PACKAGE)-oprofile/usr/share/osso/kernels/zImage-oprofile-$(PRODUCT)-$(WEEK)
	install $(CURDIR)/kernel-source-$(SOURCE_VERSION)-oprofile/vmlinux \
		$(CURDIR)/$(DEBIAN_DIR)/$(PRODUCT)-kernel-debug/usr/lib/debug/vmlinux-oprofile-$(PRODUCT)-$(WEEK)
	install $(CURDIR)/kernel-source-$(SOURCE_VERSION)/vmlinux \
		$(CURDIR)/$(DEBIAN_DIR)/$(PRODUCT)-kernel-debug/usr/lib/debug/vmlinux-$(PRODUCT)-$(WEEK)
	chmod a-x $(CURDIR)/$(DEBIAN_DIR)/$(PACKAGE)-debug/usr/lib/debug/vmlinux-*

install-modules:
	dh_testdir
	dh_testroot

	mkdir -p $(CURDIR)/$(DEBIAN_DIR)/$(PRODUCT)-kernel-modules/lib/modules/$(KERNELRELEASE)
	for f in $$(find $(CURDIR)/kernel-source-$(SOURCE_VERSION) -name "*.ko"); do \
		install -c -m 644 $$f $(CURDIR)/$(DEBIAN_DIR)/$(PRODUCT)-kernel-modules/lib/modules/$(KERNELRELEASE)/$$(basename $$f); \
	done
	ln -sf $(KERNELRELEASE) $(CURDIR)/$(DEBIAN_DIR)/$(PRODUCT)-kernel-modules/lib/modules/current

install-headers:
	dh_testdir
	dh_testroot
	dh_installdirs

	cd $(CURDIR)/kernel-source-$(SOURCE_VERSION); \
	install -p -o root -g root -m 644 .config  $(CURDIR)/$(DEBIAN_DIR)/$(PRODUCT)-kernel-headers/usr/src/$(PRODUCT)-kernel-headers/ && \
	install -p -o root -g root -m 644 Makefile $(CURDIR)/$(DEBIAN_DIR)/$(PRODUCT)-kernel-headers/usr/src/$(PRODUCT)-kernel-headers/ && \
	find arch/$(ARCH) $(foreach dir,$(INCLUDE_HEADERS),include/$(dir)) -name '*.h' \
		-exec install -D -m644 {} $(CURDIR)/$(DEBIAN_DIR)/$(PRODUCT)-kernel-headers/usr/src/$(PRODUCT)-kernel-headers/{} \;
	ln -sf asm-$(ARCH) $(CURDIR)/$(DEBIAN_DIR)/$(PRODUCT)-kernel-headers/usr/src/$(PRODUCT)-kernel-headers/include/asm
	cp -a $(CURDIR)/kernel-source-$(SOURCE_VERSION)/include/asm-$(ARCH)/arch \
		$(CURDIR)/$(DEBIAN_DIR)/$(PRODUCT)-kernel-headers/usr/src/$(PRODUCT)-kernel-headers/include/asm-$(ARCH)
	#cp -a $(CURDIR)/kernel-source-$(SOURCE_VERSION)/scripts $(CURDIR)/$(DEBIAN_DIR)/$(PRODUCT)-kernel-headers/usr/src/$(PRODUCT)-kernel-headers

binary-indep: build install

binary-arch: build install
	dh_testdir
	dh_testroot
	dh_installchangelogs 
	dh_installdocs
	dh_compress
	dh_fixperms --exclude /usr/src/$(PRODUCT)-kernel-headers
	dh_installdeb
	dh_shlibdeps
	dh_gencontrol
	dh_md5sums
	dh_builddeb

binary: binary-indep binary-arch

modules-deb: modules install-modules
	dh_testdir
	dh_testroot
	dh_fixperms -p$(PRODUCT)-kernel-modules --exclude /usr/src/$(PRODUCT)-kernel-headers
	dh_installdeb -p$(PRODUCT)-kernel-modules
	dh_gencontrol -p$(PRODUCT)-kernel-modules
	dh_md5sums -p$(PRODUCT)-kernel-modules
	dh_builddeb -p$(PRODUCT)-kernel-modules


.PHONY: build clean binary-indep binary-arch binary install headers kernel modules
.PHONY: kernel-oprofile install-kernel-oprofile
