platform_vendor_tequila/build/tasks/kernel.mk

309 lines
15 KiB
Makefile
Raw Normal View History

# Copyright (C) 2012 The CyanogenMod Project
# (C) 2017 The LineageOS Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Android makefile to build kernel as a part of Android Build
#
# Configuration
# =============
#
# These config vars are usually set in BoardConfig.mk:
#
# TARGET_KERNEL_CONFIG = Kernel defconfig
# TARGET_KERNEL_VARIANT_CONFIG = Variant defconfig, optional
# TARGET_KERNEL_SELINUX_CONFIG = SELinux defconfig, optional
# TARGET_KERNEL_ADDITIONAL_CONFIG = Additional defconfig, optional
#
# TARGET_KERNEL_CLANG_COMPILE = Compile kernel with clang, defaults to false
#
# TARGET_KERNEL_CLANG_VERSION = Clang prebuilts version, optional, defaults to clang-stable
#
# TARGET_KERNEL_CLANG_PATH = Clang prebuilts path, optional
#
# BOARD_KERNEL_IMAGE_NAME = Built image name
# for ARM use: zImage
# for ARM64 use: Image.gz
# for uncompressed use: Image
# If using an appended DT, append '-dtb'
# to the end of the image name.
# For example, for ARM devices,
# use zImage-dtb instead of zImage.
#
# KERNEL_CC = The C Compiler used. This is automatically set based
# on whether the clang version is set, optional.
#
# KERNEL_CLANG_TRIPLE = Target triple for clang (e.g. aarch64-linux-gnu-)
# defaults to arm-linux-gnu- for arm
# aarch64-linux-gnu- for arm64
# x86_64-linux-gnu- for x86
#
# NEED_KERNEL_MODULE_ROOT = Optional, if true, install kernel
# modules in root instead of vendor
# NEED_KERNEL_MODULE_SYSTEM = Optional, if true, install kernel
# modules in system instead of vendor
ifneq ($(TARGET_NO_KERNEL),true)
## Externally influenced variables
KERNEL_SRC := $(TARGET_KERNEL_SOURCE)
# kernel configuration - mandatory
KERNEL_DEFCONFIG := $(TARGET_KERNEL_CONFIG)
VARIANT_DEFCONFIG := $(TARGET_KERNEL_VARIANT_CONFIG)
SELINUX_DEFCONFIG := $(TARGET_KERNEL_SELINUX_CONFIG)
## Internal variables
KERNEL_OUT := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ
KERNEL_CONFIG := $(KERNEL_OUT)/.config
ifeq ($(KERNEL_ARCH),x86_64)
KERNEL_DEFCONFIG_ARCH := x86
else
KERNEL_DEFCONFIG_ARCH := $(KERNEL_ARCH)
endif
KERNEL_DEFCONFIG_SRC := $(KERNEL_SRC)/arch/$(KERNEL_DEFCONFIG_ARCH)/configs/$(KERNEL_DEFCONFIG)
ifeq ($(BOARD_KERNEL_IMAGE_NAME),)
$(error BOARD_KERNEL_IMAGE_NAME not defined.)
endif
TARGET_PREBUILT_INT_KERNEL := $(KERNEL_OUT)/arch/$(KERNEL_ARCH)/boot/$(BOARD_KERNEL_IMAGE_NAME)
ifneq ($(TARGET_KERNEL_ADDITIONAL_CONFIG),)
KERNEL_ADDITIONAL_CONFIG := $(TARGET_KERNEL_ADDITIONAL_CONFIG)
KERNEL_ADDITIONAL_CONFIG_SRC := $(KERNEL_SRC)/arch/$(KERNEL_ARCH)/configs/$(KERNEL_ADDITIONAL_CONFIG)
ifeq ("$(wildcard $(KERNEL_ADDITIONAL_CONFIG_SRC))","")
$(warning TARGET_KERNEL_ADDITIONAL_CONFIG '$(TARGET_KERNEL_ADDITIONAL_CONFIG)' doesn't exist)
KERNEL_ADDITIONAL_CONFIG_SRC := /dev/null
endif
else
KERNEL_ADDITIONAL_CONFIG_SRC := /dev/null
endif
ifeq "$(wildcard $(KERNEL_SRC) )" ""
ifneq ($(TARGET_PREBUILT_KERNEL),)
HAS_PREBUILT_KERNEL := true
NEEDS_KERNEL_COPY := true
else
$(foreach cf,$(PRODUCT_COPY_FILES), \
$(eval _src := $(call word-colon,1,$(cf))) \
$(eval _dest := $(call word-colon,2,$(cf))) \
$(ifeq kernel,$(_dest), \
$(eval HAS_PREBUILT_KERNEL := true)))
endif
ifneq ($(HAS_PREBUILT_KERNEL),)
$(warning ***************************************************************)
$(warning * Using prebuilt kernel binary instead of source *)
$(warning * THIS IS DEPRECATED, AND WILL BE DISCONTINUED *)
$(warning * Please configure your device to download the kernel *)
$(warning * source repository to $(KERNEL_SRC))
$(warning * for more information *)
$(warning ***************************************************************)
FULL_KERNEL_BUILD := false
KERNEL_BIN := $(TARGET_PREBUILT_KERNEL)
else
$(warning ***************************************************************)
$(warning * *)
$(warning * No kernel source found, and no fallback prebuilt defined. *)
$(warning * Please make sure your device is properly configured to *)
$(warning * download the kernel repository to $(KERNEL_SRC))
$(warning * and add the TARGET_KERNEL_CONFIG variable to BoardConfig.mk *)
$(warning * *)
$(warning * As an alternative, define the TARGET_PREBUILT_KERNEL *)
$(warning * variable with the path to the prebuilt binary kernel image *)
$(warning * in your BoardConfig.mk file *)
$(warning * *)
$(warning ***************************************************************)
$(error "NO KERNEL")
endif
else
NEEDS_KERNEL_COPY := true
ifeq ($(TARGET_KERNEL_CONFIG),)
$(warning **********************************************************)
$(warning * Kernel source found, but no configuration was defined *)
$(warning * Please add the TARGET_KERNEL_CONFIG variable to your *)
$(warning * BoardConfig.mk file *)
$(warning **********************************************************)
# $(error "NO KERNEL CONFIG")
else
#$(info Kernel source found, building it)
FULL_KERNEL_BUILD := true
KERNEL_BIN := $(TARGET_PREBUILT_INT_KERNEL)
endif
endif
ifeq ($(FULL_KERNEL_BUILD),true)
ifeq ($(NEED_KERNEL_MODULE_ROOT),true)
KERNEL_MODULES_INSTALL := root
KERNEL_MODULES_OUT := $(TARGET_ROOT_OUT)/lib/modules
KERNEL_DEPMOD_STAGING_DIR := $(call intermediates-dir-for,PACKAGING,depmod_recovery)
KERNEL_MODULE_MOUNTPOINT :=
else ifeq ($(NEED_KERNEL_MODULE_SYSTEM),true)
KERNEL_MODULES_INSTALL := $(TARGET_COPY_OUT_SYSTEM)
KERNEL_MODULES_OUT := $(TARGET_OUT)/lib/modules
KERNEL_DEPMOD_STAGING_DIR := $(call intermediates-dir-for,PACKAGING,depmod_system)
KERNEL_MODULE_MOUNTPOINT := system
else
KERNEL_MODULES_INSTALL := $(TARGET_COPY_OUT_VENDOR)
KERNEL_MODULES_OUT := $(TARGET_OUT_VENDOR)/lib/modules
KERNEL_DEPMOD_STAGING_DIR := $(call intermediates-dir-for,PACKAGING,depmod_vendor)
KERNEL_MODULE_MOUNTPOINT := vendor
endif
ifeq ($(TARGET_KERNEL_CLANG_COMPILE),true)
ifneq ($(TARGET_KERNEL_CLANG_VERSION),)
# Find the clang-* directory containing the specified version
KERNEL_CLANG_VERSION := $(shell find $(BUILD_TOP)/prebuilts/clang/host/$(HOST_OS)-x86/ -name AndroidVersion.txt -exec grep -l $(TARGET_KERNEL_CLANG_VERSION) "{}" \; | sed -e 's|/AndroidVersion.txt$$||g;s|^.*/||g')
else
# Use the default version of clang if TARGET_KERNEL_CLANG_VERSION hasn't been set by the device config
KERNEL_CLANG_VERSION := $(LLVM_PREBUILTS_VERSION)
endif
TARGET_KERNEL_CLANG_PATH ?= $(BUILD_TOP)/prebuilts/clang/host/$(HOST_OS)-x86/$(KERNEL_CLANG_VERSION)/bin
ifeq ($(KERNEL_ARCH),arm64)
KERNEL_CLANG_TRIPLE ?= CLANG_TRIPLE=aarch64-linux-gnu-
else ifeq ($(KERNEL_ARCH),arm)
KERNEL_CLANG_TRIPLE ?= CLANG_TRIPLE=arm-linux-gnu-
else ifeq ($(KERNEL_ARCH),x86)
KERNEL_CLANG_TRIPLE ?= CLANG_TRIPLE=x86_64-linux-gnu-
endif
PATH_OVERRIDE := PATH=$(TARGET_KERNEL_CLANG_PATH):$$PATH LD_LIBRARY_PATH=$(BUILD_TOP)/prebuilts/clang/host/$(HOST_OS)-x86/$(KERNEL_CLANG_VERSION)/lib64:$$LD_LIBRARY_PATH
ifeq ($(KERNEL_CC),)
KERNEL_CC := CC="$(CCACHE_BIN) clang"
endif
endif
ifeq ($(TARGET_KERNEL_MODULES),)
TARGET_KERNEL_MODULES := INSTALLED_KERNEL_MODULES
endif
KERNEL_ADDITIONAL_CONFIG_OUT := $(KERNEL_OUT)/.additional_config
.PHONY: force_additional_config
$(KERNEL_ADDITIONAL_CONFIG_OUT): force_additional_config
$(hide) cmp -s $(KERNEL_ADDITIONAL_CONFIG_SRC) $@ || cp $(KERNEL_ADDITIONAL_CONFIG_SRC) $@;
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
2017-11-09 21:02:33 +01:00
$(KERNEL_CONFIG): $(KERNEL_DEFCONFIG_SRC) $(KERNEL_ADDITIONAL_CONFIG_OUT)
@echo "Building Kernel Config"
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
2017-11-09 21:02:33 +01:00
$(hide) mkdir -p $(KERNEL_OUT)
$(PATH_OVERRIDE) $(MAKE) $(KERNEL_MAKE_FLAGS) -C $(KERNEL_SRC) O=$(KERNEL_OUT) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) $(KERNEL_CLANG_TRIPLE) $(KERNEL_CC) VARIANT_DEFCONFIG=$(VARIANT_DEFCONFIG) SELINUX_DEFCONFIG=$(SELINUX_DEFCONFIG) $(KERNEL_DEFCONFIG)
$(hide) if [ ! -z "$(KERNEL_CONFIG_OVERRIDE)" ]; then \
echo "Overriding kernel config with '$(KERNEL_CONFIG_OVERRIDE)'"; \
echo $(KERNEL_CONFIG_OVERRIDE) >> $(KERNEL_OUT)/.config; \
$(PATH_OVERRIDE) $(MAKE) -C $(KERNEL_SRC) O=$(KERNEL_OUT) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) $(KERNEL_CLANG_TRIPLE) $(KERNEL_CC) oldconfig; fi
# Create defconfig build artifact
$(hide) $(PATH_OVERRIDE) $(MAKE) -C $(KERNEL_SRC) O=$(KERNEL_OUT) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) $(KERNEL_CLANG_TRIPLE) $(KERNEL_CC) savedefconfig
$(hide) if [ ! -z "$(KERNEL_ADDITIONAL_CONFIG)" ]; then \
echo "Using additional config '$(KERNEL_ADDITIONAL_CONFIG)'"; \
$(KERNEL_SRC)/scripts/kconfig/merge_config.sh -m -O $(KERNEL_OUT) $(KERNEL_OUT)/.config $(KERNEL_SRC)/arch/$(KERNEL_ARCH)/configs/$(KERNEL_ADDITIONAL_CONFIG); \
$(PATH_OVERRIDE) $(MAKE) -C $(KERNEL_SRC) O=$(KERNEL_OUT) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) $(KERNEL_CLANG_TRIPLE) $(KERNEL_CC) KCONFIG_ALLCONFIG=$(KERNEL_OUT)/.config alldefconfig; fi
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
2017-11-09 21:02:33 +01:00
.PHONY: TARGET_KERNEL_BINARIES
TARGET_KERNEL_BINARIES: $(KERNEL_CONFIG)
@echo "Building Kernel"
$(PATH_OVERRIDE) $(MAKE) $(KERNEL_MAKE_FLAGS) -C $(KERNEL_SRC) O=$(KERNEL_OUT) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) $(KERNEL_CLANG_TRIPLE) $(KERNEL_CC) $(BOARD_KERNEL_IMAGE_NAME)
$(hide) if grep -q '^CONFIG_OF=y' $(KERNEL_CONFIG); then \
echo "Building DTBs"; \
$(PATH_OVERRIDE) $(MAKE) $(KERNEL_MAKE_FLAGS) -C $(KERNEL_SRC) O=$(KERNEL_OUT) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) $(KERNEL_CLANG_TRIPLE) $(KERNEL_CC) dtbs; \
fi
$(hide) if grep -q '=m' $(KERNEL_CONFIG); then \
echo "Building Kernel Modules"; \
$(PATH_OVERRIDE) $(MAKE) $(KERNEL_MAKE_FLAGS) -C $(KERNEL_SRC) O=$(KERNEL_OUT) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) $(KERNEL_CLANG_TRIPLE) $(KERNEL_CC) modules; \
fi
.PHONY: INSTALLED_KERNEL_MODULES
INSTALLED_KERNEL_MODULES: depmod-host
$(hide) rm -rf $(KERNEL_MODULES_OUT)
$(hide) mkdir -p $(KERNEL_MODULES_OUT)
$(hide) rm -rf $(KERNEL_DEPMOD_STAGING_DIR)
$(hide) if grep -q '=m' $(KERNEL_CONFIG); then \
echo "Installing Kernel Modules"; \
$(PATH_OVERRIDE) $(MAKE) $(KERNEL_MAKE_FLAGS) -C $(KERNEL_SRC) O=$(KERNEL_OUT) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) $(KERNEL_CLANG_TRIPLE) $(KERNEL_CC) INSTALL_MOD_PATH=../../$(KERNEL_MODULES_INSTALL) modules_install && \
mofile=$$(find $(KERNEL_MODULES_OUT) -type f -name modules.order) && \
mpath=$$(dirname $$mofile) && \
for f in $$(find $$mpath/kernel -type f -name '*.ko'); do \
$(KERNEL_TOOLCHAIN_PATH)strip --strip-unneeded $$f; \
mv $$f $(KERNEL_MODULES_OUT); \
done && \
rm -rf $$mpath && \
mkdir -p $(KERNEL_DEPMOD_STAGING_DIR)/lib/modules/0.0/$(KERNEL_MODULE_MOUNTPOINT)/lib/modules && \
find $(KERNEL_MODULES_OUT) -name *.ko -exec cp {} $(KERNEL_DEPMOD_STAGING_DIR)/lib/modules/0.0/$(KERNEL_MODULE_MOUNTPOINT)/lib/modules \; && \
$(DEPMOD) -b $(KERNEL_DEPMOD_STAGING_DIR) 0.0 && \
sed -e 's/\(.*modules.*\):/\/\1:/g' -e 's/ \([^ ]*modules[^ ]*\)/ \/\1/g' $(KERNEL_DEPMOD_STAGING_DIR)/lib/modules/0.0/modules.dep > $(KERNEL_MODULES_OUT)/modules.dep; \
fi
$(TARGET_KERNEL_MODULES): TARGET_KERNEL_BINARIES
$(TARGET_PREBUILT_INT_KERNEL): $(TARGET_KERNEL_MODULES)
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
2017-11-09 21:02:33 +01:00
.PHONY: kerneltags
kerneltags: $(KERNEL_CONFIG)
$(hide) mkdir -p $(KERNEL_OUT)
$(PATH_OVERRIDE) $(MAKE) -C $(KERNEL_SRC) O=$(KERNEL_OUT) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) $(KERNEL_CLANG_TRIPLE) $(KERNEL_CC) tags
.PHONY: kernelsavedefconfig alldefconfig
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
2017-11-09 21:02:33 +01:00
kernelsavedefconfig:
$(hide) mkdir -p $(KERNEL_OUT)
$(PATH_OVERRIDE) $(MAKE) $(KERNEL_MAKE_FLAGS) -C $(KERNEL_SRC) O=$(KERNEL_OUT) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) $(KERNEL_CLANG_TRIPLE) $(KERNEL_CC) $(KERNEL_DEFCONFIG)
env KCONFIG_NOTIMESTAMP=true \
$(PATH_OVERRIDE) $(MAKE) -C $(KERNEL_SRC) O=$(KERNEL_OUT) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) $(KERNEL_CLANG_TRIPLE) $(KERNEL_CC) savedefconfig
cp $(KERNEL_OUT)/defconfig $(KERNEL_DEFCONFIG_SRC)
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
2017-11-09 21:02:33 +01:00
alldefconfig:
$(hide) mkdir -p $(KERNEL_OUT)
env KCONFIG_NOTIMESTAMP=true \
$(PATH_OVERRIDE) $(MAKE) -C $(KERNEL_SRC) O=$(KERNEL_OUT) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) $(KERNEL_CLANG_TRIPLE) $(KERNEL_CC) alldefconfig
TARGET_PREBUILT_DTBO = $(PRODUCT_OUT)/dtbo/arch/$(KERNEL_ARCH)/boot/dtbo.img
$(TARGET_PREBUILT_DTBO): $(AVBTOOL)
echo -e ${CL_GRN}"Building DTBO.img"${CL_RST}
$(PATH_OVERRIDE) $(MAKE) $(KERNEL_MAKE_FLAGS) -C $(KERNEL_SRC) O=$(PRODUCT_OUT)/dtbo ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) $(KERNEL_CLANG_TRIPLE) $(KERNEL_CC) $(KERNEL_DEFCONFIG)
$(PATH_OVERRIDE) $(MAKE) $(KERNEL_MAKE_FLAGS) -C $(KERNEL_SRC) O=$(PRODUCT_OUT)/dtbo ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) $(KERNEL_CLANG_TRIPLE) $(KERNEL_CC) dtbo.img
$(AVBTOOL) add_hash_footer \
--image $@ \
--partition_size $(BOARD_DTBOIMG_PARTITION_SIZE) \
--partition_name dtbo $(INTERNAL_AVB_DTBO_SIGNING_ARGS) \
$(BOARD_AVB_DTBO_ADD_HASH_FOOTER_ARGS)
endif # FULL_KERNEL_BUILD
## Install it
ifeq ($(NEEDS_KERNEL_COPY),true)
file := $(INSTALLED_KERNEL_TARGET)
ALL_PREBUILT += $(file)
$(file) : $(KERNEL_BIN) | $(ACP)
$(transform-prebuilt-to-target)
ALL_PREBUILT += $(INSTALLED_KERNEL_TARGET)
endif
ifeq ($(TARGET_NEEDS_DTBOIMAGE),true)
file := $(INSTALLED_DTBOIMAGE_TARGET)
ALL_PREBUILT += $(file)
$(file) : $(TARGET_PREBUILT_DTBO) | $(ACP)
$(transform-prebuilt-to-target)
ALL_PREBUILT += $(INSTALLED_DTBOIMAGE_TARGET)
endif
.PHONY: kernel
kernel: $(INSTALLED_KERNEL_TARGET)
.PHONY: dtbo
dtbo: $(INSTALLED_DTBOIMAGE_TARGET)
endif # TARGET_NO_KERNEL