blob: a6532fe7808351dd5d8fd195a004894f8bf2ae6c [file] [log] [blame]
# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2019 MediaTek Inc.
LOCAL_PATH := $(call my-dir)
MTK_PATH_DEVICE_BUILD ?= device/mediatek
ifeq ($(word 2,$(subst -, ,$(notdir $(LOCAL_PATH)))),$(word 2,$(subst -, ,$(strip $(LINUX_KERNEL_VERSION)))))
include $(LOCAL_PATH)/kenv.mk
ifeq ($(wildcard $(TARGET_PREBUILT_KERNEL)),)
KERNEL_MAKE_DEPENDENCIES := $(shell find $(KERNEL_DIR) -name .git -prune -o -type f | sort)
KERNEL_MAKE_DEPENDENCIES += $(shell find vendor/mediatek/kernel_modules -name .git -prune -o -type f | sort)
ifdef MTK_GKI_PREBUILTS_DIR
KERNEL_MAKE_DEPENDENCIES += $(wildcard $(MTK_GKI_PREBUILTS_DIR)/*)
endif
ifdef MTK_GKI_BUILD_CONFIG
KERNEL_MAKE_DEPENDENCIES += $(shell find kernel/$(REL_ACK_DIR) -name .git -prune -o -type f | sort)
endif
ifdef LINUX_KERNEL_VERSION
KERNEL_MAKE_DEPENDENCIES += $(shell find $(LINUX_KERNEL_VERSION) -name .git -prune -o -type f | sort)
endif
$(GEN_KERNEL_BUILD_CONFIG): PRIVATE_GEN_BUILD_CONFIG := $(REL_KERNEL_DIR)/scripts/gen_build_config.py
$(GEN_KERNEL_BUILD_CONFIG): PRIVATE_KERNEL_DEFCONFIG := $(KERNEL_DEFCONFIG)
$(GEN_KERNEL_BUILD_CONFIG): PRIVATE_KERNEL_DEFCONFIG_OVERLAYS := $(KERNEL_DEFCONFIG_OVERLAYS)
$(GEN_KERNEL_BUILD_CONFIG): PRIVATE_KERNEL_BUILD_CONFIG := $(REL_GEN_KERNEL_BUILD_CONFIG)
$(GEN_KERNEL_BUILD_CONFIG): PRIVATE_KERNEL_BUILD_CONFIG_OVERLAYS := $(addprefix $(REL_KERNEL_DIR)/,$(KERNEL_BUILD_CONFIG_OVERLAYS))
$(GEN_KERNEL_BUILD_CONFIG): $(KERNEL_DIR)/kernel/configs/ext_modules.list
$(GEN_KERNEL_BUILD_CONFIG): $(KERNEL_DIR)/scripts/gen_build_config.py $(wildcard $(KERNEL_DIR)/build.config.*) $(build_config_file) $(KERNEL_CONFIG_FILE) $(LOCAL_PATH)/Android.mk
$(hide) mkdir -p $(dir $@)
$(hide) cd kernel && python $(PRIVATE_GEN_BUILD_CONFIG) --kernel-defconfig $(PRIVATE_KERNEL_DEFCONFIG) --kernel-defconfig-overlays "$(PRIVATE_KERNEL_DEFCONFIG_OVERLAYS)" --kernel-build-config-overlays "$(PRIVATE_KERNEL_BUILD_CONFIG_OVERLAYS)" -m $(TARGET_BUILD_VARIANT) -o $(PRIVATE_KERNEL_BUILD_CONFIG) && cd ..
ifeq (yes,$(strip $(BUILD_KERNEL)))
ifneq ($(KERNEL_USE_BAZEL),yes)
$(KERNEL_ZIMAGE_OUT): PRIVATE_DIR := $(KERNEL_DIR)
$(KERNEL_ZIMAGE_OUT): PRIVATE_KERNEL_OUT := $(REL_KERNEL_OUT)
$(KERNEL_ZIMAGE_OUT): PRIVATE_DIST_DIR := $(REL_KERNEL_OUT)/dist
$(KERNEL_ZIMAGE_OUT): PRIVATE_CC_WRAPPER := $(CCACHE_EXEC)
$(KERNEL_ZIMAGE_OUT): PRIVATE_KERNEL_BUILD_CONFIG := $(REL_GEN_KERNEL_BUILD_CONFIG)
ifeq (user,$(strip $(KERNEL_BUILD_VARIANT)))
ifneq (,$(strip $(shell grep "^CONFIG_ABI_MONITOR\s*=\s*y" $(KERNEL_CONFIG_FILE))))
$(KERNEL_ZIMAGE_OUT): PRIVATE_KERNEL_BUILD_SCRIPT := ./build/build_abi.sh
else
$(KERNEL_ZIMAGE_OUT): PRIVATE_KERNEL_BUILD_SCRIPT := ./build/build.sh
endif
else
$(KERNEL_ZIMAGE_OUT): PRIVATE_KERNEL_BUILD_SCRIPT := ./build/build.sh
endif
$(KERNEL_ZIMAGE_OUT): $(GEN_KERNEL_BUILD_CONFIG) $(KERNEL_MAKE_DEPENDENCIES) | kernel-outputmakefile
$(hide) mkdir -p $(dir $@)
$(hide) cd kernel && CC_WRAPPER=$(PRIVATE_CC_WRAPPER) SKIP_MRPROPER=1 BUILD_CONFIG=$(PRIVATE_KERNEL_BUILD_CONFIG) OUT_DIR=$(PRIVATE_KERNEL_OUT) DIST_DIR=$(PRIVATE_DIST_DIR) $(PRIVATE_KERNEL_BUILD_SCRIPT) && cd ..
ifeq (uncompressed,$(strip $(MTK_KERNEL_COMPRESS_FORMAT)))
else
$(hide) $(call fixup-kernel-cmd-file,$(KERNEL_OUT)/arch/$(KERNEL_TARGET_ARCH)/boot/compressed/.piggy.xzkern.cmd)
endif
else
$(KERNEL_ZIMAGE_OUT): PRIVATE_BAZEL_DIST_OUT := $(KERNEL_BAZEL_DIST_OUT)
$(KERNEL_ZIMAGE_OUT): PRIVATE_BAZEL_PROJECT_NAME := $(subst _defconfig,,$(KERNEL_DEFCONFIG))
$(KERNEL_ZIMAGE_OUT): PRIVATE_BAZEL_BUILD_PARAMETERS := --config=android_ci --lto=full
$(KERNEL_ZIMAGE_OUT): PRIVATE_BAZEL_BUILD_PARAMETERS += --config=$(PRIVATE_BAZEL_PROJECT_NAME)
$(KERNEL_ZIMAGE_OUT): PRIVATE_BAZEL_DIST_GOAL := //kernel_device_modules-5.15:$(PRIVATE_BAZEL_PROJECT_NAME)_dist
ifeq ($(BUILD_GKI_KERNEL),1)
$(KERNEL_ZIMAGE_OUT): PRIVATE_BAZEL_BUILD_PARAMETERS += --config=no_download_gki
endif
ifneq ($(wildcard vendor/mediatek/tests/kernel),)
$(KERNEL_ZIMAGE_OUT): PRIVATE_BAZEL_BUILD_PARAMETERS += --//kernel_device_modules-5.15:internal_build
endif
$(KERNEL_ZIMAGE_OUT): $(GEN_KERNEL_BUILD_CONFIG) $(KERNEL_MAKE_DEPENDENCIES) | kernel-outputmakefile
cd kernel && tools/bazel run $(PRIVATE_BAZEL_BUILD_PARAMETERS) $(PRIVATE_BAZEL_DIST_GOAL) -- --dist_dir=$(abspath $(PRIVATE_BAZEL_DIST_OUT))
### Copy output to specific folder.
$(hide) mkdir -p $(abspath $(PRIVATE_BAZEL_DIST_OUT))/kernel/$(REL_KERNEL_DIR)
# Maintain compatibility with the platform build.
$(hide) mkdir -p $(abspath $(PRIVATE_BAZEL_DIST_OUT))/kernel-5.15/kernel_aarch64
$(hide) cp -rf $(abspath $(PRIVATE_BAZEL_DIST_OUT))/$(REL_KERNEL_DIR)/gki_artifacts/*.ko $(abspath $(PRIVATE_BAZEL_DIST_OUT))/kernel-5.15/kernel_aarch64/
$(hide) cp -rf $(abspath $(PRIVATE_BAZEL_DIST_OUT))/$(REL_KERNEL_DIR)/gki_artifacts/$(KERNEL_IMAGE_NAME) $(abspath $(PRIVATE_BAZEL_DIST_OUT))/kernel-5.15/
$(hide) cp -rf $(abspath $(PRIVATE_BAZEL_DIST_OUT))/$(REL_KERNEL_DIR)/gki_artifacts/$(BOOT_IMG_NAME) $(abspath $(PRIVATE_BAZEL_DIST_OUT))/kernel-5.15/boot.img
$(hide) cp -rf $(abspath $(PRIVATE_BAZEL_DIST_OUT))/$(REL_KERNEL_DIR)/$(PRIVATE_BAZEL_PROJECT_NAME)_device_modules/* $(abspath $(PRIVATE_BAZEL_DIST_OUT))/kernel/kernel_device_modules-5.15/
$(hide) cp -rf $(abspath $(PRIVATE_BAZEL_DIST_OUT))/$(REL_KERNEL_DIR)/$(PRIVATE_BAZEL_PROJECT_NAME)/* $(abspath $(PRIVATE_BAZEL_DIST_OUT))/kernel/kernel_device_modules-5.15/
$(hide) cp -rf $(abspath $(PRIVATE_BAZEL_DIST_OUT))/vendor/mediatek/kernel_modules/met_drv_v3/met_drv_v3/* $(abspath $(PRIVATE_BAZEL_DIST_OUT))/vendor/mediatek/kernel_modules/met_drv_v3/
$(hide) cp -rf $(abspath $(PRIVATE_BAZEL_DIST_OUT))/$(REL_KERNEL_DIR)/$(PRIVATE_BAZEL_PROJECT_NAME)_unstripped_modules_archive/unstripped_modules.tar.gz $(abspath $(PRIVATE_BAZEL_DIST_OUT))
ifneq ($(wildcard vendor/mediatek/tests/kernel),)
$(hide) cp -rf $(abspath $(PRIVATE_BAZEL_DIST_OUT))/vendor/mediatek/kernel_modules/met_drv_v3/met_api/met_api_v3_int/* $(abspath $(PRIVATE_BAZEL_DIST_OUT))/vendor/mediatek/kernel_modules/met_drv_v3/met_api/
$(hide) cp -rf $(abspath $(PRIVATE_BAZEL_DIST_OUT))/vendor/mediatek/kernel_modules/met_drv_secure_v3/met_drv_secure_v3/* $(abspath $(PRIVATE_BAZEL_DIST_OUT))/vendor/mediatek/kernel_modules/met_drv_secure_v3/
else
$(hide) cp -rf $(abspath $(PRIVATE_BAZEL_DIST_OUT))/vendor/mediatek/kernel_modules/met_drv_v3/met_api/met_api_v3_cus/* $(abspath $(PRIVATE_BAZEL_DIST_OUT))/vendor/mediatek/kernel_modules/met_drv_v3/met_api/
endif
$(hide) cp -rf $(abspath $(PRIVATE_BAZEL_DIST_OUT))/vendor/mediatek/kernel_modules/connectivity/wlan/core/gen4-mt7663/wlan_drv_gen4/* $(abspath $(PRIVATE_BAZEL_DIST_OUT))/vendor/mediatek/kernel_modules/connectivity/
$(hide) cp -rf $(abspath $(PRIVATE_BAZEL_DIST_OUT))/vendor/mediatek/kernel_modules/connectivity/bt/mt76xx/sdio/btmtksdio/* $(abspath $(PRIVATE_BAZEL_DIST_OUT))/vendor/mediatek/kernel_modules/connectivity/
$(hide) rm -rf $(abspath $(PRIVATE_BAZEL_DIST_OUT))/vendor/mediatek/kernel_modules/connectivity/wlan
$(hide) rm -rf $(abspath $(PRIVATE_BAZEL_DIST_OUT))/vendor/mediatek/kernel_modules/connectivity/bt
endif
ifneq ($(BUILT_KERNEL_TARGET),$(KERNEL_ZIMAGE_OUT))
$(BUILT_KERNEL_TARGET): $(KERNEL_ZIMAGE_OUT) $(LOCAL_PATH)/Android.mk | $(ACP)
$(copy-file-to-target)
endif
$(TARGET_PREBUILT_KERNEL): $(BUILT_KERNEL_TARGET) $(LOCAL_PATH)/Android.mk | $(ACP)
$(copy-file-to-new-target)
endif#BUILD_KERNEL
endif #TARGET_PREBUILT_KERNEL is empty
ifeq (yes,$(strip $(BUILD_KERNEL)))
ifneq ($(strip $(TARGET_NO_KERNEL)),true)
$(INSTALLED_KERNEL_TARGET): $(BUILT_KERNEL_TARGET) $(LOCAL_PATH)/Android.mk | $(ACP)
$(copy-file-to-target)
endif#TARGET_NO_KERNEL
endif#BUILD_KERNEL
.PHONY: kernel save-kernel kernel-menuconfig menuconfig-kernel savedefconfig-kernel clean-kernel
kernel: $(INSTALLED_KERNEL_TARGET)
kernel: $(KERNEL_ZIMAGE_OUT)
save-kernel: $(TARGET_PREBUILT_KERNEL)
kernel-menuconfig:
$(hide) mkdir -p $(KERNEL_OUT)
$(PREBUILT_MAKE_PREFIX)/$(MAKE) -C $(KERNEL_DIR) $(KERNEL_MAKE_OPTION) menuconfig
menuconfig-kernel savedefconfig-kernel:
$(hide) mkdir -p $(KERNEL_OUT)
$(PREBUILT_MAKE_PREFIX)/$(MAKE) -C $(KERNEL_DIR) $(KERNEL_MAKE_OPTION) $(patsubst %config-kernel,%config,$@)
ifneq ($(KERNEL_USE_BAZEL),yes)
clean-kernel:
$(hide) rm -rf $(KERNEL_OUT) $(INSTALLED_KERNEL_TARGET)
else
clean-kernel: PRIVATE_BAZEL_DIST_OUT := $(KERNEL_BAZEL_DIST_OUT)
clean-kernel:
$(hide) cd kernel && tools/bazel clean
$(hide) rm -rf $(PRIVATE_BAZEL_DIST_OUT)
endif
.PHONY: kernel-outputmakefile
kernel-outputmakefile: PRIVATE_DIR := kernel/$(REL_ACK_DIR)
kernel-outputmakefile: PRIVATE_KERNEL_OUT := $(shell bash $(dir $(mkfile_path))scripts/get_rel_path.sh $(KERNEL_OUT) kernel/$(REL_ACK_DIR))
kernel-outputmakefile:
$(PREBUILT_MAKE_PREFIX)/$(MAKE) -C $(PRIVATE_DIR) O=$(PRIVATE_KERNEL_OUT) outputmakefile
### DTB build template
MTK_DTBIMAGE_DTS := $(addsuffix .dts,$(addprefix $(KERNEL_DIR)/arch/$(KERNEL_TARGET_ARCH)/boot/dts/,$(PLATFORM_DTB_NAME)))
include $(MTK_PATH_DEVICE_BUILD)/build/core/build_dtbimage.mk
MTK_DTBOIMAGE_DTS := $(addsuffix .dts,$(addprefix $(KERNEL_DIR)/arch/$(KERNEL_TARGET_ARCH)/boot/dts/,$(PROJECT_DTB_NAMES)))
include $(MTK_PATH_DEVICE_BUILD)/build/core/build_dtboimage.mk
endif #LINUX_KERNEL_VERSION