tree 04cd6aad8c63b75a8780357bd46774cc78b5118c
parent 8d5db3c24fb68928306cb424490af10e4a0fd3aa
author Tom Marshall <tdm.code@gmail.com> 1510257753 +0100
committer Rashed Abdel-Tawab <rashedabdeltawab@gmail.com> 1515467397 +0000

lineage: build: kernel: Rework kernel header logic

The existing kernel header logic has several issues:

 * It does not depend on the actual kernel headers, so it does not
   detect actual kernel header changes.

 * It does depend on the kernel config, which should not be used to
   generate (user space) kernel headers.

The end result is that kernel headers aren't properly regenerated when
needed, and spuriously regenerated when not needed.  Additionally, the
kernel header rebuild mucks around with the kernel config, which is
unneccesary and fraught with danger.

Rewrite the kernel header dependency and generation logic as follows:

 * Use the dependency file $(KERNEL_OUT)/.headers_install_deps to
   manage dependencies on the actual kernel header files which are
   exported to user space (and the top level kernel Makefile, which
   is used to generate version.h).  The dependency file is exactly
   the same as what GCC would output for a C/C++ dependency with the
   M/MM flags.

 * Conditionally include the dependency file to detect when headers
   should be (re)generated.

 * Introduce the phony target INSTALLED_KERNEL_HEADERS for modules to
   declare a dependency on kernel headers.

Additionally:

 * Get rid of TARGET_KERNEL_HEADER_ARCH and KERNEL_HEADER_DEFCONFIG.

 * Get rid of KERNEL_OUT_STAMP and move commands to the appropriate
   places in the rules.

 * Fail the build when $(KERNEL_OUT)/usr is mentioned in a dependency.
   Note a separate commit to build/core/binary.mk will provide a
   migration path and a suitable deprecation warning.

 * Declare the kernel*config targets phony.

Change-Id: I8b46f4ea1c622d8e73cca5157be96ec09d42ebb3
