blob: 3ab1fd88071e54dd8beb993e96ec5ee3cf54bbb0 [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
165$(TARGET_PREBUILT_INT_KERNEL): $(KERNEL_OUT) $(KERNEL_HEADERS_INSTALL)
166 $(hide) echo "Building kernel..."
167 $(hide) rm -rf $(KERNEL_OUT)/arch/$(KERNEL_ARCH)/boot/dts
168 $(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)
169 $(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
170 $(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
171 $(mv-modules)
172 $(clean-module-folder)
173
174$(KERNEL_HEADERS_INSTALL): $(KERNEL_OUT)
175 $(hide) if [ ! -z "$(KERNEL_HEADER_DEFCONFIG)" ]; then \
176 rm -f $(BUILD_ROOT_LOC)$(KERNEL_CONFIG); \
177 $(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); \
178 $(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;\
179 if [ -d "$(KERNEL_HEADERS_INSTALL)/include/bringup_headers" ]; then \
180 cp -Rf $(KERNEL_HEADERS_INSTALL)/include/bringup_headers/* $(KERNEL_HEADERS_INSTALL)/include/ ;\
181 fi ;\
182 fi
183 $(hide) if [ "$(KERNEL_HEADER_DEFCONFIG)" != "$(KERNEL_DEFCONFIG)" ]; then \
184 echo "Used a different defconfig for header generation"; \
185 rm -f $(BUILD_ROOT_LOC)$(KERNEL_CONFIG); \
186 $(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
187 $(hide) if [ ! -z "$(KERNEL_CONFIG_OVERRIDE)" ]; then \
188 echo "Overriding kernel config with '$(KERNEL_CONFIG_OVERRIDE)'"; \
189 echo $(KERNEL_CONFIG_OVERRIDE) >> $(KERNEL_OUT)/.config; \
190 $(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
191
Prakruthi Deepak Heragu99570ab2019-06-19 11:50:09 -0700192# Creating a dtb.img once the kernel is compiled if TARGET_KERNEL_APPEND_DTB is set to be false
193$(INSTALLED_DTBIMAGE_TARGET): $(TARGET_PREBUILT_INT_KERNEL)
194 cat $(KERNEL_OUT)/arch/$(KERNEL_ARCH)/boot/dts/vendor/qcom/*.dtb > $@
195
Divya Sharma3d288d52018-11-07 10:41:23 -0800196.PHONY: kerneltags
Prasad Sodagudi0489ba22017-10-04 14:44:24 -0700197kerneltags: $(KERNEL_OUT) $(KERNEL_CONFIG)
198 $(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
199
Divya Sharma3d288d52018-11-07 10:41:23 -0800200.PHONY: kernelconfig
Prasad Sodagudi0489ba22017-10-04 14:44:24 -0700201kernelconfig: $(KERNEL_OUT) $(KERNEL_CONFIG)
202 env KCONFIG_NOTIMESTAMP=true \
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) menuconfig
204 env KCONFIG_NOTIMESTAMP=true \
205 $(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
206 cp $(KERNEL_OUT)/defconfig $(TARGET_KERNEL_SOURCE)/arch/$(KERNEL_ARCH)/configs/$(KERNEL_DEFCONFIG)
207
208endif
209endif