1ifeq ($(TARGET_KERNEL_BUILT_FROM_SOURCE),true) 2 3# Force using bash as a shell, otherwise, on Ubuntu, dash will break some 4# dependency due to its bad handling of echo \1 5MAKE += SHELL=/bin/bash 6 7ifeq ($(KERNEL_CFG_NAME),) 8$(error cannot build kernel, config not specified) 9endif 10 11ifeq ($(TARGET_KERNEL_ARCH),x86_64) 12KERNEL_TOOLCHAIN_ARCH := $(TARGET_KERNEL_ARCH) 13else 14KERNEL_TOOLCHAIN_ARCH := i686 15endif 16KERNEL_EXTRA_FLAGS := ANDROID_TOOLCHAIN_FLAGS="-mno-android -Werror" 17KERNEL_CROSS_COMP := $(notdir $(TARGET_TOOLS_PREFIX)) 18 19KERNEL_CCACHE :=$(firstword $(TARGET_CC)) 20KERNEL_PATH := $(ANDROID_BUILD_TOP)/vendor/intel/support 21ifeq ($(notdir $(KERNEL_CCACHE)),ccache) 22KERNEL_CROSS_COMP := "ccache $(KERNEL_CROSS_COMP)" 23KERNEL_PATH := $(KERNEL_PATH):$(ANDROID_BUILD_TOP)/$(dir $(KERNEL_CCACHE)) 24endif 25 26#remove time_macros from ccache options, it breaks signing process 27KERNEL_CCSLOP := $(filter-out time_macros,$(subst $(comma), ,$(CCACHE_SLOPPINESS))) 28KERNEL_CCSLOP := $(subst $(space),$(comma),$(KERNEL_CCSLOP)) 29 30KERNEL_OUT_DIR := $(PRODUCT_OUT)/linux/kernel 31KERNEL_CONFIG := $(KERNEL_OUT_DIR)/.config 32KERNEL_SAVE_DEFCONFIG := $(KERNEL_OUT_DIR)/defconfig 33KERNEL_BLD_FLAGS := \ 34 ARCH=$(TARGET_KERNEL_ARCH) \ 35 $(KERNEL_EXTRA_FLAGS) 36 37KERNEL_BLD_FLAGS :=$(KERNEL_BLD_FLAGS) \ 38 O=../../$(KERNEL_OUT_DIR) \ 39 40KERNEL_BLD_ENV := CROSS_COMPILE=$(KERNEL_CROSS_COMP) \ 41 PATH=$(KERNEL_PATH):$(PATH) \ 42 CCACHE_SLOPPINESS=$(KERNEL_CCSLOP) 43 44KERNEL_DEFCONFIG ?= $(KERNEL_SRC_DIR)/arch/x86/configs/$(KERNEL_CFG_NAME)_defconfig 45KERNEL_VERSION_FILE := $(KERNEL_OUT_DIR)/include/config/kernel.release 46KERNEL_BZIMAGE := $(PRODUCT_OUT)/kernel 47 48HOST_OPENSSL := $(HOST_OUT_EXECUTABLES)/openssl 49 50$(KERNEL_CONFIG): $(KERNEL_DEFCONFIG) 51 $(hide) echo Regenerating kernel config $(KERNEL_OUT_DIR) 52 $(hide) mkdir -p $(KERNEL_OUT_DIR) 53 $(hide) $(KERNEL_BLD_ENV) $(MAKE) -C $(KERNEL_SRC_DIR) $(KERNEL_BLD_FLAGS) $(notdir $(KERNEL_DEFCONFIG)) 54 55ifeq (,$(filter build_kernel-nodeps,$(MAKECMDGOALS))) 56$(KERNEL_BZIMAGE): $(HOST_OPENSSL) $(MINIGZIP) 57endif 58 59$(KERNEL_BZIMAGE): $(KERNEL_CONFIG) 60 $(hide) $(KERNEL_BLD_ENV) $(MAKE) -C $(KERNEL_SRC_DIR) $(KERNEL_BLD_FLAGS) 61 $(hide) cp -f $(KERNEL_OUT_DIR)/arch/x86/boot/bzImage $@ 62 63clean_kernel: 64 $(hide) $(KERNEL_BLD_ENV) $(MAKE) -C $(KERNEL_SRC_DIR) $(KERNEL_BLD_FLAGS) clean 65 66menuconfig xconfig gconfig: $(KERNEL_CONFIG) 67 $(hide) $(KERNEL_BLD_ENV) $(MAKE) -C $(KERNEL_SRC_DIR) $(KERNEL_BLD_FLAGS) $@ 68 $(hide) $(KERNEL_BLD_ENV) $(MAKE) -C $(KERNEL_SRC_DIR) $(KERNEL_BLD_FLAGS) savedefconfig 69 $(hide) cp -f $(KERNEL_SAVE_DEFCONFIG) $(KERNEL_DEFCONFIG) 70 $(hide) echo =========== 71 $(hide) echo $(KERNEL_DEFCONFIG) has been modified ! 72 $(hide) echo =========== 73 74TAGS_files := TAGS 75tags_files := tags 76gtags_files := GTAGS GPATH GRTAGS GSYMS 77cscope_files := $(addprefix cscope.,files out out.in out.po) 78 79TAGS tags gtags cscope: $(KERNEL_CONFIG) 80 $(hide) $(KERNEL_BLD_ENV) $(MAKE) -C $(KERNEL_SRC_DIR) $(KERNEL_BLD_FLAGS) $@ 81 $(hide) rm -f $(KERNEL_SRC_DIR)/$($@_files) 82 $(hide) cp -fs $(addprefix `pwd`/$(KERNEL_OUT_DIR)/,$($@_files)) $(KERNEL_SRC_DIR)/ 83 84 85define build_kernel_module 86$(error Use of external Kernel modules is not allowed) 87endef 88 89.PHONY: menuconfig xconfig gconfig 90.PHONY: $(KERNEL_BZIMAGE) 91.PHONY: build_kernel build_kernel-nodeps 92 93$(PRODUCT_OUT)/boot.img: build_kernel 94 95endif #TARGET_KERNEL_BUILT_FROM_SOURCE 96