kernel: Support building from kernel platform
This expects a few build variables to be set: * TARGET_KERNEL_PLATFORM_TARGET: The base target name. For example, 'tegra' will indicate that the dist target is tegra_dist, abi is tegra_abi, etc. * TARGET_KERNEL_VERSION: Used to determine the kernel checkout path. For example, a value of 6.6 will expect the kernel platform repo to be checked out to $BUILD_TOP/../kernel-6.6. * TARGET_KERNEL_SOURCE: Relative to the top of the kernel platform checkout, the path to the kernel build rules. For example, vendor/nvidia/tegra. * BOARD_KERNEL_IMAGE_NAME: The kernel image to use. For example, Image. Using the examples above, this will run bazel in the kernel-6.6 directory on the target //vendor/nvidia/tegra:tegra_dist, then source the output from $OUT/tegra/dist, with the prebuilt kernel image being Image. Change-Id: If96e96dffa2c0bfd9bd824bb3d8064eb861c9d00
This commit is contained in:
committed by
Jan Altensen
parent
e9f9f3902d
commit
7cd90ecd34
@@ -21,7 +21,16 @@ lineage_generator {
|
|||||||
name: "generated_kernel_includes",
|
name: "generated_kernel_includes",
|
||||||
|
|
||||||
// The headers make command
|
// The headers make command
|
||||||
cmd: "$(PATH_OVERRIDE_SOONG) $(KERNEL_MAKE_CMD) $(KERNEL_MAKE_FLAGS) -C $(TARGET_KERNEL_SOURCE) O=$(KERNEL_BUILD_OUT_PREFIX)$(genDir) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) headers_install && vendor/lineage/tools/clean_headers.sh $(KERNEL_BUILD_OUT_PREFIX)$(genDir)",
|
cmd: "if [ -n \"$(TARGET_KERNEL_PLATFORM_TARGET)\" ]; then " +
|
||||||
|
" pushd $(KERNEL_PATH); " +
|
||||||
|
" ./tools/bazel --output_user_root=$(KERNEL_BUILD_OUT_PREFIX)$(genDir)/bazel-out run --experimental_convenience_symlinks=ignore --cpu=$(KERNEL_ARCH) //$(TARGET_KERNEL_SOURCE):$(TARGET_KERNEL_PLATFORM_TARGET)_uapi_headers_dist -- --destdir=$(KERNEL_BUILD_OUT_PREFIX)$(genDir); " +
|
||||||
|
" popd; " +
|
||||||
|
" gzip -d $(KERNEL_BUILD_OUT_PREFIX)$(genDir)/kernel-uapi-headers.tar.gz; " +
|
||||||
|
" tar -xf $(KERNEL_BUILD_OUT_PREFIX)$(genDir)/kernel-uapi-headers.tar -C $(KERNEL_BUILD_OUT_PREFIX)$(genDir); " +
|
||||||
|
"else " +
|
||||||
|
" $(PATH_OVERRIDE_SOONG) $(KERNEL_MAKE_CMD) $(KERNEL_MAKE_FLAGS) -C $(TARGET_KERNEL_SOURCE) O=$(KERNEL_BUILD_OUT_PREFIX)$(genDir) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) headers_install; " +
|
||||||
|
"fi; " +
|
||||||
|
"vendor/lineage/tools/clean_headers.sh $(KERNEL_BUILD_OUT_PREFIX)$(genDir)",
|
||||||
|
|
||||||
// Directories that can be imported by a cc_* module generated_headers property
|
// Directories that can be imported by a cc_* module generated_headers property
|
||||||
export_include_dirs: [
|
export_include_dirs: [
|
||||||
|
|||||||
@@ -84,6 +84,9 @@
|
|||||||
# TARGET_DTB_LIST_WILDCARD = Optional, limits the .dtb files used to generate the
|
# TARGET_DTB_LIST_WILDCARD = Optional, limits the .dtb files used to generate the
|
||||||
# final DTB image when NOT using QCOM's merge_dtbs
|
# final DTB image when NOT using QCOM's merge_dtbs
|
||||||
# script. Allows multiple patterns.
|
# script. Allows multiple patterns.
|
||||||
|
#
|
||||||
|
# TARGET_KERNEL_PLATFORM_TARGET = Optional, enables building an external kernel
|
||||||
|
# platform tree, this specifies the base target name
|
||||||
|
|
||||||
ifneq ($(TARGET_NO_KERNEL),true)
|
ifneq ($(TARGET_NO_KERNEL),true)
|
||||||
ifneq ($(TARGET_NO_KERNEL_OVERRIDE),true)
|
ifneq ($(TARGET_NO_KERNEL_OVERRIDE),true)
|
||||||
@@ -102,6 +105,7 @@ TARGET_MERGE_DTBS_WILDCARD ?= *
|
|||||||
TARGET_DTB_LIST_WILDCARD ?= *
|
TARGET_DTB_LIST_WILDCARD ?= *
|
||||||
# recovery modules.load fallback - optional
|
# recovery modules.load fallback - optional
|
||||||
BOARD_RECOVERY_KERNEL_MODULES_LOAD ?= $(BOARD_RECOVERY_RAMDISK_KERNEL_MODULES_LOAD)
|
BOARD_RECOVERY_KERNEL_MODULES_LOAD ?= $(BOARD_RECOVERY_RAMDISK_KERNEL_MODULES_LOAD)
|
||||||
|
TARGET_KERNEL_MIXED_MODE ?= true
|
||||||
|
|
||||||
## Internal variables
|
## Internal variables
|
||||||
DTC := $(HOST_OUT_EXECUTABLES)/dtc
|
DTC := $(HOST_OUT_EXECUTABLES)/dtc
|
||||||
@@ -153,7 +157,22 @@ ifeq "$(wildcard $(KERNEL_SRC) )" ""
|
|||||||
$(eval HAS_PREBUILT_KERNEL := true)))
|
$(eval HAS_PREBUILT_KERNEL := true)))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifneq ($(HAS_PREBUILT_KERNEL),)
|
ifneq ($(TARGET_KERNEL_PLATFORM_TARGET),)
|
||||||
|
ifeq "$(wildcard $(abspath $(BUILD_TOP)/../kernel-$(TARGET_KERNEL_VERSION))/$(KERNEL_SRC) )" ""
|
||||||
|
$(warning ***************************************************************)
|
||||||
|
$(warning * *)
|
||||||
|
$(warning * No kernel platform source found. *)
|
||||||
|
$(warning * Please make sure your device is properly configured to *)
|
||||||
|
$(warning * download the kernel repository to $(KERNEL_SRC))
|
||||||
|
$(warning * *)
|
||||||
|
$(warning ***************************************************************)
|
||||||
|
$(error "NO KERNEL")
|
||||||
|
endif
|
||||||
|
NEEDS_KERNEL_COPY := true
|
||||||
|
FULL_KERNEL_BUILD := false
|
||||||
|
TARGET_PREBUILT_INT_KERNEL := $(KERNEL_OUT)/$(BOARD_KERNEL_IMAGE_NAME)
|
||||||
|
KERNEL_BIN := $(TARGET_PREBUILT_INT_KERNEL)
|
||||||
|
else ifneq ($(HAS_PREBUILT_KERNEL),)
|
||||||
ifeq ($(TARGET_PREBUILT_KERNEL_HEADERS),)
|
ifeq ($(TARGET_PREBUILT_KERNEL_HEADERS),)
|
||||||
$(warning ***************************************************************)
|
$(warning ***************************************************************)
|
||||||
$(warning * Using prebuilt kernel binary instead of source *)
|
$(warning * Using prebuilt kernel binary instead of source *)
|
||||||
@@ -337,6 +356,10 @@ define make-dtb-target
|
|||||||
$(call internal-make-kernel-target,$(DTB_OUT),$(1))
|
$(call internal-make-kernel-target,$(DTB_OUT),$(1))
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
endif # FULL_KERNEL_BUILD
|
||||||
|
|
||||||
|
ifneq ($(filter $(FULL_KERNEL_BUILD),true)$(TARGET_KERNEL_PLATFORM_TARGET),)
|
||||||
|
|
||||||
# $(1): modules list
|
# $(1): modules list
|
||||||
# $(2): output dir
|
# $(2): output dir
|
||||||
# $(3): mount point
|
# $(3): mount point
|
||||||
@@ -390,9 +413,9 @@ define build-image-kernel-modules-lineage
|
|||||||
fi;
|
fi;
|
||||||
endef
|
endef
|
||||||
|
|
||||||
endif # FULL_KERNEL_BUILD
|
endif # FULL_KERNEL_BUILD or TARGET_KERNEL_PLATFORM_TARGET
|
||||||
|
|
||||||
ifeq ($(FULL_KERNEL_BUILD),true)
|
ifneq ($(filter $(FULL_KERNEL_BUILD),true)$(TARGET_KERNEL_PLATFORM_TARGET),)
|
||||||
|
|
||||||
ifeq ($(NEED_KERNEL_MODULE_ROOT),true)
|
ifeq ($(NEED_KERNEL_MODULE_ROOT),true)
|
||||||
KERNEL_MODULES_OUT := $(TARGET_ROOT_OUT)
|
KERNEL_MODULES_OUT := $(TARGET_ROOT_OUT)
|
||||||
@@ -431,7 +454,7 @@ SYSTEM_KERNEL_DEPMOD_STAGING_DIR := $(KERNEL_BUILD_OUT_PREFIX)$(call intermediat
|
|||||||
SYSTEM_KERNEL_MODULE_MOUNTPOINT := system_dlkm
|
SYSTEM_KERNEL_MODULE_MOUNTPOINT := system_dlkm
|
||||||
SYSTEM_KERNEL_MODULES_PARTITION_FILE_LIST := $(system_dlkmimage_intermediates)/file_list.txt
|
SYSTEM_KERNEL_MODULES_PARTITION_FILE_LIST := $(system_dlkmimage_intermediates)/file_list.txt
|
||||||
$(INSTALLED_SYSTEM_DLKMIMAGE_TARGET): $(TARGET_PREBUILT_INT_KERNEL)
|
$(INSTALLED_SYSTEM_DLKMIMAGE_TARGET): $(TARGET_PREBUILT_INT_KERNEL)
|
||||||
else ifneq ($(SYSTEM_KERNEL_MODULES),)
|
else ifneq ($(SYSTEM_KERNEL_MODULES)$(filter $(TARGET_KERNEL_MIXED_MODE),true),)
|
||||||
SYSTEM_KERNEL_MODULES_OUT := $(TARGET_OUT)
|
SYSTEM_KERNEL_MODULES_OUT := $(TARGET_OUT)
|
||||||
SYSTEM_KERNEL_DEPMOD_STAGING_DIR := $(KERNEL_BUILD_OUT_PREFIX)$(call intermediates-dir-for,PACKAGING,depmod_system)
|
SYSTEM_KERNEL_DEPMOD_STAGING_DIR := $(KERNEL_BUILD_OUT_PREFIX)$(call intermediates-dir-for,PACKAGING,depmod_system)
|
||||||
SYSTEM_KERNEL_MODULE_MOUNTPOINT := system
|
SYSTEM_KERNEL_MODULE_MOUNTPOINT := system
|
||||||
@@ -470,6 +493,10 @@ KERNEL_RECOVERY_MODULES_OUT := $(TARGET_RECOVERY_ROOT_OUT)
|
|||||||
$(recovery_uncompressed_ramdisk): $(TARGET_PREBUILT_INT_KERNEL)
|
$(recovery_uncompressed_ramdisk): $(TARGET_PREBUILT_INT_KERNEL)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
endif # TARGET_KERNEL_PLATFORM_TARGET or FULL_KERNEL_BUILD
|
||||||
|
|
||||||
|
ifeq ($(FULL_KERNEL_BUILD),true)
|
||||||
|
|
||||||
$(KERNEL_OUT):
|
$(KERNEL_OUT):
|
||||||
mkdir -p $(KERNEL_OUT)
|
mkdir -p $(KERNEL_OUT)
|
||||||
|
|
||||||
@@ -684,6 +711,27 @@ endef
|
|||||||
|
|
||||||
endif # FULL_KERNEL_BUILD
|
endif # FULL_KERNEL_BUILD
|
||||||
|
|
||||||
|
ifneq ($(TARGET_KERNEL_PLATFORM_TARGET),)
|
||||||
|
KERNEL_PATH := $(abspath $(BUILD_TOP)/../kernel-$(TARGET_KERNEL_VERSION))
|
||||||
|
$(TARGET_PREBUILT_INT_KERNEL): $(DEPMOD) $(KERNEL_MODULES_PARTITION_FILE_LIST) $(SYSTEM_KERNEL_MODULES_PARTITION_FILE_LIST)
|
||||||
|
@echo "Building $(BOARD_KERNEL_IMAGE_NAME)"
|
||||||
|
@mkdir -p $(KERNEL_OUT)
|
||||||
|
@rm -rf $(KERNEL_PATH)/out
|
||||||
|
$(hide) cd $(KERNEL_PATH) && ./tools/bazel --output_user_root=$(abspath $(KERNEL_OUT)/bazel-out) run --experimental_convenience_symlinks=ignore --cpu=$(KERNEL_ARCH) //$(KERNEL_SRC):$(TARGET_KERNEL_PLATFORM_TARGET)_dist -- --destdir=$(KERNEL_OUT)
|
||||||
|
$(if $(BOOT_KERNEL_MODULES),\
|
||||||
|
$(call build-image-kernel-modules-lineage,$(addprefix $(KERNEL_OUT)/,$(BOOT_KERNEL_MODULES)),$(KERNEL_VENDOR_RAMDISK_MODULES_OUT),,$(KERNEL_VENDOR_RAMDISK_DEPMOD_STAGING_DIR),$(KERNEL_VENDOR_RAMDISK_KERNEL_MODULES_LOAD),,,)\
|
||||||
|
)
|
||||||
|
$(if $(RECOVERY_KERNEL_MODULES),\
|
||||||
|
$(call build-image-kernel-modules-lineage,$(addprefix $(KERNEL_OUT)/,$(RECOVERY_KERNEL_MODULES)),$(KERNEL_RECOVERY_MODULES_OUT),,$(KERNEL_RECOVERY_DEPMOD_STAGING_DIR),$(BOARD_RECOVERY_KERNEL_MODULES_LOAD),,,)\
|
||||||
|
)
|
||||||
|
$(if $(filter $(TARGET_KERNEL_MIXED_MODE),true),\
|
||||||
|
system_dlkm_modules=$$(awk -F'/' '{ print "$(KERNEL_OUT)/"$$NF }' $(KERNEL_OUT)/system_dlkm.modules.load); \
|
||||||
|
($(call build-image-kernel-modules-lineage,$$system_dlkm_modules,$(SYSTEM_KERNEL_MODULES_OUT),$(SYSTEM_KERNEL_MODULE_MOUNTPOINT)/,$(SYSTEM_KERNEL_DEPMOD_STAGING_DIR),,,$(SYSTEM_KERNEL_MODULES_PARTITION_FILE_LIST),))\
|
||||||
|
)
|
||||||
|
vendor_modules=$$(comm -23 <(find $(KERNEL_OUT) -maxdepth 1 -type f -name '*.ko' | awk -F'/' '{ print $$NF }' | sort) <(awk -F'/' '{ print $$NF }' $(KERNEL_OUT)/system_dlkm.modules.load | sort) | sed 's|^|$(KERNEL_OUT)/|'); \
|
||||||
|
($(call build-image-kernel-modules-lineage,$$vendor_modules,$(KERNEL_MODULES_OUT),$(KERNEL_MODULE_MOUNTPOINT)/,$(KERNEL_DEPMOD_STAGING_DIR),$(BOARD_VENDOR_KERNEL_MODULES_LOAD),,$(KERNEL_MODULES_PARTITION_FILE_LIST),$(SYSTEM_KERNEL_DEPMOD_STAGING_DIR)/lib/modules/0.0/$(SYSTEM_KERNEL_MODULE_MOUNTPOINT)))
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(NEEDS_KERNEL_COPY),true)
|
ifeq ($(NEEDS_KERNEL_COPY),true)
|
||||||
$(INSTALLED_KERNEL_TARGET): $(KERNEL_BIN)
|
$(INSTALLED_KERNEL_TARGET): $(KERNEL_BIN)
|
||||||
$(transform-prebuilt-to-target)
|
$(transform-prebuilt-to-target)
|
||||||
|
|||||||
@@ -271,3 +271,7 @@ KERNEL_BUILD_OUT_PREFIX :=
|
|||||||
ifeq ($(OUT_DIR_PREFIX),out)
|
ifeq ($(OUT_DIR_PREFIX),out)
|
||||||
KERNEL_BUILD_OUT_PREFIX := $(BUILD_TOP)/
|
KERNEL_BUILD_OUT_PREFIX := $(BUILD_TOP)/
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifneq ($(TARGET_KERNEL_PLATFORM_TARGET),)
|
||||||
|
KERNEL_PATH := $(abspath $(BUILD_TOP)/../kernel-$(TARGET_KERNEL_VERSION))
|
||||||
|
endif
|
||||||
|
|||||||
@@ -7,9 +7,11 @@ EXPORT_TO_SOONG := \
|
|||||||
KERNEL_CROSS_COMPILE \
|
KERNEL_CROSS_COMPILE \
|
||||||
KERNEL_MAKE_CMD \
|
KERNEL_MAKE_CMD \
|
||||||
KERNEL_MAKE_FLAGS \
|
KERNEL_MAKE_FLAGS \
|
||||||
|
KERNEL_PATH \
|
||||||
PATH_OVERRIDE_SOONG \
|
PATH_OVERRIDE_SOONG \
|
||||||
TARGET_KERNEL_CONFIG \
|
TARGET_KERNEL_CONFIG \
|
||||||
TARGET_KERNEL_SOURCE \
|
TARGET_KERNEL_SOURCE \
|
||||||
|
TARGET_KERNEL_PLATFORM_TARGET \
|
||||||
TARGET_PREBUILT_KERNEL_HEADERS
|
TARGET_PREBUILT_KERNEL_HEADERS
|
||||||
|
|
||||||
# Setup SOONG_CONFIG_* vars to export the vars listed above.
|
# Setup SOONG_CONFIG_* vars to export the vars listed above.
|
||||||
|
|||||||
Reference in New Issue
Block a user