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

# Uncomment this to turn on verbose mode.
# export DH_VERBOSE=1

VERSION := 4.9.51-aiy

ARCH := arm64

DTB := freescale/fsl-imx8mq-phanbell.dtb

KERNEL_OPTIONS := \
	ARCH=arm64 \
	CROSS_COMPILE=aarch64-linux-gnu- \
	LOCALVERSION=-aiy

LDFLAGS :=
BUILD_DIR := $(CURDIR)/debian/build
DESTDIR := $(CURDIR)/debian/linux-image-$(VERSION)
DESTDIR_HEADERS := $(CURDIR)/debian/linux-headers-$(VERSION)

%:
	dh $@

override_dh_auto_clean:
	true

override_dh_auto_build:
	+make $(KERNEL_OPTIONS) defconfig
	cat debian/defconfig | tee -a .config
	+make $(KERNEL_OPTIONS) olddefconfig
	+make $(KERNEL_OPTIONS) -j$(shell nproc) Image modules dtbs

override_dh_auto_install:
	+make $(KERNEL_OPTIONS) INSTALL_MOD_PATH=$(DESTDIR) modules_install
	rm $(DESTDIR)/lib/modules/$(VERSION)/build
	rm $(DESTDIR)/lib/modules/$(VERSION)/source

	# Setup contents of /boot
	install -d $(DESTDIR)/boot
	cp arch/$(ARCH)/boot/Image $(DESTDIR)/boot/vmlinuz-$(VERSION)
	ln -sf vmlinuz-$(VERSION) $(DESTDIR)/boot/Image
	cp System.map $(DESTDIR)/boot/System.map-$(VERSION)
	cp .config $(DESTDIR)/boot/config-$(VERSION)
	cp arch/$(ARCH)/boot/dts/$(DTB) $(DESTDIR)/boot

	# Build header directory structure
	install -d $(DESTDIR_HEADERS)/usr/src/linux-headers-$(VERSION)
	install -d $(DESTDIR_HEADERS)/usr/src/linux-headers-$(VERSION)/arch/arm
	install -d $(DESTDIR_HEADERS)/usr/src/linux-headers-$(VERSION)/arch/$(ARCH)/kernel
	install -d $(DESTDIR_HEADERS)/usr/src/linux-headers-$(VERSION)/drivers/staging/android

	# Copy module information, include files, and important Makefiles into the header tree
	cp -a .config $(DESTDIR_HEADERS)/usr/src/linux-headers-$(VERSION)
	cp -a Module.symvers $(DESTDIR_HEADERS)/usr/src/linux-headers-$(VERSION)
	cp -a include $(DESTDIR_HEADERS)/usr/src/linux-headers-$(VERSION)
	cp -a drivers/staging/android/uapi $(DESTDIR_HEADERS)/usr/src/linux-headers-$(VERSION)/drivers/staging/android
	cp -a arch/$(ARCH)/include $(DESTDIR_HEADERS)/usr/src/linux-headers-$(VERSION)/arch/$(ARCH)
	# Sigh, arm64 headers also need arm headers...
	cp -a arch/arm/include $(DESTDIR_HEADERS)/usr/src/linux-headers-$(VERSION)/arch/arm
	cp -a Makefile $(DESTDIR_HEADERS)/usr/src/linux-headers-$(VERSION)

	( \
		find arch/$(ARCH) -maxdepth 1 -name 'Makefile*' -print; \
		find arch/$(ARCH) \( -name 'module.lds' -o -name 'Kbuild.platforms' -o -name 'Platform' \) -print; \
		find $$(find arch/$(ARCH) \( -name include -o -name scripts \) -type d -print) -print; \
	) | cpio -pdm $(DESTDIR_HEADERS)/usr/src/linux-headers-$(VERSION)

	# Clean up any leftover x86 artifacts from the kernel build, and then build scripts
	find $(CURDIR)/scripts -type f | xargs file | grep 'x86-' | awk '{print $$1}' | tr -d ':' | xargs rm -f
	mkdir -p $(BUILD_DIR)/build-tools/scripts
	$(MAKE) $(KERNEL_OPTIONS) \
		-C $(BUILD_DIR)/build-tools/scripts -f $(CURDIR)/debian/rules.d/scripts/Makefile \
		top_rulesdir=$(CURDIR)/debian/rules.d \
		top_srcdir=$(CURDIR) \
		OUTDIR=scripts \
		install \
		DESTDIR=$(DESTDIR_HEADERS) \
		prefix=/usr/src/linux-headers-$(VERSION)
	find $(BUILD_DIR)/build-tools

	# Setup the symlink from the modules directory to the headers
	install -d $(DESTDIR_HEADERS)/lib/modules/$(VERSION)
	ln -s /usr/src/linux-headers-$(VERSION) $(DESTDIR_HEADERS)/lib/modules/$(VERSION)/build
