blob: 6c7dfa0da6df1dfee42c0da226ae78bdd6326a18 [file] [log] [blame]
Laurent FERTfce69602014-06-20 15:35:19 +02001ifeq ($(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
Olivier Fourdan423fda92014-07-10 12:02:50 +020016KERNEL_EXTRA_FLAGS := ANDROID_TOOLCHAIN_FLAGS="-mno-android -Werror"
Olivier Fourdan87c94042014-07-21 11:26:09 +020017KERNEL_CROSS_COMP := $(notdir $(TARGET_TOOLS_PREFIX))
Laurent FERTfce69602014-06-20 15:35:19 +020018
19KERNEL_CCACHE :=$(firstword $(TARGET_CC))
20KERNEL_PATH := $(ANDROID_BUILD_TOP)/vendor/intel/support
21ifeq ($(notdir $(KERNEL_CCACHE)),ccache)
Olivier Fourdan87c94042014-07-21 11:26:09 +020022KERNEL_CROSS_COMP := "ccache $(KERNEL_CROSS_COMP)"
Laurent FERTfce69602014-06-20 15:35:19 +020023KERNEL_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
Laurent FERTfce69602014-06-20 15:35:19 +020031KERNEL_CONFIG := $(KERNEL_OUT_DIR)/.config
Olivier Fourdan87c94042014-07-21 11:26:09 +020032KERNEL_SAVE_DEFCONFIG := $(KERNEL_OUT_DIR)/defconfig
Laurent FERTfce69602014-06-20 15:35:19 +020033KERNEL_BLD_FLAGS := \
34 ARCH=$(TARGET_KERNEL_ARCH) \
Laurent FERTfce69602014-06-20 15:35:19 +020035 $(KERNEL_EXTRA_FLAGS)
36
Laurent FERTfce69602014-06-20 15:35:19 +020037KERNEL_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)
Laurent FERTfce69602014-06-20 15:35:19 +020043
Laurent FERT0fba3092014-07-16 11:27:12 +020044KERNEL_DEFCONFIG ?= $(KERNEL_SRC_DIR)/arch/x86/configs/$(KERNEL_CFG_NAME)_defconfig
Laurent FERTfce69602014-06-20 15:35:19 +020045KERNEL_VERSION_FILE := $(KERNEL_OUT_DIR)/include/config/kernel.release
Laurent FERTfce69602014-06-20 15:35:19 +020046KERNEL_BZIMAGE := $(PRODUCT_OUT)/kernel
47
48HOST_OPENSSL := $(HOST_OUT_EXECUTABLES)/openssl
49
Olivier Fourdan87c94042014-07-21 11:26:09 +020050$(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))
Laurent FERTfce69602014-06-20 15:35:19 +020054
Laurent FERTfce69602014-06-20 15:35:19 +020055ifeq (,$(filter build_kernel-nodeps,$(MAKECMDGOALS)))
56$(KERNEL_BZIMAGE): $(HOST_OPENSSL) $(MINIGZIP)
57endif
58
59$(KERNEL_BZIMAGE): $(KERNEL_CONFIG)
Olivier Fourdan87c94042014-07-21 11:26:09 +020060 $(hide) $(KERNEL_BLD_ENV) $(MAKE) -C $(KERNEL_SRC_DIR) $(KERNEL_BLD_FLAGS)
61 $(hide) cp -f $(KERNEL_OUT_DIR)/arch/x86/boot/bzImage $@
Laurent FERTfce69602014-06-20 15:35:19 +020062
Laurent FERTfce69602014-06-20 15:35:19 +020063clean_kernel:
Olivier Fourdan87c94042014-07-21 11:26:09 +020064 $(hide) $(KERNEL_BLD_ENV) $(MAKE) -C $(KERNEL_SRC_DIR) $(KERNEL_BLD_FLAGS) clean
Laurent FERTfce69602014-06-20 15:35:19 +020065
Laurent FERTfce69602014-06-20 15:35:19 +020066menuconfig xconfig gconfig: $(KERNEL_CONFIG)
Olivier Fourdan87c94042014-07-21 11:26:09 +020067 $(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 ===========
Laurent FERTfce69602014-06-20 15:35:19 +020073
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)
Olivier Fourdan87c94042014-07-21 11:26:09 +020080 $(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)/
Laurent FERTfce69602014-06-20 15:35:19 +020083
84
Laurent FERTfce69602014-06-20 15:35:19 +020085define build_kernel_module
Olivier Fourdan423fda92014-07-10 12:02:50 +020086$(error Use of external Kernel modules is not allowed)
Laurent FERTfce69602014-06-20 15:35:19 +020087endef
88
89.PHONY: menuconfig xconfig gconfig
Olivier Fourdan00d35d92014-07-11 15:30:33 +020090.PHONY: $(KERNEL_BZIMAGE)
Laurent FERTfce69602014-06-20 15:35:19 +020091.PHONY: build_kernel build_kernel-nodeps
92
93$(PRODUCT_OUT)/boot.img: build_kernel
Laurent FERTfce69602014-06-20 15:35:19 +020094
95endif #TARGET_KERNEL_BUILT_FROM_SOURCE