You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

274 lines
11 KiB

# Build env
CHIP_REVISION_UPPER := $(shell echo $(CHIP_REVISION) | tr a-z A-Z)
CLANG_PATH := $(PWD)/prebuilts/clang/host/linux-x86/clang-r416183b1/bin
ifeq ($(strip $(PLATFORM_VERSION)), 10)
CLANG_PATH := $(PWD)/prebuilts/clang/host/linux-x86/clang-r346389c/bin
endif
ifeq ($(strip $(PLATFORM_VERSION)), 12)
ifeq ($(strip $(LINUX_VERSION)),linux-4.14.y)
CLANG_PATH := $(PWD)/prebuilts/clang/host/linux-x86/clang-r383902/bin
endif
endif
ANDROID_CROSS_64_PATH := $(PWD)/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin
LINUX_CROSS_64_PATH := $(PWD)/vendor/tools/host/huanglong/toolchains/aarch64-v100-linux/bin
LINUX_CROSS_32_PATH := $(PWD)/vendor/tools/host/huanglong/toolchains/arm-v100-linux/bin
SYS_KERNEL_TOOLS_PATH := /usr/local/bin:/usr/bin:/bin
KERNEL_TOOLS_PATH := $(CLANG_PATH):$(ANDROID_CROSS_64_PATH):$(LINUX_CROSS_32_PATH):$(LINUX_CROSS_64_PATH):$(SYS_KERNEL_TOOLS_PATH)
# image output path
IMAGES_OUT := $(PRODUCT_OUT)/images
# device/default adapter
KERNEL_OBJ ?= $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ_$(CHIP_REVISION_UPPER)
#pc dtb tool dir
PCDTB_TOOL_DIR := $(PWD)/vendor/tools/host/huanglong/dtb_tool
# Config
ANDROID_KERNEL_CONFIG := $(PRODUCT_TYPE)/$(CHIP_VERSION)/$(OS_PLATFORM_VERSION)/$(PRODUCT_TYPE)_$(CHIP_VERSION)$(PRODUCT_OPTIONAL)_defconfig
KERNEL_ARCH_ARM64_CONFIGS := $(PWD)/$(TARGET_KERNEL_DIR)/arch/$(TARGET_ARCH)/configs
KERNEL_DEBUG_CONFIGS := $(KERNEL_ARCH_ARM64_CONFIGS)/$(PRODUCT_TYPE)_$(CHIP_VERSION)_$(CHIP_REVISION)_vendor_debug_defconfig
ifneq ($(wildcard $(KERNEL_DEBUG_CONFIGS)),)
$(shell rm -f $(KERNEL_DEBUG_CONFIGS))
endif
KERNEL_TMP_CONFIGS := $(PRODUCT_TYPE)_$(CHIP_VERSION)_$(CHIP_REVISION)_vendor_tmp_defconfig
# Config ammend
KERNEL_AMEND_CONFIGS += $(KERNEL_ARCH_ARM64_CONFIGS)/$(PRODUCT_TYPE)/$(CHIP_VERSION)/chip_revision/$(CHIP_REVISION)_defconfig
ifeq ($(TARGET_BUILD_VARIANT), eng)
KERNEL_AMEND_CONFIGS += $(KERNEL_ARCH_ARM64_CONFIGS)/plugin/debug_defconfig
ifeq ($(strip $(PRODUCT_SUPPORT_KASAN)), true)
KERNEL_AMEND_CONFIGS += $(KERNEL_ARCH_ARM64_CONFIGS)/plugin/kasan_defconfig
endif
ifeq ($(strip $(PRODUCT_SUPPORT_UBSAN)), true)
KERNEL_AMEND_CONFIGS += $(KERNEL_ARCH_ARM64_CONFIGS)/plugin/ubsan_defconfig
endif
endif # ifeq ($(TARGET_BUILD_VARIANT), eng)
ifeq ($(strip $(HUANGLONG_TEE)), true)
KERNEL_AMEND_CONFIGS += $(KERNEL_ARCH_ARM64_CONFIGS)/plugin/tee_defconfig
endif
KERNEL_AMEND_CONFIGS += $(DRIVER_DEFCONFIG_FILE) $(CUSTOM_DEFCONFIG_FILE)
# DTBO Env
ifneq ($(findstring $(CHIP_VERSION), reserved19 hi3751v811),)
DTB_CHIP_DIR ?= arch/$(TARGET_ARCH)/boot/dts/huanglong/wulin/$(CHIP_VERSION)_$(CHIP_REVISION)
else
DTB_CHIP_DIR ?= arch/$(TARGET_ARCH)/boot/dts/huanglong/wulin/$(CHIP_VERSION)
endif
DTB_BASE_DIR ?= $(DTB_CHIP_DIR)/base/$(CHIP_VERSION)
DTB_OUT_DIR := $(KERNEL_OBJ)/$(DTB_CHIP_DIR)/out
# DTBO config
OVERLAY_DTB_MK_FILE ?= $(TARGET_KERNEL_DIR)/$(DTB_CHIP_DIR)/dtb_config.mk
-include $(OVERLAY_DTB_MK_FILE)
# dtbo base dtb
DTB_FILE_NAME := $(CHIP_VERSION)
ifeq ($(strip $(BOARD_AVB_ENABLE)), true)
DTB_FILE_NAME := $(DTB_FILE_NAME)_avb
endif
ifeq ($(strip $(AB_PARTITION_SUPPORT)), true)
DTB_FILE_NAME := $(DTB_FILE_NAME)_ab
endif
ifeq ($(strip $(PRODUCT_USE_DYNAMIC_PARTITIONS)), true)
DTB_FILE_NAME := $(DTB_FILE_NAME)_dp
endif
ifeq ($(findstring $(CHIP_VERSION), reserved19 hi3751v811),)
ifneq ($(findstring $(CHIP_REVISION), c d m),)
DTB_FILE_NAME := $(DTB_FILE_NAME)_cs
endif
endif
DTB_FILE_NAME := $(DTB_FILE_NAME).dtb
TARGET_DTB_FILE_NAME ?= $(DTB_FILE_NAME)
# kernel env setup
ifeq ($(strip $(LINUX_VERSION)),linux-4.14.y)
CROSS_COMPILE_TOOLCHAIN ?= aarch64-linux-android-
else
CROSS_COMPILE_TOOLCHAIN ?= aarch64-v100-linux-
endif
ifneq ($(strip $(OS_PLATFORM_VERSION)), linux)
MSP_FLAG := CONFIG_STB_DRIVER=y SOCT_DRV_BUILDTYPE=y
ifneq ($(strip $(LINUX_VERSION)),common-kernel-4.9)
CLANG_PARAM := LLVM=1 LLVM_IAS=1
endif
else
MSP_FLAG := CONFIG_STB_DRIVER=y SOCT_DRV_BUILDTYPE=m
endif
THIRDPARTY_DIR := $(PWD)/vendor/thirdparty
DEVELOPMENT_DIR := $(PWD)/$(SOC_PLATFORM_PATH)/development
SOC_TOPDIR := $(PWD)
TARGET_KERNEL_DIR := $(PWD)/vendor/open_source/$(LINUX_VERSION)
-include $(PWD)/$(TARGET_PRODUCT_DIR)/build/kernel.mk
# dtbo env setup
DTB_TOOL_PATH := $(PWD)/prebuilts/misc/linux-x86/libufdt
DTB_TOOL_PATH := $(DTB_TOOL_PATH):$(IMGTOOL_PATH)
ifeq ($(LLT_SUPPORT), y)
DRIVER_CONFIG += CONFIG_DEBUG_FS=y
DRIVER_CONFIG += CONFIG_GCOV_KERNEL=y
DRIVER_CONFIG += CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
DRIVER_CONFIG += CONFIG_GCOV_FORMAT_AUTODETECT=y
DRIVER_CONFIG += CONFIG_GCOV_PROFILE_ALL=y
endif
# overlay dtb
OVERLAY_DTB_ARGS := $(addsuffix $(empty) $(empty)--id=/:board_id, $(addprefix $(KERNEL_OBJ)/, $(OVERLAY_DTB_FILES)))
# kernel configs
DIR_CONFIG := DRV_DIR=$(PWD)/$(SOC_PLATFORM_PATH)/linux/drv KERNEL_SRC_DIR=$(TARGET_KERNEL_DIR)\
VENDOR_DIR=$(PWD)/vendor THIRDPARTY_DIR=$(THIRDPARTY_DIR) \
DEVELOPMENT_DIR=$(DEVELOPMENT_DIR) \
SOC_TOPDIR=$(SOC_TOPDIR) DTB_CHIP_DIR=$(DTB_CHIP_DIR) TARGET_PRODUCT_DIR=$(TARGET_PRODUCT_DIR)
KERNEL_FLAGS := ARCH=$(TARGET_ARCH) CROSS_COMPILE=$(CROSS_COMPILE_TOOLCHAIN) $(CLANG_PARAM)\
$(MSP_FLAG) $(DIR_CONFIG) $(DRIVER_CONFIG)
KERNEL_CFLAGS := $(DRIVER_CFLAGS) -DSDK_VERSION=$(HUANGLONG_PLATFORM_VERSION)
ifeq ($(strip $(LINUX_VERSION)),ohos-linux-5.10)
KERNEL_FLAGS += CROSS_COMPILE_COMPAT=arm-v100-linux-
endif
ifeq ($(strip $(PRODUCT_USE_DYNAMIC_PARTITIONS)), true)
KERNEL_FLAGS += CONFIG_DP_PARTITION_SUPPORT=y
KERNEL_CFLAGS += -DCONFIG_DP_PARTITION_SUPPORT
endif
ifeq ($(strip $(AB_PARTITION_SUPPORT)), true)
KERNEL_FLAGS += CONFIG_AB_PARTITION_SUPPORT=y
KERNEL_CFLAGS += -DCONFIG_AB_PARTITION_SUPPORT
endif
ifeq ($(strip $(BOARD_AVB_ENABLE)), true)
KERNEL_FLAGS += CONFIG_AVB_SUPPORT=y
KERNEL_CFLAGS += -DCONFIG_AVB_SUPPORT
endif
KERNEL_AFLAGS := $(KERNEL_CFLAGS)
SDK_DIR_KERNEL := $(PWD)/$(SOC_PLATFORM_PATH)/linux
# prebuilt ramdisk image
ifeq ($(strip $(PRODUCT_BUILD_RAMDISK_IMAGE)), false)
INSTALLED_RAMDISK_TARGET := $(PRODUCT_OUT)/ramdisk.img
ifeq ($(TARGET_BUILD_VARIANT), user)
$(INSTALLED_RAMDISK_TARGET):
@cp $(CURDIR)/$(SOC_PLATFORM_PATH)/binary/ramdisk/user/* $(CURDIR)/$(PRODUCT_OUT) -rf
else
$(INSTALLED_RAMDISK_TARGET):
@echo copy ramdisk to target
@cp $(CURDIR)/$(SOC_PLATFORM_PATH)/binary/ramdisk/eng/* $(CURDIR)/$(PRODUCT_OUT) -rf
endif
endif
# kernel objs
$(KERNEL_OBJ)/.config:
PATH=$(KERNEL_TOOLS_PATH) $(MAKE) -C $(TARGET_KERNEL_DIR) \
O=$(PWD)/$(KERNEL_OBJ) $(KERNEL_FLAGS) \
CFLAGS_KERNEL="$(KERNEL_CFLAGS)" AFLAGS_KERNEL="$(KERNEL_AFLAGS)" $(ANDROID_KERNEL_CONFIG)
ifneq ($(KERNEL_AMEND_CONFIGS),)
$(hide) $(foreach cf,$(strip $(KERNEL_AMEND_CONFIGS)),$(shell cat $(cf) >> $(KERNEL_DEBUG_CONFIGS)))
# Only defined driver config in Kconfig can be overrided by kconfig-dynamic
PATH=$(KERNEL_TOOLS_PATH) $(MAKE) -C $(SDK_DIR_KERNEL)/scripts BASED_FILE=$(PWD)/$(KERNEL_OBJ)/.config \
$(DIR_CONFIG) INPUT_FILE=$(KERNEL_DEBUG_CONFIGS) INPUT_CONFIG="$(DRIVER_CONFIG)" \
OUTPUT_FILE=$(KERNEL_ARCH_ARM64_CONFIGS)/$(KERNEL_TMP_CONFIGS) kconfig-dynamic
PATH=$(KERNEL_TOOLS_PATH) $(MAKE) -C $(TARGET_KERNEL_DIR) \
O=$(PWD)/$(KERNEL_OBJ) $(KERNEL_FLAGS) \
CFLAGS_KERNEL="$(KERNEL_CFLAGS)" AFLAGS_KERNEL="$(KERNEL_AFLAGS)" $(KERNEL_TMP_CONFIGS)
$(hide) rm -rf $(KERNEL_ARCH_ARM64_CONFIGS)/$(KERNEL_TMP_CONFIGS)
$(hide) rm -rf $(KERNEL_DEBUG_CONFIGS)
$(hide) wait
endif
$(KERNEL_OBJ)/arch/$(TARGET_ARCH)/boot/Image: $(KERNEL_OBJ)/.config
$(hide) mkdir -p $(TARGET_OUT_VENDOR)
$(hide) ln -sf /odm/firmware $(TARGET_OUT_VENDOR)/firmware
PATH=$(KERNEL_TOOLS_PATH) $(COVERITY_COMMAND) $(MAKE) -C $(TARGET_KERNEL_DIR) \
O=$(PWD)/$(KERNEL_OBJ) $(KERNEL_FLAGS) \
CFLAGS_KERNEL="$(KERNEL_CFLAGS)" AFLAGS_KERNEL="$(KERNEL_AFLAGS)" \
Image modules dtbs
$(PRODUCT_OUT)/kernel: $(KERNEL_OBJ)/arch/$(TARGET_ARCH)/boot/Image
$(ACP) $< $@
# dtbo objs
SECURE_TOOL := vendor/tools/host/huanglong/sign_tools/SecureTool/bin/SecureTool
VERIFIED_BOOT_CFG_DIR := vendor/tools/host/huanglong/sign_config/verified_boot_cfg
$(PRODUCT_OUT)/dtbo: $(PRODUCT_OUT)/kernel
$(hide) mkdir -p $(DTB_OUT_DIR)
$(hide) dd if=$(KERNEL_OBJ)/$(DTB_BASE_DIR)/$(TARGET_DTB_FILE_NAME) of=$(DTB_OUT_DIR)/tmp.dtb bs=1K count=300
$(hide) dd if=/dev/zero of=$(DTB_OUT_DIR)/tmp.dtb bs=1K seek=300 count=1
$(hide) mv $(DTB_OUT_DIR)/tmp.dtb $(DTB_OUT_DIR)/$(TARGET_DTB_FILE_NAME)
# build dtb
PATH=$(DTB_TOOL_PATH) mkdtimg create $(DTB_OUT_DIR)/dtbo.img $(OVERLAY_DTB_ARGS)
$(hide) dd if=$(DTB_OUT_DIR)/$(TARGET_DTB_FILE_NAME) of=$(DTB_OUT_DIR)/tmp.dtb bs=1K count=300
$(hide) dd if=$(DTB_OUT_DIR)/dtbo.img of=$(DTB_OUT_DIR)/tmp.dtb bs=1K seek=300
$(hide) mv $(DTB_OUT_DIR)/tmp.dtb $(DTB_OUT_DIR)/$(TARGET_DTB_FILE_NAME)
$(hide) $(ACP) $(DTB_OUT_DIR)/$(TARGET_DTB_FILE_NAME) $@
ifeq ($(strip $(BOARD_AVB_ENABLE)), true)
$(hide) mkdir -p $(SECURE_OBJ_DIR)
$(hide) $(ACP) $(DTB_OUT_DIR)/$(TARGET_DTB_FILE_NAME) $(SECURE_OBJ_DIR)/dtbo.img
ifneq ($(findstring $(CHIP_VERSION), "hi3751v811"),)
$(hide) $(SECURE_TOOL) common --cfg $(VERIFIED_BOOT_CFG_DIR)/verified_boot_dtbo_sign_hi3751v811.cfg \
-k $(SECURE_RSA_KEY_DIR)/ -r $(SECURE_OBJ_DIR)/ -o $(SECURE_OBJ_DIR)/
else # CHIP_VERSION != hi3751v811
$(hide) $(SECURE_TOOL) common --cfg $(VERIFIED_BOOT_CFG_DIR)/verified_boot_dtbo_sign.cfg \
-k $(SECURE_RSA_KEY_DIR)/ -r $(SECURE_OBJ_DIR)/ -o $(SECURE_OBJ_DIR)/
endif
$(hide) $(ACP) $(SECURE_OBJ_DIR)/dtbo_Sign.img $@
endif
ifeq ($(PRODUCT_TYPE), pc)
ifeq ($(PCDTB_TOOL_DIR), $(wildcard $(PCDTB_TOOL_DIR)))
$(AT)$(MAKE) -C $(PCDTB_TOOL_DIR) all KERNEL_OUT_DIR=$(PWD)/$(KERNEL_OBJ) SOCT_OUT_DIR=$(PWD)/$(PRODUCT_OUT)
endif
endif
# final images
.PHONY: odmimg bootimg dtboimage ko_tools
dtboimage: $(PRODUCT_OUT)/dtbo.img
$(hide) mkdir -p $(IMAGES_OUT)
$(ACP) -f $< $(IMAGES_OUT)/dtbo_$(CHIP_REVISION).img
bootimg: $(PRODUCT_OUT)/boot.img
$(hide) mkdir -p $(IMAGES_OUT)
$(ACP) -f $< $(IMAGES_OUT)/boot_$(CHIP_REVISION).img
odmimg: $(PRODUCT_OUT)/odm.img
$(hide) mkdir -p $(IMAGES_OUT)
$(ACP) -f $< $(IMAGES_OUT)/odm_$(CHIP_REVISION).img
ko_tools: $(PRODUCT_OUT)/boot.img
PATH=$(KERNEL_TOOLS_PATH) $(COVERITY_COMMAND) FAKEROOTDONTTRYCHOWN=true $(MAKE) -C $(TARGET_KERNEL_DIR) \
O=$(PWD)/$(KERNEL_OBJ) $(KERNEL_FLAGS) \
CFLAGS_KERNEL="$(KERNEL_CFLAGS)" AFLAGS_KERNEL="$(KERNEL_AFLAGS)" \
bindeb-pkg KDEB_PKGVERSION=1
ifeq (,$(filter true, $(TARGET_NO_KERNEL) $(TARGET_NO_RECOVERY)))
# add to droidcore dependency
droidcore: odmimg bootimg dtboimage
endif
# vbmeta target to sign with soc test key
.PHONY: make_vbmeta
make_vbmeta: vbmetaimage |$(AVBTOOL)
# append vbmeta_append.img to boot.img
$(hide) $(AVBTOOL) append_vbmeta_image --image $(PRODUCT_OUT)/boot.img --partition_size $(BOARD_BOOTIMAGE_PARTITION_SIZE) --vbmeta_image $(PRODUCT_OUT)/vbmeta.img
ifeq ($(strip $(BOARD_AVB_ENABLE)), true)
bootimg: make_vbmeta
droidcore: make_vbmeta
endif
ifeq ($(strip $(OS_PLATFORM_VERSION)), linux)
# only support for linux version
$(PRODUCT_OUT)/dtbo.img: $(PRODUCT_OUT)/dtbo
$(hide) mkdir -p $(PRODUCT_OUT)
$(hide) cp $< $@
$(PRODUCT_OUT)/boot.img: $(PRODUCT_OUT)/kernel
$(hide) mkdir -p $(PRODUCT_OUT)
$(hide) cp $< $@
build: bootimg dtboimage
endif