blob: f404b5abe9c02933a0d9322703d4e35f36560929 [file] [log] [blame]
Prasad Sodagudi0489ba22017-10-04 14:44:24 -07001#Android makefile to build kernel as a part of Android Build
2PERL = perl
3
4KERNEL_TARGET := $(strip $(INSTALLED_KERNEL_TARGET))
5ifeq ($(KERNEL_TARGET),)
6INSTALLED_KERNEL_TARGET := $(PRODUCT_OUT)/kernel
7endif
8
Prakruthi Deepak Heragu99570ab2019-06-19 11:50:09 -07009ifneq ($(TARGET_KERNEL_APPEND_DTB), true)
10$(info Using DTB Image)
11INSTALLED_DTBIMAGE_TARGET := $(PRODUCT_OUT)/dtb.img
12endif
13
Prasad Sodagudi0489ba22017-10-04 14:44:24 -070014TARGET_KERNEL_MAKE_ENV := $(strip $(TARGET_KERNEL_MAKE_ENV))
15ifeq ($(TARGET_KERNEL_MAKE_ENV),)
16KERNEL_MAKE_ENV :=
17else
18KERNEL_MAKE_ENV := $(TARGET_KERNEL_MAKE_ENV)
19endif
20
21TARGET_KERNEL_ARCH := $(strip $(TARGET_KERNEL_ARCH))
22ifeq ($(TARGET_KERNEL_ARCH),)
23KERNEL_ARCH := arm
24else
25KERNEL_ARCH := $(TARGET_KERNEL_ARCH)
26endif
27
28TARGET_KERNEL_HEADER_ARCH := $(strip $(TARGET_KERNEL_HEADER_ARCH))
29ifeq ($(TARGET_KERNEL_HEADER_ARCH),)
30KERNEL_HEADER_ARCH := $(KERNEL_ARCH)
31else
32$(warning Forcing kernel header generation only for '$(TARGET_KERNEL_HEADER_ARCH)')
33KERNEL_HEADER_ARCH := $(TARGET_KERNEL_HEADER_ARCH)
34endif
35
36KERNEL_HEADER_DEFCONFIG := $(strip $(KERNEL_HEADER_DEFCONFIG))
37ifeq ($(KERNEL_HEADER_DEFCONFIG),)
38KERNEL_HEADER_DEFCONFIG := $(KERNEL_DEFCONFIG)
39endif
40
41# Force 32-bit binder IPC for 64bit kernel with 32bit userspace
42ifeq ($(KERNEL_ARCH),arm64)
43ifeq ($(TARGET_ARCH),arm)
44KERNEL_CONFIG_OVERRIDE := CONFIG_ANDROID_BINDER_IPC_32BIT=y
45endif
46endif
47
48TARGET_KERNEL_CROSS_COMPILE_PREFIX := $(strip $(TARGET_KERNEL_CROSS_COMPILE_PREFIX))
49ifeq ($(TARGET_KERNEL_CROSS_COMPILE_PREFIX),)
50KERNEL_CROSS_COMPILE := arm-eabi-
51else
Prasad Sodagudie323c042018-11-19 11:40:38 -080052KERNEL_CROSS_COMPILE := $(shell pwd)/$(TARGET_TOOLS_PREFIX)
Prasad Sodagudi0489ba22017-10-04 14:44:24 -070053endif
54
Raghavendra Rao Ananta90461c52018-04-16 19:14:44 -070055ifeq ($(KERNEL_LLVM_SUPPORT), true)
56 ifeq ($(KERNEL_SD_LLVM_SUPPORT), true) #Using sd-llvm compiler
Raghavendra Rao Ananta14958a92018-04-17 16:50:06 -070057 ifeq ($(shell echo $(SDCLANG_PATH) | head -c 1),/)
58 KERNEL_LLVM_BIN := $(SDCLANG_PATH)/clang
Raghavendra Rao Ananta90461c52018-04-16 19:14:44 -070059 else
Raghavendra Rao Ananta14958a92018-04-17 16:50:06 -070060 KERNEL_LLVM_BIN := $(shell pwd)/$(SDCLANG_PATH)/clang
Raghavendra Rao Ananta90461c52018-04-16 19:14:44 -070061 endif
62 $(warning "Using sdllvm" $(KERNEL_LLVM_BIN))
63 else
64 KERNEL_LLVM_BIN := $(shell pwd)/$(CLANG) #Using aosp-llvm compiler
65 $(warning "Using aosp-llvm" $(KERNEL_LLVM_BIN))
66 endif
67endif
68
Prasad Sodagudi0489ba22017-10-04 14:44:24 -070069ifeq ($(TARGET_PREBUILT_KERNEL),)
70
71KERNEL_GCC_NOANDROID_CHK := $(shell (echo "int main() {return 0;}" | $(KERNEL_CROSS_COMPILE)gcc -E -mno-android - > /dev/null 2>&1 ; echo $$?))
72
73real_cc :=
74ifeq ($(KERNEL_LLVM_SUPPORT),true)
75real_cc := REAL_CC=$(KERNEL_LLVM_BIN) CLANG_TRIPLE=aarch64-linux-gnu-
76else
77ifeq ($(strip $(KERNEL_GCC_NOANDROID_CHK)),0)
78KERNEL_CFLAGS := KCFLAGS=-mno-android
79endif
80endif
81
82mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
83current_dir := $(notdir $(patsubst %/,%,$(dir $(mkfile_path))))
84TARGET_KERNEL := msm-$(TARGET_KERNEL_VERSION)
85ifeq ($(TARGET_KERNEL),$(current_dir))
86 # New style, kernel/msm-version
87 BUILD_ROOT_LOC := ../../
88 TARGET_KERNEL_SOURCE := kernel/$(TARGET_KERNEL)
89 KERNEL_OUT := $(TARGET_OUT_INTERMEDIATES)/kernel/$(TARGET_KERNEL)
90 KERNEL_SYMLINK := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ
91 KERNEL_USR := $(KERNEL_SYMLINK)/usr
92else
93 # Legacy style, kernel source directly under kernel
94 KERNEL_LEGACY_DIR := true
95 BUILD_ROOT_LOC := ../
96 TARGET_KERNEL_SOURCE := kernel
97 KERNEL_OUT := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ
98endif
99
100KERNEL_CONFIG := $(KERNEL_OUT)/.config
101
102ifeq ($(KERNEL_DEFCONFIG)$(wildcard $(KERNEL_CONFIG)),)
103$(error Kernel configuration not defined, cannot build kernel)
104else
105
Bruce Levye7faf8d42019-01-14 18:23:00 -0800106TARGET_USES_UNCOMPRESSED_KERNEL := $(shell grep "CONFIG_BUILD_ARM64_UNCOMPRESSED_KERNEL=y" $(TARGET_KERNEL_SOURCE)/arch/arm64/configs/$(KERNEL_DEFCONFIG))
107ifeq ($(TARGET_USES_UNCOMPRESSED_KERNEL),)
108 ifeq ($(KERNEL_ARCH),arm64)
109 TARGET_PREBUILT_INT_KERNEL := $(KERNEL_OUT)/arch/$(KERNEL_ARCH)/boot/Image.gz
110 else
111 TARGET_PREBUILT_INT_KERNEL := $(KERNEL_OUT)/arch/$(KERNEL_ARCH)/boot/zImage
112 endif
Prasad Sodagudi0489ba22017-10-04 14:44:24 -0700113else
Bruce Levye7faf8d42019-01-14 18:23:00 -0800114 $(info Using uncompressed kernel)
115 TARGET_PREBUILT_INT_KERNEL := $(KERNEL_OUT)/arch/$(KERNEL_ARCH)/boot/Image
Prasad Sodagudi0489ba22017-10-04 14:44:24 -0700116endif
117
118ifeq ($(TARGET_KERNEL_APPEND_DTB), true)
119$(info Using appended DTB)
120TARGET_PREBUILT_INT_KERNEL := $(TARGET_PREBUILT_INT_KERNEL)-dtb
121endif
122
123KERNEL_HEADERS_INSTALL := $(KERNEL_OUT)/usr
124KERNEL_MODULES_INSTALL ?= system
125KERNEL_MODULES_OUT ?= $(PRODUCT_OUT)/$(KERNEL_MODULES_INSTALL)/lib/modules
126
127TARGET_PREBUILT_KERNEL := $(TARGET_PREBUILT_INT_KERNEL)
128
David Ngcc722742019-04-04 16:53:42 -0700129BOARD_VENDOR_KERNEL_MODULES += $(wildcard $(KERNEL_MODULES_OUT)/*.ko)
Raghavendra Rao Anantaf9bb0b72018-07-25 20:06:19 -0700130
Prasad Sodagudi0489ba22017-10-04 14:44:24 -0700131define mv-modules
132mdpath=`find $(KERNEL_MODULES_OUT) -type f -name modules.dep`;\
133if [ "$$mdpath" != "" ];then\
134mpath=`dirname $$mdpath`;\
135ko=`find $$mpath/kernel -type f -name *.ko`;\
136for i in $$ko; do mv $$i $(KERNEL_MODULES_OUT)/; done;\
137fi
138endef
139
140define clean-module-folder
141mdpath=`find $(KERNEL_MODULES_OUT) -type f -name modules.dep`;\
142if [ "$$mdpath" != "" ];then\
143mpath=`dirname $$mdpath`; rm -rf $$mpath;\
144fi
145endef
146
147ifneq ($(KERNEL_LEGACY_DIR),true)
148$(KERNEL_USR): $(KERNEL_HEADERS_INSTALL)
149 rm -rf $(KERNEL_SYMLINK)
150 ln -s kernel/$(TARGET_KERNEL) $(KERNEL_SYMLINK)
151
152$(TARGET_PREBUILT_INT_KERNEL): $(KERNEL_USR)
153endif
154
155$(KERNEL_OUT):
156 mkdir -p $(KERNEL_OUT)
157
158$(KERNEL_CONFIG): $(KERNEL_OUT)
159 $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) $(KERNEL_DEFCONFIG)
160 $(hide) if [ ! -z "$(KERNEL_CONFIG_OVERRIDE)" ]; then \
161 echo "Overriding kernel config with '$(KERNEL_CONFIG_OVERRIDE)'"; \
162 echo $(KERNEL_CONFIG_OVERRIDE) >> $(KERNEL_OUT)/.config; \
163 $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) oldconfig; fi
164
Tengfei Fan652b8642019-07-17 09:17:53 +0800165ifeq ($(TARGET_KERNEL_APPEND_DTB), true)
166TARGET_PREBUILT_INT_KERNEL_IMAGE := $(KERNEL_OUT)/arch/$(KERNEL_ARCH)/boot/Image
167$(TARGET_PREBUILT_INT_KERNEL_IMAGE): $(KERNEL_USR)
168$(TARGET_PREBUILT_INT_KERNEL_IMAGE): $(KERNEL_OUT) $(KERNEL_HEADERS_INSTALL)
169 $(hide) echo "Building kernel modules..."
170 $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) $(KERNEL_CFLAGS) Image
171 $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) $(KERNEL_CFLAGS) modules
172 $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) INSTALL_MOD_PATH=$(BUILD_ROOT_LOC)../$(KERNEL_MODULES_INSTALL) INSTALL_MOD_STRIP=1 $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) modules_install
173 $(mv-modules)
174 $(clean-module-folder)
175
176$(TARGET_PREBUILT_INT_KERNEL): $(TARGET_PREBUILT_INT_KERNEL_IMAGE)
Prasad Sodagudi0489ba22017-10-04 14:44:24 -0700177 $(hide) echo "Building kernel..."
178 $(hide) rm -rf $(KERNEL_OUT)/arch/$(KERNEL_ARCH)/boot/dts
179 $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) $(KERNEL_CFLAGS)
Tengfei Fan652b8642019-07-17 09:17:53 +0800180else
181TARGET_PREBUILT_INT_KERNEL_IMAGE := $(TARGET_PREBUILT_INT_KERNEL)
182$(TARGET_PREBUILT_INT_KERNEL): $(KERNEL_OUT) $(KERNEL_HEADERS_INSTALL)
183 $(hide) echo "Building kernel..."
184 $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) $(KERNEL_CFLAGS)
Prasad Sodagudi0489ba22017-10-04 14:44:24 -0700185 $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) $(KERNEL_CFLAGS) modules
186 $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) INSTALL_MOD_PATH=$(BUILD_ROOT_LOC)../$(KERNEL_MODULES_INSTALL) INSTALL_MOD_STRIP=1 $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) modules_install
187 $(mv-modules)
188 $(clean-module-folder)
Tengfei Fan652b8642019-07-17 09:17:53 +0800189endif
Prasad Sodagudi0489ba22017-10-04 14:44:24 -0700190
191$(KERNEL_HEADERS_INSTALL): $(KERNEL_OUT)
192 $(hide) if [ ! -z "$(KERNEL_HEADER_DEFCONFIG)" ]; then \
193 rm -f $(BUILD_ROOT_LOC)$(KERNEL_CONFIG); \
194 $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_HEADER_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) $(KERNEL_HEADER_DEFCONFIG); \
195 $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_HEADER_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) headers_install;\
196 if [ -d "$(KERNEL_HEADERS_INSTALL)/include/bringup_headers" ]; then \
197 cp -Rf $(KERNEL_HEADERS_INSTALL)/include/bringup_headers/* $(KERNEL_HEADERS_INSTALL)/include/ ;\
198 fi ;\
199 fi
200 $(hide) if [ "$(KERNEL_HEADER_DEFCONFIG)" != "$(KERNEL_DEFCONFIG)" ]; then \
201 echo "Used a different defconfig for header generation"; \
202 rm -f $(BUILD_ROOT_LOC)$(KERNEL_CONFIG); \
203 $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) $(KERNEL_DEFCONFIG); fi
204 $(hide) if [ ! -z "$(KERNEL_CONFIG_OVERRIDE)" ]; then \
205 echo "Overriding kernel config with '$(KERNEL_CONFIG_OVERRIDE)'"; \
206 echo $(KERNEL_CONFIG_OVERRIDE) >> $(KERNEL_OUT)/.config; \
207 $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) oldconfig; fi
208
Prakruthi Deepak Heragu99570ab2019-06-19 11:50:09 -0700209# Creating a dtb.img once the kernel is compiled if TARGET_KERNEL_APPEND_DTB is set to be false
210$(INSTALLED_DTBIMAGE_TARGET): $(TARGET_PREBUILT_INT_KERNEL)
211 cat $(KERNEL_OUT)/arch/$(KERNEL_ARCH)/boot/dts/vendor/qcom/*.dtb > $@
212
Divya Sharma3d288d52018-11-07 10:41:23 -0800213.PHONY: kerneltags
Prasad Sodagudi0489ba22017-10-04 14:44:24 -0700214kerneltags: $(KERNEL_OUT) $(KERNEL_CONFIG)
215 $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) tags
216
Divya Sharma3d288d52018-11-07 10:41:23 -0800217.PHONY: kernelconfig
Prasad Sodagudi0489ba22017-10-04 14:44:24 -0700218kernelconfig: $(KERNEL_OUT) $(KERNEL_CONFIG)
219 env KCONFIG_NOTIMESTAMP=true \
220 $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) menuconfig
221 env KCONFIG_NOTIMESTAMP=true \
222 $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) savedefconfig
223 cp $(KERNEL_OUT)/defconfig $(TARGET_KERNEL_SOURCE)/arch/$(KERNEL_ARCH)/configs/$(KERNEL_DEFCONFIG)
224
225endif
226endif