#Android makefile to build kernel as a part of Android Build ifeq ($(KERNEL_DEFCONFIG),) $(error KERNEL_DEFCONFIG must be set as environment variable) endif ifeq ($(INSTALLED_KERNEL_TARGET),) KERNEL_OBJECTS := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ INSTALLED_KERNEL_TARGET := $(PRODUCT_OUT)/kernel INSTALLED_DTBOIMAGE_TARGET := $(PRODUCT_OUT)/dtbo.img BOARD_PREBUILT_DTBOIMAGE := $(PRODUCT_OUT)/prebuilt_dtbo.img INSTALLED_DTB_TARGET := $(PRODUCT_OUT)/dtb.img BOARD_MKBOOTIMG_ARGS += \ --second $(INSTALLED_DTB_TARGET) \ --second_offset 0 endif TARGET_KERNEL_ARCH := $(strip $(TARGET_KERNEL_ARCH)) ifeq ($(TARGET_KERNEL_ARCH),) KERNEL_ARCH := arm64 else KERNEL_ARCH := $(TARGET_KERNEL_ARCH) endif TARGET_KERNEL_MAKE_ENV := $(strip $(TARGET_KERNEL_MAKE_ENV)) ifeq ($(TARGET_KERNEL_MAKE_ENV),) KERNEL_MAKE_ENV := else KERNEL_MAKE_ENV := $(TARGET_KERNEL_MAKE_ENV) endif ifeq ($(CROSS_COMPILE),) KERNEL_CROSS_COMPILE := aarch64-linux-android- else KERNEL_CROSS_COMPILE := $(CROSS_COMPILE) endif SOONG_GLOBAL_CONFIG := build/soong/cc/config/global.go CLANG_VERSION := clang-4691093 CLANG_PATH := prebuilts/clang/host/linux-x86 CC :=$(PWD)/$(CLANG_PATH)/$(CLANG_VERSION)/bin/clang KERNEL_LTO_ON = True ifneq ($(KERNEL_LTO_ON),) LLVM_AR :=$(PWD)/$(CLANG_PATH)/$(CLANG_VERSION)/bin/llvm-ar LLVM_DIS :=$(PWD)/$(CLANG_PATH)/$(CLANG_VERSION)/bin/llvm-dis LTO_LLVM_LIB_BASE = $(PWD)/$(CLANG_PATH)/$(CLANG_VERSION)/lib64/ LLVM_OPTIONS := LLVM_AR=$(LLVM_AR) LLVM_DIS=$(LLVM_DIS) LTO_LLVM_LIB_BASE=$(LTO_LLVM_LIB_BASE) else LLVM_OPTIONS := endif ifeq ($(CLANG_TRIPLE),) CLANG_TRIPLE := aarch64-linux-gnu- else CLANG_TRIPLE := $(CLANG_TRIPLE) endif BUILD_ROOT_LOC := ../../ KERNEL_OUT := $(TARGET_OUT_INTERMEDIATES)/kernel/$(TARGET_SOC) KERNEL_OUT := $(KERNEL_OBJECTS) ifeq ($(TARGET_PREBUILT_KERNEL),) KERNEL_CONFIG := $(KERNEL_OBJECTS)/.config KERNEL_BOOT := $(KERNEL_OBJECTS)/arch/$(KERNEL_ARCH)/boot KERNEL_BIN := $(KERNEL_BOOT)/Image KERNEL_DTB_DIR := $(KERNEL_BOOT)/dts/exynos KERNEL_DTB := $(KERNEL_DTB_DIR)/exynos9610.dtb MKDTIMG := $(HOST_OUT_EXECUTABLES)/mkdtimg TARGET_KERNEL_SOURCE := kernel/$(TARGET_SOC) KERNEL_DTB_SOURCE_DIR := $(TARGET_KERNEL_SOURCE)/arch/$(KERNEL_ARCH)/boot/dts/exynos KERNEL_DTBO_CFG := $(KERNEL_DTB_SOURCE_DIR)/exynos9610_dtboimg.cfg KERNEL_MERGE_CONFIG := $(TARGET_KERNEL_SOURCE)/scripts/kconfig/merge_config.sh KERNEL_CONFIG_BASE := $(TARGET_KERNEL_SOURCE)/arch/$(KERNEL_ARCH)/configs KERNEL_DEFCONFIG_PATH := $(KERNEL_CONFIG_BASE)/$(KERNEL_DEFCONFIG) ifeq ($(TARGET_PRODUCT),kane_factory) ERD9609_DEFCONFIG := erd9610_defconfig ERD9609_DEFCONFIG_PATH := $(KERNEL_CONFIG_BASE)/$(ERD9609_DEFCONFIG) ROBUSTA2_FACTORY_DEFCONFIG := robusta2_factory_defconfig ROBUSTA2_FACTORY_DEFCONFIG_PATH := $(KERNEL_CONFIG_BASE)/$(ROBUSTA2_FACTORY_DEFCONFIG) ERD9609_ROBUSTA2_FACTORY_DEFCONFIG := erd9610_robusta2_factory_defconfig ERD9609_ROBUSTA2_FACTORY_DEFCONFIG_PATH := $(KERNEL_CONFIG_BASE)/$(ERD9609_ROBUSTA2_FACTORY_DEFCONFIG) endif ifeq ($(KERNEL_DEFCONFIG),) $(error Kernel configuration not defined, cannot build kernel) else ifeq ($(TARGET_BUILD_VARIANT),eng) MAKE_CONFIG_CMD := $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(PWD)/$(KERNEL_OBJECTS) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(KERNEL_DEFCONFIG) else ifeq ($(TARGET_BUILD_VARIANT),userdebug) KERNEL_USER_CFG := $(KERNEL_CONFIG_BASE)/$(TARGET_SOC)_userdebug.cfg else KERNEL_USER_CFG := $(KERNEL_CONFIG_BASE)/$(TARGET_SOC)_user.cfg endif MAKE_CONFIG_CMD := ARCH=$(KERNEL_ARCH) $(KERNEL_MERGE_CONFIG) -m -O $(TARGET_KERNEL_SOURCE) $(KERNEL_DEFCONFIG_PATH) $(KERNEL_USER_CFG); MAKE_CONFIG_CMD += $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(PWD)/$(KERNEL_OBJECTS) ARCH=$(KERNEL_ARCH) KCONFIG_ALLCONFIG=.config alldefconfig; MAKE_CONFIG_CMD += $(MAKE) -C $(TARGET_KERNEL_SOURCE) distclean endif ifeq ($(N_KERNEL_BUILD_THREAD),) N_KERNEL_BUILD_THREAD := 8 endif include $(TARGET_KERNEL_SOURCE)/defconfig.mk TARGET_PREBUILT_KERNEL := $(KERNEL_BIN) # Make the kernel config # $1 output dir # $2 kernel config filepath # $3 defconfig # $4 kernel source # $5 kernel make env # $6 kernel architecture # $7 cross compile sub-command # $8 make command define do-kernel-config ( cp $(3) $(2) && $(8) -C $(4) O=$(1) $(5) ARCH=$(6) CROSS_COMPILE=$(7) defoldconfig ) || ( rm -f $(2) && false ) endef $(KERNEL_OUT): mkdir -p $(KERNEL_OUT) .PHONY: kernel kernel: $(KERNEL_BIN) .PHONY: kernel-distclean kernel-distclean: $(MAKE) -C $(TARGET_KERNEL_SOURCE) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) distclean $(KERNEL_CONFIG): $(TARGET_DEFCONFIG) $(hide) echo "make $(KERNEL_CONFIG)" $(call do-kernel-config,$(BUILD_ROOT_LOC)$(KERNEL_OUT),$@,$(TARGET_DEFCONFIG),$(TARGET_KERNEL_SOURCE),$(KERNEL_MAKE_ENV),$(KERNEL_ARCH),$(KERNEL_CROSS_COMPILE),$(MAKE)) $(KERNEL_BIN): $(KERNEL_OUT) $(KERNEL_CONFIG) $(hide) echo "Building kernel..." $(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) $(INSTALLED_KERNEL_TARGET): $(INSTALLED_DTBOIMAGE_TARGET) cp $(KERNEL_BIN) $(INSTALLED_KERNEL_TARGET) cp $(KERNEL_DTB) $(INSTALLED_DTB_TARGET) $(BOARD_PREBUILT_DTBOIMAGE): $(MKDTIMG) $(KERNEL_DTBO_CFG) $(KERNEL_BIN) $(hide) echo "Building DTBOIMAGE..." $(MKDTIMG) cfg_create $@ $(KERNEL_DTBO_CFG) -d $(KERNEL_OBJECTS) endif #TARGET_PREBUILT_KERNEL endif #KERNEL_DEFCONFIG