Bharath | d27ca20 | 2022-10-05 09:11:30 +0530 | [diff] [blame] | 1 | # This makefile is used to generate extra images for QCOM targets |
| 2 | # persist, device tree & NAND images required for different QCOM targets. |
| 3 | |
| 4 | # These variables are required to make sure that the required |
| 5 | # files/targets are available before generating NAND images. |
| 6 | # This file is included from device/qcom/<TARGET>/AndroidBoard.mk |
| 7 | # and gets parsed before build/core/Makefile, which has these |
| 8 | # variables defined. build/core/Makefile will overwrite these |
| 9 | # variables again. |
| 10 | ifneq ($(strip $(TARGET_NO_KERNEL)),true) |
| 11 | |
| 12 | ifneq ($(strip $(BOARD_KERNEL_BINARIES)),) |
| 13 | BUILT_BOOTIMAGE_TARGET := $(foreach k,$(subst kernel,boot,$(BOARD_KERNEL_BINARIES)), $(PRODUCT_OUT)/$(k).img) |
| 14 | else |
| 15 | BUILT_BOOTIMAGE_TARGET := $(PRODUCT_OUT)/boot.img |
| 16 | endif |
| 17 | |
| 18 | INSTALLED_BOOTIMAGE_TARGET := $(BUILT_BOOTIMAGE_TARGET) |
| 19 | |
| 20 | ifeq ($(PRODUCT_BUILD_RAMDISK_IMAGE),true) |
| 21 | INSTALLED_RAMDISK_TARGET := $(PRODUCT_OUT)/ramdisk.img |
| 22 | endif |
| 23 | ifeq ($(PRODUCT_BUILD_SYSTEM_IMAGE),true) |
| 24 | INSTALLED_SYSTEMIMAGE := $(PRODUCT_OUT)/system.img |
| 25 | endif |
| 26 | ifeq ($(PRODUCT_BUILD_USERDATA_IMAGE),true) |
| 27 | INSTALLED_USERDATAIMAGE_TARGET := $(PRODUCT_OUT)/userdata.img |
| 28 | endif |
| 29 | ifneq ($(TARGET_NO_RECOVERY), true) |
| 30 | INSTALLED_RECOVERYIMAGE_TARGET := $(PRODUCT_OUT)/recovery.img |
| 31 | else |
| 32 | INSTALLED_RECOVERYIMAGE_TARGET := |
| 33 | endif |
| 34 | recovery_ramdisk := $(PRODUCT_OUT)/ramdisk-recovery.img |
| 35 | INSTALLED_USBIMAGE_TARGET := $(PRODUCT_OUT)/usbdisk.img |
| 36 | endif |
| 37 | |
| 38 | #---------------------------------------------------------------------- |
| 39 | # Generate persist image (persist.img) |
| 40 | #---------------------------------------------------------------------- |
| 41 | ifneq ($(strip $(BOARD_PERSISTIMAGE_PARTITION_SIZE)),) |
| 42 | ifneq ($(strip $(TARGET_NO_KERNEL)),true) |
| 43 | |
| 44 | TARGET_OUT_PERSIST := $(PRODUCT_OUT)/persist |
| 45 | |
| 46 | INTERNAL_PERSISTIMAGE_FILES := \ |
| 47 | $(filter $(TARGET_OUT_PERSIST)/%,$(ALL_DEFAULT_INSTALLED_MODULES)) |
| 48 | |
| 49 | INSTALLED_PERSISTIMAGE_TARGET := $(PRODUCT_OUT)/persist.img |
| 50 | |
| 51 | define build-persistimage-target |
| 52 | $(call pretty,"Target persist fs image: $(INSTALLED_PERSISTIMAGE_TARGET)") |
| 53 | @mkdir -p $(TARGET_OUT_PERSIST) |
| 54 | $(hide) PATH=$(HOST_OUT_EXECUTABLES):$${PATH} $(MKEXTUSERIMG) $(TARGET_OUT_PERSIST) $@ ext4 persist $(BOARD_PERSISTIMAGE_PARTITION_SIZE) |
| 55 | $(hide) chmod a+r $@ |
| 56 | $(hide) $(call assert-max-image-size,$@,$(BOARD_PERSISTIMAGE_PARTITION_SIZE)) |
| 57 | endef |
| 58 | |
Bharath | fd20450 | 2022-10-05 09:12:11 +0530 | [diff] [blame] | 59 | ifneq ($(strip $(FP3_SKIP_PERSIST_IMG)),true) |
Bharath | d27ca20 | 2022-10-05 09:11:30 +0530 | [diff] [blame] | 60 | $(INSTALLED_PERSISTIMAGE_TARGET): $(MKEXTUSERIMG) $(MAKE_EXT4FS) $(INTERNAL_PERSISTIMAGE_FILES) |
| 61 | $(build-persistimage-target) |
| 62 | |
| 63 | ALL_DEFAULT_INSTALLED_MODULES += $(INSTALLED_PERSISTIMAGE_TARGET) |
| 64 | ALL_MODULES.$(LOCAL_MODULE).INSTALLED += $(INSTALLED_PERSISTIMAGE_TARGET) |
| 65 | droidcore: $(INSTALLED_PERSISTIMAGE_TARGET) |
| 66 | |
| 67 | .PHONY: persistimage |
| 68 | persistimage: $(INSTALLED_PERSISTIMAGE_TARGET) |
| 69 | |
Bharath | fd20450 | 2022-10-05 09:12:11 +0530 | [diff] [blame] | 70 | endif #end of FP3_SKIP_PERSIST_IMG |
Bharath | d27ca20 | 2022-10-05 09:11:30 +0530 | [diff] [blame] | 71 | endif |
| 72 | endif |
| 73 | |
| 74 | #---------------------------------------------------------------------- |
| 75 | # Generate metadata image (metadata.img) |
| 76 | # As of now this in empty at build and data is runtime generated only, |
| 77 | # so create an empty fs |
| 78 | #---------------------------------------------------------------------- |
| 79 | ifneq ($(strip $(BOARD_METADATAIMAGE_PARTITION_SIZE)),) |
| 80 | |
| 81 | TARGET_OUT_METADATA := $(PRODUCT_OUT)/metadata |
| 82 | |
| 83 | INSTALLED_METADATAIMAGE_TARGET := $(PRODUCT_OUT)/metadata.img |
| 84 | |
| 85 | define build-metadataimage-target |
| 86 | $(call pretty,"Target metadata fs image: $(INSTALLED_METADATAIMAGE_TARGET)") |
| 87 | @mkdir -p $(TARGET_OUT_METADATA) |
| 88 | $(hide)PATH=$(HOST_OUT_EXECUTABLES):$${PATH} $(MKEXTUSERIMG) -s $(TARGET_OUT_METADATA) $@ ext4 metadata $(BOARD_METADATAIMAGE_PARTITION_SIZE) |
| 89 | $(hide) chmod a+r $@ |
| 90 | endef |
| 91 | |
| 92 | $(INSTALLED_METADATAIMAGE_TARGET): $(MKEXTUSERIMG) $(MAKE_EXT4FS) |
| 93 | $(build-metadataimage-target) |
| 94 | |
| 95 | ALL_DEFAULT_INSTALLED_MODULES += $(INSTALLED_METADATAIMAGE_TARGET) |
| 96 | ALL_MODULES.$(LOCAL_MODULE).INSTALLED += $(INSTALLED_METADATAIMAGE_TARGET) |
| 97 | droidcore: $(INSTALLED_METADATAIMAGE_TARGET) |
| 98 | |
| 99 | .PHONY: metadataimage |
| 100 | metadataimage: $(INSTALLED_METADATAIMAGE_TARGET) |
| 101 | |
| 102 | endif |
| 103 | |
| 104 | #---------------------------------------------------------------------- |
| 105 | # Generate device tree overlay image (dtbo.img) |
| 106 | #---------------------------------------------------------------------- |
| 107 | ifneq ($(strip $(TARGET_NO_KERNEL)),true) |
| 108 | ifeq ($(strip $(BOARD_KERNEL_SEPARATED_DTBO)),true) |
| 109 | |
| 110 | MKDTIMG := $(HOST_OUT_EXECUTABLES)/mkdtimg$(HOST_EXECUTABLE_SUFFIX) |
| 111 | |
| 112 | # Most specific paths must come first in possible_dtbo_dirs |
| 113 | possible_dtbo_dirs = $(KERNEL_OUT)/arch/$(TARGET_KERNEL_ARCH)/boot/dts $(KERNEL_OUT)/arch/arm/boot/dts |
| 114 | $(shell mkdir -p $(possible_dtbo_dirs)) |
| 115 | dtbo_dir = $(firstword $(wildcard $(possible_dtbo_dirs))) |
| 116 | dtbo_objs = $(shell find $(dtbo_dir) -name \*.dtbo) |
| 117 | |
| 118 | define build-dtboimage-target |
| 119 | $(call pretty,"Target dtbo image: $(BOARD_PREBUILT_DTBOIMAGE)") |
| 120 | $(hide) $(MKDTIMG) create $@ --page_size=$(BOARD_KERNEL_PAGESIZE) $(dtbo_objs) |
| 121 | $(hide) chmod a+r $@ |
| 122 | endef |
| 123 | |
| 124 | # Definition of BOARD_PREBUILT_DTBOIMAGE is in AndroidBoardCommon.mk |
| 125 | # so as to ensure it is defined well in time to set the dependencies on |
| 126 | # BOARD_PREBUILT_DTBOIMAGE |
| 127 | $(BOARD_PREBUILT_DTBOIMAGE): $(MKDTIMG) $(INSTALLED_KERNEL_TARGET) |
| 128 | $(build-dtboimage-target) |
| 129 | |
| 130 | endif |
| 131 | endif |
| 132 | |
| 133 | #---------------------------------------------------------------------- |
| 134 | # Generate device tree image (dt.img) |
| 135 | #---------------------------------------------------------------------- |
| 136 | ifneq ($(strip $(TARGET_NO_KERNEL)),true) |
| 137 | ifeq ($(strip $(BOARD_KERNEL_SEPARATED_DT)),true) |
| 138 | ifeq ($(strip $(BUILD_TINY_ANDROID)),true) |
| 139 | include device/qcom/common/dtbtool/Android.mk |
| 140 | endif |
| 141 | |
| 142 | DTBTOOL := $(HOST_OUT_EXECUTABLES)/dtbTool$(HOST_EXECUTABLE_SUFFIX) |
| 143 | |
| 144 | INSTALLED_DTIMAGE_TARGET := $(PRODUCT_OUT)/dt.img |
| 145 | |
| 146 | # Most specific paths must come first in possible_dtb_dirs |
| 147 | possible_dtb_dirs = $(KERNEL_OUT)/arch/$(TARGET_KERNEL_ARCH)/boot/dts/qcom/ $(KERNEL_OUT)/arch/arm/boot/dts/qcom/ $(KERNEL_OUT)/arch/$(TARGET_KERNEL_ARCH)/boot/dts/ $(KERNEL_OUT)/arch/arm/boot/dts/ $(KERNEL_OUT)/arch/arm/boot/ |
| 148 | dtb_dir = $(firstword $(wildcard $(possible_dtb_dirs))) |
| 149 | |
| 150 | define build-dtimage-target |
| 151 | $(call pretty,"Target dt image: $(INSTALLED_DTIMAGE_TARGET)") |
| 152 | $(hide) $(DTBTOOL) -o $@ -s $(BOARD_KERNEL_PAGESIZE) -p $(KERNEL_OUT)/scripts/dtc/ $(dtb_dir) |
| 153 | $(hide) chmod a+r $@ |
| 154 | endef |
| 155 | |
| 156 | $(INSTALLED_DTIMAGE_TARGET): $(DTBTOOL) $(INSTALLED_KERNEL_TARGET) |
| 157 | $(build-dtimage-target) |
| 158 | |
| 159 | ALL_DEFAULT_INSTALLED_MODULES += $(INSTALLED_DTIMAGE_TARGET) |
| 160 | ALL_MODULES.$(LOCAL_MODULE).INSTALLED += $(INSTALLED_DTIMAGE_TARGET) |
| 161 | endif |
| 162 | endif |
| 163 | |
| 164 | #--------------------------------------------------------------------- |
| 165 | # Generate usbdisk.img FAT32 image |
| 166 | # Please NOTICE: the valid max size of usbdisk.bin is 10GB |
| 167 | #--------------------------------------------------------------------- |
| 168 | ifneq ($(strip $(BOARD_USBIMAGE_PARTITION_SIZE_KB)),) |
| 169 | define build-usbimage-target |
| 170 | $(hide) mkfs.vfat -n "Internal SD" -F 32 -C $(PRODUCT_OUT)/usbdisk.tmp $(BOARD_USBIMAGE_PARTITION_SIZE_KB) |
| 171 | $(hide) dd if=$(PRODUCT_OUT)/usbdisk.tmp of=$(INSTALLED_USBIMAGE_TARGET) bs=1024 count=20480 |
| 172 | $(hide) rm -f $(PRODUCT_OUT)/usbdisk.tmp |
| 173 | endef |
| 174 | |
| 175 | $(INSTALLED_USBIMAGE_TARGET): |
| 176 | $(build-usbimage-target) |
| 177 | ALL_DEFAULT_INSTALLED_MODULES += $(INSTALLED_USBIMAGE_TARGET) |
| 178 | ALL_MODULES.$(LOCAL_MODULE).INSTALLED += $(INSTALLED_DTIMAGE_TARGET) |
| 179 | endif |
| 180 | |
| 181 | ##################################################################################################### |
| 182 | # support for small user data image |
| 183 | |
| 184 | ifneq ($(strip $(BOARD_SMALL_USERDATAIMAGE_PARTITION_SIZE)),) |
| 185 | # Don't build userdata.img if it's extfs but no partition size |
| 186 | skip_userdata.img := |
| 187 | ifdef INTERNAL_USERIMAGES_EXT_VARIANT |
| 188 | ifndef BOARD_USERDATAIMAGE_PARTITION_SIZE |
| 189 | skip_userdata.img := true |
| 190 | endif |
| 191 | endif |
| 192 | |
| 193 | ifneq ($(skip_userdata.img),true) |
| 194 | |
| 195 | INSTALLED_SMALL_USERDATAIMAGE_TARGET := $(PRODUCT_OUT)/userdata_small.img |
| 196 | |
| 197 | define build-small-userdataimage |
| 198 | @echo "target small userdata image" |
| 199 | $(hide) mkdir -p $(1) |
| 200 | $(hide) $(MKEXTUSERIMG) -s $(TARGET_OUT_DATA) $(2) ext4 data $(BOARD_SMALL_USERDATAIMAGE_PARTITION_SIZE) |
| 201 | $(hide) chmod a+r $@ |
| 202 | $(hide) $(call assert-max-image-size,$@,$(BOARD_SMALL_USERDATAIMAGE_PARTITION_SIZE)) |
| 203 | endef |
| 204 | |
| 205 | |
| 206 | $(INSTALLED_SMALL_USERDATAIMAGE_TARGET): $(MKEXTUSERIMG) $(MAKE_EXT4FS) $(INSTALLED_USERDATAIMAGE_TARGET) |
| 207 | $(hide) $(call build-small-userdataimage,$(PRODUCT_OUT),$(INSTALLED_SMALL_USERDATAIMAGE_TARGET)) |
| 208 | |
| 209 | ALL_DEFAULT_INSTALLED_MODULES += $(INSTALLED_SMALL_USERDATAIMAGE_TARGET) |
| 210 | ALL_MODULES.$(LOCAL_MODULE).INSTALLED += $(INSTALLED_SMALL_USERDATAIMAGE_TARGET) |
| 211 | |
| 212 | endif |
| 213 | |
| 214 | endif |
| 215 | |
| 216 | ################################################################################################### |
| 217 | |
Bharath | d27ca20 | 2022-10-05 09:11:30 +0530 | [diff] [blame] | 218 | .PHONY: kernel |
| 219 | kernel: $(INSTALLED_BOOTIMAGE_TARGET) $(INSTALLED_DTBOIMAGE_TARGET) |
| 220 | |
| 221 | .PHONY: dtboimage |
| 222 | dtboimage: $(INSTALLED_DTBOIMAGE_TARGET) |
| 223 | |
| 224 | .PHONY: recoveryimage |
| 225 | recoveryimage: $(INSTALLED_RECOVERYIMAGE_TARGET) |
| 226 | |
| 227 | .PHONY: kernelclean |
| 228 | kernelclean: |
| 229 | $(hide) make -C $(TARGET_KERNEL_SOURCE) O=$(KERNEL_TO_BUILD_ROOT_OFFSET)$(PRODUCT_OUT)/obj/KERNEL_OBJ/ ARCH=$(TARGET_ARCH) CROSS_COMPILE=arm-eabi- clean |
| 230 | $(hide) make -C $(TARGET_KERNEL_SOURCE) O=$(KERNEL_TO_BUILD_ROOT_OFFSET)$(PRODUCT_OUT)/obj/KERNEL_OBJ/ ARCH=$(TARGET_ARCH) CROSS_COMPILE=arm-eabi- mrproper |
| 231 | $(hide) make -C $(TARGET_KERNEL_SOURCE) O=$(KERNEL_TO_BUILD_ROOT_OFFSET)$(PRODUCT_OUT)/obj/KERNEL_OBJ/ ARCH=$(TARGET_ARCH) CROSS_COMPILE=arm-eabi- distclean |
| 232 | $(hide) if [ -f "$(INSTALLED_BOOTIMAGE_TARGET)" ]; then rm $(INSTALLED_BOOTIMAGE_TARGET); fi |
| 233 | $(hide) if [ -f "$(INSTALLED_BOOTIMAGE_TARGET).nonsecure" ]; then rm $(INSTALLED_BOOTIMAGE_TARGET).nonsecure; fi |
| 234 | $(hide) if [ -f "$(PRODUCT_OUT)/kernel" ]; then rm $(PRODUCT_OUT)/kernel; fi |
| 235 | @echo "kernel cleanup done" |
| 236 | |
Bharath | d27ca20 | 2022-10-05 09:11:30 +0530 | [diff] [blame] | 237 | define board-vendorkernel-ota |
| 238 | $(call pretty,"Processing following kernel modules for vendor: $(BOARD_VENDOR_KERNEL_MODULES)") |
| 239 | $(if $(BOARD_VENDOR_KERNEL_MODULES), \ |
| 240 | $(call build-image-kernel-modules,$(BOARD_VENDOR_KERNEL_MODULES),$(TARGET_OUT_VENDOR),vendor/,$(call intermediates-dir-for,PACKAGING,depmod_vendor))) |
| 241 | endef |
| 242 | |
| 243 | # Adding support for vendor module for OTA |
| 244 | ifeq ($(ENABLE_VENDOR_IMAGE), false) |
| 245 | .PHONY: otavendormod |
| 246 | otavendormod: $(BOARD_VENDOR_KERNEL_MODULES) |
| 247 | $(board-vendorkernel-ota) |
| 248 | |
| 249 | .PHONY: otavendormod-nodeps |
| 250 | otavendormod-nodeps: |
| 251 | @echo "make board-vendorkernel-ota: ignoring dependencies" |
| 252 | $(board-vendorkernel-ota) |
| 253 | |
| 254 | $(BUILT_SYSTEMIMAGE): otavendormod |
| 255 | |
| 256 | endif |