Commit | Line | Data |
---|---|---|
d2d91247 YK |
1 | #Android makefile to build kernel as a part of Android Build |
2 | ||
3 | ifeq ($(KERNEL_DEFCONFIG),) | |
4 | $(error KERNEL_DEFCONFIG must be set as environment variable) | |
5 | endif | |
6 | ||
7 | ifeq ($(INSTALLED_KERNEL_TARGET),) | |
cd6d3d7e | 8 | KERNEL_OBJECTS := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ |
d2d91247 | 9 | INSTALLED_KERNEL_TARGET := $(PRODUCT_OUT)/kernel |
5e65f8b9 | 10 | INSTALLED_DTBOIMAGE_TARGET := $(PRODUCT_OUT)/dtbo.img |
48b1217f | 11 | BOARD_PREBUILT_DTBOIMAGE := $(PRODUCT_OUT)/prebuilt_dtbo.img |
d2d91247 | 12 | INSTALLED_DTB_TARGET := $(PRODUCT_OUT)/dtb.img |
215c2e67 YK |
13 | BOARD_MKBOOTIMG_ARGS += \ |
14 | --second $(INSTALLED_DTB_TARGET) \ | |
15 | --second_offset 0 | |
d2d91247 YK |
16 | endif |
17 | ||
18 | TARGET_KERNEL_ARCH := $(strip $(TARGET_KERNEL_ARCH)) | |
19 | ifeq ($(TARGET_KERNEL_ARCH),) | |
20 | KERNEL_ARCH := arm64 | |
21 | else | |
22 | KERNEL_ARCH := $(TARGET_KERNEL_ARCH) | |
23 | endif | |
24 | ||
c4b81616 | 25 | TARGET_KERNEL_MAKE_ENV := $(strip $(TARGET_KERNEL_MAKE_ENV)) |
26 | ifeq ($(TARGET_KERNEL_MAKE_ENV),) | |
27 | KERNEL_MAKE_ENV := | |
28 | else | |
29 | KERNEL_MAKE_ENV := $(TARGET_KERNEL_MAKE_ENV) | |
30 | endif | |
31 | ||
d2d91247 YK |
32 | ifeq ($(CROSS_COMPILE),) |
33 | KERNEL_CROSS_COMPILE := aarch64-linux-android- | |
34 | else | |
35 | KERNEL_CROSS_COMPILE := $(CROSS_COMPILE) | |
36 | endif | |
37 | ||
b23ef602 | 38 | SOONG_GLOBAL_CONFIG := build/soong/cc/config/global.go |
9a8cdbd8 | 39 | CLANG_VERSION := clang-4691093 |
b23ef602 YK |
40 | CLANG_PATH := prebuilts/clang/host/linux-x86 |
41 | CC :=$(PWD)/$(CLANG_PATH)/$(CLANG_VERSION)/bin/clang | |
42 | ||
f0c3da58 MK |
43 | KERNEL_LTO_ON = True |
44 | ifneq ($(KERNEL_LTO_ON),) | |
45 | LLVM_AR :=$(PWD)/$(CLANG_PATH)/$(CLANG_VERSION)/bin/llvm-ar | |
46 | LLVM_DIS :=$(PWD)/$(CLANG_PATH)/$(CLANG_VERSION)/bin/llvm-dis | |
47 | LTO_LLVM_LIB_BASE = $(PWD)/$(CLANG_PATH)/$(CLANG_VERSION)/lib64/ | |
48 | LLVM_OPTIONS := LLVM_AR=$(LLVM_AR) LLVM_DIS=$(LLVM_DIS) LTO_LLVM_LIB_BASE=$(LTO_LLVM_LIB_BASE) | |
49 | else | |
50 | LLVM_OPTIONS := | |
51 | endif | |
52 | ||
d2d91247 YK |
53 | ifeq ($(CLANG_TRIPLE),) |
54 | CLANG_TRIPLE := aarch64-linux-gnu- | |
55 | else | |
56 | CLANG_TRIPLE := $(CLANG_TRIPLE) | |
57 | endif | |
58 | ||
c4b81616 | 59 | BUILD_ROOT_LOC := ../../ |
bea31bb6 | 60 | KERNEL_OUT := $(TARGET_OUT_INTERMEDIATES)/kernel/$(TARGET_SOC) |
c4b81616 | 61 | KERNEL_OUT := $(KERNEL_OBJECTS) |
d2d91247 YK |
62 | ifeq ($(TARGET_PREBUILT_KERNEL),) |
63 | ||
cd6d3d7e YK |
64 | KERNEL_CONFIG := $(KERNEL_OBJECTS)/.config |
65 | KERNEL_BOOT := $(KERNEL_OBJECTS)/arch/$(KERNEL_ARCH)/boot | |
d2d91247 YK |
66 | KERNEL_BIN := $(KERNEL_BOOT)/Image |
67 | KERNEL_DTB_DIR := $(KERNEL_BOOT)/dts/exynos | |
f573bcc7 | 68 | KERNEL_DTB := $(KERNEL_DTB_DIR)/exynos9610.dtb |
d2d91247 YK |
69 | MKDTIMG := $(HOST_OUT_EXECUTABLES)/mkdtimg |
70 | ||
bea31bb6 | 71 | TARGET_KERNEL_SOURCE := kernel/$(TARGET_SOC) |
cd6d3d7e YK |
72 | KERNEL_DTB_SOURCE_DIR := $(TARGET_KERNEL_SOURCE)/arch/$(KERNEL_ARCH)/boot/dts/exynos |
73 | KERNEL_DTBO_CFG := $(KERNEL_DTB_SOURCE_DIR)/exynos9610_dtboimg.cfg | |
dcaf6363 SK |
74 | KERNEL_MERGE_CONFIG := $(TARGET_KERNEL_SOURCE)/scripts/kconfig/merge_config.sh |
75 | KERNEL_CONFIG_BASE := $(TARGET_KERNEL_SOURCE)/arch/$(KERNEL_ARCH)/configs | |
76 | KERNEL_DEFCONFIG_PATH := $(KERNEL_CONFIG_BASE)/$(KERNEL_DEFCONFIG) | |
77 | ||
2bcc39f7 | 78 | ifeq ($(TARGET_PRODUCT),kane_factory) |
79 | ERD9609_DEFCONFIG := erd9610_defconfig | |
80 | ERD9609_DEFCONFIG_PATH := $(KERNEL_CONFIG_BASE)/$(ERD9609_DEFCONFIG) | |
81 | ROBUSTA2_FACTORY_DEFCONFIG := robusta2_factory_defconfig | |
82 | ROBUSTA2_FACTORY_DEFCONFIG_PATH := $(KERNEL_CONFIG_BASE)/$(ROBUSTA2_FACTORY_DEFCONFIG) | |
83 | ERD9609_ROBUSTA2_FACTORY_DEFCONFIG := erd9610_robusta2_factory_defconfig | |
84 | ERD9609_ROBUSTA2_FACTORY_DEFCONFIG_PATH := $(KERNEL_CONFIG_BASE)/$(ERD9609_ROBUSTA2_FACTORY_DEFCONFIG) | |
85 | endif | |
86 | ||
d2d91247 YK |
87 | ifeq ($(KERNEL_DEFCONFIG),) |
88 | $(error Kernel configuration not defined, cannot build kernel) | |
89 | else | |
90 | ||
dcaf6363 | 91 | ifeq ($(TARGET_BUILD_VARIANT),eng) |
cd6d3d7e | 92 | MAKE_CONFIG_CMD := $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(PWD)/$(KERNEL_OBJECTS) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(KERNEL_DEFCONFIG) |
dcaf6363 SK |
93 | else |
94 | ifeq ($(TARGET_BUILD_VARIANT),userdebug) | |
95 | KERNEL_USER_CFG := $(KERNEL_CONFIG_BASE)/$(TARGET_SOC)_userdebug.cfg | |
96 | else | |
97 | KERNEL_USER_CFG := $(KERNEL_CONFIG_BASE)/$(TARGET_SOC)_user.cfg | |
98 | endif | |
99 | MAKE_CONFIG_CMD := ARCH=$(KERNEL_ARCH) $(KERNEL_MERGE_CONFIG) -m -O $(TARGET_KERNEL_SOURCE) $(KERNEL_DEFCONFIG_PATH) $(KERNEL_USER_CFG); | |
cd6d3d7e YK |
100 | MAKE_CONFIG_CMD += $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(PWD)/$(KERNEL_OBJECTS) ARCH=$(KERNEL_ARCH) KCONFIG_ALLCONFIG=.config alldefconfig; |
101 | MAKE_CONFIG_CMD += $(MAKE) -C $(TARGET_KERNEL_SOURCE) distclean | |
dcaf6363 SK |
102 | endif |
103 | ||
d2d91247 | 104 | ifeq ($(N_KERNEL_BUILD_THREAD),) |
bea31bb6 | 105 | N_KERNEL_BUILD_THREAD := 8 |
d2d91247 YK |
106 | endif |
107 | ||
c4b81616 | 108 | include $(TARGET_KERNEL_SOURCE)/defconfig.mk |
109 | ||
110 | ||
d2d91247 YK |
111 | TARGET_PREBUILT_KERNEL := $(KERNEL_BIN) |
112 | ||
c4b81616 | 113 | # Make the kernel config |
114 | # $1 output dir | |
115 | # $2 kernel config filepath | |
116 | # $3 defconfig | |
117 | # $4 kernel source | |
118 | # $5 kernel make env | |
119 | # $6 kernel architecture | |
120 | # $7 cross compile sub-command | |
121 | # $8 make command | |
122 | define do-kernel-config | |
123 | ( cp $(3) $(2) && $(8) -C $(4) O=$(1) $(5) ARCH=$(6) CROSS_COMPILE=$(7) defoldconfig ) || ( rm -f $(2) && false ) | |
124 | endef | |
125 | ||
126 | ||
127 | $(KERNEL_OUT): | |
128 | mkdir -p $(KERNEL_OUT) | |
d2d91247 YK |
129 | |
130 | .PHONY: kernel | |
131 | kernel: $(KERNEL_BIN) | |
132 | ||
133 | .PHONY: kernel-distclean | |
134 | kernel-distclean: | |
135 | $(MAKE) -C $(TARGET_KERNEL_SOURCE) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) distclean | |
136 | ||
c4b81616 | 137 | $(KERNEL_CONFIG): $(TARGET_DEFCONFIG) |
138 | $(hide) echo "make $(KERNEL_CONFIG)" | |
139 | $(call do-kernel-config,$(BUILD_ROOT_LOC)$(KERNEL_OUT),$@,$(TARGET_DEFCONFIG),$(TARGET_KERNEL_SOURCE),$(KERNEL_MAKE_ENV),$(KERNEL_ARCH),$(KERNEL_CROSS_COMPILE),$(MAKE)) | |
d2d91247 | 140 | |
c4b81616 | 141 | $(KERNEL_BIN): $(KERNEL_OUT) $(KERNEL_CONFIG) |
d2d91247 | 142 | $(hide) echo "Building kernel..." |
f0c3da58 | 143 | $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(PWD)/$(KERNEL_OBJECTS) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) CLANG_TRIPLE=$(CLANG_TRIPLE) CC=$(CC) $(LLVM_OPTIONS) -j$(N_KERNEL_BUILD_THREAD) |
d2d91247 | 144 | |
48b1217f | 145 | $(INSTALLED_KERNEL_TARGET): $(INSTALLED_DTBOIMAGE_TARGET) |
d2d91247 YK |
146 | cp $(KERNEL_BIN) $(INSTALLED_KERNEL_TARGET) |
147 | cp $(KERNEL_DTB) $(INSTALLED_DTB_TARGET) | |
48b1217f TA |
148 | |
149 | $(BOARD_PREBUILT_DTBOIMAGE): $(MKDTIMG) $(KERNEL_DTBO_CFG) $(KERNEL_BIN) | |
5e65f8b9 | 150 | $(hide) echo "Building DTBOIMAGE..." |
cd6d3d7e | 151 | $(MKDTIMG) cfg_create $@ $(KERNEL_DTBO_CFG) -d $(KERNEL_OBJECTS) |
d2d91247 YK |
152 | |
153 | endif #TARGET_PREBUILT_KERNEL | |
154 | endif #KERNEL_DEFCONFIG |