Add apex module dpkg rules
Change-Id: Id3edaf3c658d83891e82bb3796c5e8e5b5bf7e2b
diff --git a/Makefile b/Makefile
index 640b7c9..5b8e08a 100644
--- a/Makefile
+++ b/Makefile
@@ -34,6 +34,7 @@
include $(ROOTDIR)/build/debootstrap.mk
include $(ROOTDIR)/build/img2simg.mk
include $(ROOTDIR)/build/kernel.mk
+include $(ROOTDIR)/build/kernel-modules.mk
include $(ROOTDIR)/build/partition-table.mk
include $(ROOTDIR)/build/packages.mk
include $(ROOTDIR)/build/prereqs.mk
diff --git a/apex-debian/changelog b/apex-debian/changelog
new file mode 100644
index 0000000..55d09df
--- /dev/null
+++ b/apex-debian/changelog
@@ -0,0 +1,5 @@
+apex (1.0-0) stable; urgency=medium
+
+ * Initial release.
+
+ -- AIY Projects <support-aiyprojects@google.com> Fri, 01 Jun 2018 00:00:00 -0800
diff --git a/apex-debian/compat b/apex-debian/compat
new file mode 100644
index 0000000..f599e28
--- /dev/null
+++ b/apex-debian/compat
@@ -0,0 +1 @@
+10
diff --git a/apex-debian/control b/apex-debian/control
new file mode 100644
index 0000000..f706219
--- /dev/null
+++ b/apex-debian/control
@@ -0,0 +1,9 @@
+Source: apex
+Maintainer: AIY Projects <support-aiyprojects@google.com>
+
+Package: apex
+Section: main
+Priority: optional
+Architecture: arm64
+Depends:
+Description: apex kernel module for AIY Board
diff --git a/apex-debian/copyright b/apex-debian/copyright
new file mode 100644
index 0000000..2f13fb3
--- /dev/null
+++ b/apex-debian/copyright
@@ -0,0 +1,7 @@
+Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Name: apex
+Source: https://aiyprojects.withgoogle.com
+
+Files: *
+Copyright: Copyright 2018 Google, LLC <support-aiyprojects@google.com>
+License: Apache-2.0
diff --git a/apex-debian/rules b/apex-debian/rules
new file mode 100755
index 0000000..39f3175
--- /dev/null
+++ b/apex-debian/rules
@@ -0,0 +1,27 @@
+#!/usr/bin/make -f
+# -*- makefile -*-
+
+# Uncomment this to turn on verbose mode.
+# export DH_VERBOSE=1
+
+kdist_image:
+ $(ROOT_CMD) dh_testroot
+ $(ROOT_CMD) dh_prep
+ $(ROOT_CMD) $(MAKE) -C $(KSRC) O=$(KOUT) M=$(shell pwd) modules
+ $(ROOT_CMD) $(MAKE) INSTALL_MOD_PATH=$(shell pwd)/debian/apex \
+ -C $(KSRC) O=$(KOUT) M=$(shell pwd) modules_install
+ $(ROOT_CMD) find $(shell pwd)/debian/apex/ -type f ! -name '*.ko' | xargs rm -f
+ $(ROOT_CMD) dh_installmodules
+ $(ROOT_CMD) dh_compress
+ $(ROOT_CMD) dh_fixperms
+ $(ROOT_CMD) dh_installdeb
+ $(ROOT_CMD) dh_gencontrol
+ $(ROOT_CMD) dh_md5sums
+ $(ROOT_CMD) dh_builddeb --destdir=$(KOUT)/../..
+ $(ROOT_CMD) dh_prep
+
+kdist_clean:
+ $(ROOT_CMD) $(MAKE) clean
+
+%:
+ dh $@
diff --git a/kernel-modules.mk b/kernel-modules.mk
new file mode 100644
index 0000000..db67d5b
--- /dev/null
+++ b/kernel-modules.mk
@@ -0,0 +1,28 @@
+ifeq ($(ROOTDIR),)
+$(error $$ROOTDIR IS NOT DEFINED -- don\'t forget to source setup.sh)
+endif
+
+include $(ROOTDIR)/build/preamble.mk
+
+MODULES_DIRS := $(wildcard $(ROOTDIR)/modules/*)
+MODULES := $(foreach module,$(MODULES_DIRS),$(notdir $(module)))
+
+define make-module-target
+$1: $(PRODUCT_OUT)/.$1
+$(PRODUCT_OUT)/.$1: $(shell find $(ROOTDIR)/modules/$1 -type f) $(KERNEL_OUT_DIR)/.config $(KERNEL_OUT_DIR)/arch/arm64/boot/Image
+ mkdir -p $(PRODUCT_OUT)/obj/MODULE_OBJ/$1/debian
+ cp -afs $(ROOTDIR)/modules/$1/* $(PRODUCT_OUT)/obj/MODULE_OBJ/$1
+ cp -r $(ROOTDIR)/build/$1-debian/* $(PRODUCT_OUT)/obj/MODULE_OBJ/$1/debian/
+ +cd $(PRODUCT_OUT)/obj/MODULE_OBJ/$1; \
+ DEB_HOST_ARCH=arm64 \
+ ROOT_CMD=fakeroot \
+ $(KERNEL_OPTIONS) \
+ KSRC=$(KERNEL_SRC_DIR) \
+ KOUT=$(KERNEL_OUT_DIR) \
+ debian/rules kdist_image
+endef
+
+$(foreach module,$(MODULES),$(eval $(call make-module-target,$(module))))
+
+modules:: $(foreach module,$(MODULES),$(PRODUCT_OUT)/.$(module))
+.PHONY:: modules
\ No newline at end of file
diff --git a/kernel.mk b/kernel.mk
index 8a790dd..a4affaf 100644
--- a/kernel.mk
+++ b/kernel.mk
@@ -4,35 +4,30 @@
include $(ROOTDIR)/build/preamble.mk
-# Kernel directories
-KERNEL_SRC_DIR := $(ROOTDIR)/linux-imx
-KERNEL_OUT_DIR := $(PRODUCT_OUT)/obj/KERNEL_OBJ
-
-$(KERNEL_OUT_DIR)/.config: $(ROOTDIR)/build/defconfig
+$(KERNEL_OUT_DIR):
mkdir -p $(KERNEL_OUT_DIR)
- cp -afs $(ROOTDIR)/linux-imx/* $(KERNEL_OUT_DIR)
- +make -C $(KERNEL_SRC_DIR) O=$(KERNEL_OUT_DIR) ARCH=arm64 CROSS_COMPILE=$(TOOLCHAIN) mrproper defconfig
+
+$(KERNEL_OUT_DIR)/.config: $(ROOTDIR)/build/defconfig | $(KERNEL_OUT_DIR)
+ +make -C $(KERNEL_SRC_DIR) O=$(KERNEL_OUT_DIR) $(KERNEL_OPTIONS) mrproper defconfig
cat $(ROOTDIR)/build/defconfig | tee -a $(KERNEL_OUT_DIR)/.config
$(KERNEL_OUT_DIR)/arch/arm64/boot/Image: $(KERNEL_OUT_DIR)/.config
- +make -C $(KERNEL_SRC_DIR) O=$(KERNEL_OUT_DIR) ARCH=arm64 CROSS_COMPILE=$(TOOLCHAIN) Image modules dtbs
+ +make -C $(KERNEL_SRC_DIR) O=$(KERNEL_OUT_DIR) $(KERNEL_OPTIONS) Image modules dtbs
kernel: $(KERNEL_OUT_DIR)/arch/arm64/boot/Image $(KERNEL_OUT_DIR)/arch/arm64/boot/dts/freescale/fsl-imx8mq-phanbell.dtb
$(PRODUCT_OUT)/linux-image-4.9.51-aiy_1_arm64.deb: $(KERNEL_OUT_DIR)/.config
- cd $(KERNEL_OUT_DIR); MFLAGS="" MAKEFLAGS="" make-kpkg --rootcmd fakeroot --arch arm64 \
- --cross-compile $(TOOLCHAIN) --revision 1 --append-to-version=-aiy \
- -j $(shell nproc) --overlay-dir=$(ROOTDIR)/build/kernel-overlay \
- kernel_image kernel_headers
- mv $(KERNEL_OUT_DIR)/../*.deb $(PRODUCT_OUT)
+ +make -C $(KERNEL_SRC_DIR) O=$(KERNEL_OUT_DIR) $(KERNEL_OPTIONS) \
+ KDEB_PKGVERSION=1 KBUILD_IMAGE=Image deb-pkg
+ mv $(KERNEL_OUT_DIR)/../linux-image-4.9.51-aiy_1_arm64.deb $(PRODUCT_OUT)
+ mv $(KERNEL_OUT_DIR)/../linux-headers-4.9.51-aiy_1_arm64.deb $(PRODUCT_OUT)
targets::
@echo "kernel - builds the kernel and boot partition"
clean::
+make -C $(KERNEL_SRC_DIR) mrproper
-
-# Mark the deb as phony so we enxure that we rely on the kbuild system for
+# Mark the deb as phony so we ensure that we rely on the kbuild system for
# incremental builds.
.PHONY:: kernel \
$(KERNEL_OUT_DIR)/arch/arm64/boot/dts/freescale/fsl-imx8mq-phanbell.dtb \
diff --git a/packages.mk b/packages.mk
index ccd8296..56723c3 100644
--- a/packages.mk
+++ b/packages.mk
@@ -1,3 +1,9 @@
+ifeq ($(ROOTDIR),)
+$(error $$ROOTDIR IS NOT DEFINED -- don\'t forget to source setup.sh)
+endif
+
+include $(ROOTDIR)/build/preamble.mk
+
PACKAGES_DIRS := $(wildcard $(ROOTDIR)/packages/*)
PACKAGES := $(foreach package,$(PACKAGES_DIRS),$(notdir $(package)))
diff --git a/preamble.mk b/preamble.mk
index c8ae891..2d243d7 100644
--- a/preamble.mk
+++ b/preamble.mk
@@ -4,6 +4,11 @@
# Globally useful directories
TOOLCHAIN := $(ROOTDIR)/toolchain/bin/aarch64-linux-android-
+# Kernel directories and options
+KERNEL_SRC_DIR := $(ROOTDIR)/linux-imx
+KERNEL_OUT_DIR := $(PRODUCT_OUT)/obj/KERNEL_OBJ
+KERNEL_OPTIONS := ARCH=arm64 CROSS_COMPILE=$(TOOLCHAIN) LOCALVERSION=-aiy
+
# Used by debootstrap and rootfs both
DEBOOTSTRAP_TARBALL := $(ROOTDIR)/cache/debootstrap.tgz
DEBOOTSTRAP_TARBALL_SHA256 := $(ROOTDIR)/cache/debootstrap.tgz.sha256sum
diff --git a/rootfs.mk b/rootfs.mk
index f55df8d..1accb7f 100644
--- a/rootfs.mk
+++ b/rootfs.mk
@@ -93,7 +93,9 @@
$(ROOTFS_PATCHED_IMG): $(ROOTFS_RAW_IMG) \
$(ROOTDIR)/build/boot.mk \
$(PRODUCT_OUT)/linux-image-4.9.51-aiy_1_arm64.deb \
- | $(PRODUCT_OUT)/boot.img
+ | $(PRODUCT_OUT)/boot.img \
+ modules \
+ packages
cp -r $(ROOTFS_RAW_IMG) $(ROOTFS_PATCHED_IMG)
mkdir -p $(ROOTFS_DIR)
-sudo umount $(ROOTFS_DIR)/boot