1 #Android makefile to build kernel as a part of Android Build
3 ifeq ($(KERNEL_DEFCONFIG
),)
4 $(error KERNEL_DEFCONFIG must be set
as environment variable
)
7 ifeq ($(INSTALLED_KERNEL_TARGET
),)
8 KERNEL_OBJECTS
:= $(TARGET_OUT_INTERMEDIATES
)/KERNEL_OBJ
9 INSTALLED_KERNEL_TARGET
:= $(PRODUCT_OUT
)/kernel
10 INSTALLED_DTBOIMAGE_TARGET
:= $(PRODUCT_OUT
)/dtbo.img
11 BOARD_PREBUILT_DTBOIMAGE
:= $(PRODUCT_OUT
)/prebuilt_dtbo.img
12 INSTALLED_DTB_TARGET
:= $(PRODUCT_OUT
)/dtb.img
13 BOARD_MKBOOTIMG_ARGS
+= \
14 --second
$(INSTALLED_DTB_TARGET
) \
18 TARGET_KERNEL_ARCH
:= $(strip $(TARGET_KERNEL_ARCH
))
19 ifeq ($(TARGET_KERNEL_ARCH
),)
22 KERNEL_ARCH
:= $(TARGET_KERNEL_ARCH
)
25 TARGET_KERNEL_MAKE_ENV
:= $(strip $(TARGET_KERNEL_MAKE_ENV
))
26 ifeq ($(TARGET_KERNEL_MAKE_ENV
),)
29 KERNEL_MAKE_ENV
:= $(TARGET_KERNEL_MAKE_ENV
)
32 ifeq ($(CROSS_COMPILE
),)
33 KERNEL_CROSS_COMPILE
:= aarch64-linux-android-
35 KERNEL_CROSS_COMPILE
:= $(CROSS_COMPILE
)
38 SOONG_GLOBAL_CONFIG
:= build
/soong
/cc/config
/global.go
39 CLANG_VERSION
:= $(shell grep
"ClangDefaultVersion" $(SOONG_GLOBAL_CONFIG
) | grep
-o
"clang-[0-9][0-9]*")
40 CLANG_PATH
:= prebuilts
/clang
/host
/linux-x86
41 CC
:=$(PWD
)/$(CLANG_PATH
)/$(CLANG_VERSION
)/bin
/clang
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
)
53 ifeq ($(CLANG_TRIPLE
),)
54 CLANG_TRIPLE
:= aarch64-linux-gnu-
56 CLANG_TRIPLE
:= $(CLANG_TRIPLE
)
59 BUILD_ROOT_LOC
:= ..
/..
/
60 KERNEL_OUT
:= $(TARGET_OUT_INTERMEDIATES
)/kernel
/$(TARGET_KERNEL
)
61 KERNEL_OUT
:= $(KERNEL_OBJECTS
)
62 ifeq ($(TARGET_PREBUILT_KERNEL
),)
64 KERNEL_CONFIG
:= $(KERNEL_OBJECTS
)/.config
65 KERNEL_BOOT
:= $(KERNEL_OBJECTS
)/arch
/$(KERNEL_ARCH
)/boot
66 KERNEL_BIN
:= $(KERNEL_BOOT
)/Image
67 KERNEL_DTB_DIR
:= $(KERNEL_BOOT
)/dts
/exynos
68 KERNEL_DTB
:= $(KERNEL_DTB_DIR
)/exynos9610.dtb
69 MKDTIMG
:= $(HOST_OUT_EXECUTABLES
)/mkdtimg
71 TARGET_KERNEL_SOURCE
:= kernel
/$(TARGET_KERNEL
)
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
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
)
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
)
87 ifeq ($(KERNEL_DEFCONFIG
),)
88 $(error Kernel configuration not defined
, cannot build kernel
)
91 ifeq ($(TARGET_BUILD_VARIANT
),eng
)
92 MAKE_CONFIG_CMD
:= $(MAKE
) -C
$(TARGET_KERNEL_SOURCE
) O
=$(PWD
)/$(KERNEL_OBJECTS
) ARCH
=$(KERNEL_ARCH
) CROSS_COMPILE
=$(KERNEL_CROSS_COMPILE
) $(KERNEL_DEFCONFIG
)
94 ifeq ($(TARGET_BUILD_VARIANT
),userdebug
)
95 KERNEL_USER_CFG
:= $(KERNEL_CONFIG_BASE
)/$(TARGET_SOC
)_userdebug.cfg
97 KERNEL_USER_CFG
:= $(KERNEL_CONFIG_BASE
)/$(TARGET_SOC
)_user.cfg
99 MAKE_CONFIG_CMD
:= ARCH
=$(KERNEL_ARCH
) $(KERNEL_MERGE_CONFIG
) -m
-O
$(TARGET_KERNEL_SOURCE
) $(KERNEL_DEFCONFIG_PATH
) $(KERNEL_USER_CFG
);
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
104 ifeq ($(N_KERNEL_BUILD_THREAD
),)
105 N_KERNEL_BUILD_THREAD
:= 1
108 include $(TARGET_KERNEL_SOURCE
)/defconfig.mk
111 TARGET_PREBUILT_KERNEL
:= $(KERNEL_BIN
)
113 # Make the kernel config
115 # $2 kernel config filepath
119 # $6 kernel architecture
120 # $7 cross compile sub-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
)
128 mkdir
-p
$(KERNEL_OUT
)
131 kernel
: $(KERNEL_BIN
)
133 .PHONY
: kernel-distclean
135 $(MAKE
) -C
$(TARGET_KERNEL_SOURCE
) ARCH
=$(KERNEL_ARCH
) CROSS_COMPILE
=$(KERNEL_CROSS_COMPILE
) distclean
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
))
141 $(KERNEL_BIN
): $(KERNEL_OUT
) $(KERNEL_CONFIG
)
142 $(hide
) echo
"Building kernel..."
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
)
145 $(INSTALLED_KERNEL_TARGET
): $(INSTALLED_DTBOIMAGE_TARGET
)
146 cp
$(KERNEL_BIN
) $(INSTALLED_KERNEL_TARGET
)
147 cp
$(KERNEL_DTB
) $(INSTALLED_DTB_TARGET
)
149 $(BOARD_PREBUILT_DTBOIMAGE
): $(MKDTIMG
) $(KERNEL_DTBO_CFG
) $(KERNEL_BIN
)
150 $(hide
) echo
"Building DTBOIMAGE..."
151 $(MKDTIMG
) cfg_create
$@
$(KERNEL_DTBO_CFG
) -d
$(KERNEL_OBJECTS
)
153 endif #TARGET_PREBUILT_KERNEL
154 endif #KERNEL_DEFCONFIG