# Rules to generate a zip file that contains google emulator images
# and other files for distribution

ifneq ($(filter sdk_% gcar_%, $(TARGET_PRODUCT)),)
target_notice_file_txt := $(TARGET_OUT_INTERMEDIATES)/NOTICE.txt

emulator_img_source_prop := $(TARGET_OUT_INTERMEDIATES)/source.properties
$(emulator_img_source_prop): $(PRODUCT_SDK_ADDON_SYS_IMG_SOURCE_PROP)
	$(process_prop_template)

ifeq ($(TARGET_ARCH), x86)
# a 32bit guest on a 64bit kernel
EMULATOR_KERNEL_DIST_NAME := kernel-ranchu-64
else
EMULATOR_KERNEL_DIST_NAME := kernel-ranchu
endif # x86

INTERNAL_EMULATOR_PACKAGE_FILES := \
	$(target_notice_file_txt) \
	$(emulator_img_source_prop) \
	$(PRODUCT_OUT)/system/build.prop \
	$(PRODUCT_OUT)/VerifiedBootParams.textproto \
	$(PRODUCT_OUT)/advancedFeatures.ini \
	$(PRODUCT_OUT)/$(EMULATOR_KERNEL_DIST_NAME) \
	$(PRODUCT_OUT)/kernel_cmdline.txt \
	$(PRODUCT_OUT)/encryptionkey.img \

ifneq ($(filter $(TARGET_PRODUCT), sdk_goog3_x86 sdk_goog3_x86_64 sdk_goog3_x86_arm),)
INTERNAL_EMULATOR_PACKAGE_FILES += \
	$(HOST_OUT_EXECUTABLES)/dex2oat \
	$(HOST_OUT_EXECUTABLES)/dex2oatd
endif

ifneq ($(filter $(PRODUCT_DEVICE), emulator_car64_arm64 emulator_car64_x86_64),)
INTERNAL_EMULATOR_PACKAGE_FILES += \
	hardware/interfaces/automotive/vehicle/aidl/emu_metadata/android.hardware.automotive.vehicle-types-meta.json
endif

INTERNAL_EMULATOR_PACKAGE_SOURCE := $(PRODUCT_OUT)/emulator
INTERNAL_EMULATOR_PACKAGE_SOURCE_DST := $(INTERNAL_EMULATOR_PACKAGE_SOURCE)/$(TARGET_CPU_ABI)
INTERNAL_EMULATOR_PACKAGE_TARGET := $(PRODUCT_OUT)/sdk-repo-linux-system-images.zip

INSTALLED_QEMU_SYSTEMIMAGE := $(PRODUCT_OUT)/system-qemu.img
INSTALLED_QEMU_RAMDISKIMAGE := $(PRODUCT_OUT)/ramdisk-qemu.img
INSTALLED_QEMU_VENDORIMAGE := $(PRODUCT_OUT)/vendor-qemu.img

PRODUCT_OUT_DATA_FILES := $(PRODUCT_OUT)/userdata.img # also builds $(PRODUCT_OUT)/data

INTERNAL_EMULATOR_PACKAGE_TARGET_DEPENDENCIES := \
	$(INTERNAL_EMULATOR_PACKAGE_FILES) \
	$(INSTALLED_QEMU_SYSTEMIMAGE) \
	$(INSTALLED_QEMU_RAMDISKIMAGE) \
	$(INSTALLED_QEMU_VENDORIMAGE) \
	$(PRODUCT_OUT_DATA_FILES) \
	$(ACP) $(SOONG_ZIP) \

$(INTERNAL_EMULATOR_PACKAGE_TARGET): $(INTERNAL_EMULATOR_PACKAGE_TARGET_DEPENDENCIES)
	@echo "Package: $@"
	$(hide) rm -rf $(INTERNAL_EMULATOR_PACKAGE_SOURCE_DST)
	$(hide) mkdir -p $(INTERNAL_EMULATOR_PACKAGE_SOURCE_DST)
	$(hide) $(foreach f,$(INTERNAL_EMULATOR_PACKAGE_FILES), $(ACP) $(f) $(INTERNAL_EMULATOR_PACKAGE_SOURCE_DST)/$(notdir $(f));)
	$(hide) $(ACP) -r $(INSTALLED_QEMU_SYSTEMIMAGE) $(INTERNAL_EMULATOR_PACKAGE_SOURCE_DST)/system.img
	$(hide) $(ACP) -r $(INSTALLED_QEMU_RAMDISKIMAGE) $(INTERNAL_EMULATOR_PACKAGE_SOURCE_DST)/ramdisk.img
	$(hide) $(ACP) -r $(INSTALLED_QEMU_VENDORIMAGE) $(INTERNAL_EMULATOR_PACKAGE_SOURCE_DST)/vendor.img
	$(hide) $(ACP) -r $(PRODUCT_OUT)/data $(INTERNAL_EMULATOR_PACKAGE_SOURCE_DST)
	$(hide) $(SOONG_ZIP) -o $@ -C $(INTERNAL_EMULATOR_PACKAGE_SOURCE) -D $(INTERNAL_EMULATOR_PACKAGE_SOURCE_DST)

.PHONY: emu_img_zip
emu_img_zip: $(INTERNAL_EMULATOR_PACKAGE_TARGET)

# TODO(b/361152997): replace goog_emu_imgs with emu_img_zip and retire this target
.PHONY: goog_emu_imgs
goog_emu_imgs: emu_img_zip

# The following rule generates an emulator manifest sdk-repo-sys-img.xml file.
# Enable only when goog_emu_imgs is in MAKECMDGOALS.
-include vendor/auto/embedded/products/packaging/aaos_emulator_bundle_xml.mk

# The following rules generate emu_extra_imgs package. It is similar to
# emu_img_zip, but it does not contain system-qemu.img and vendor-qemu.img. It
# conatins the necessary data to build the qemu images. The package can be
# mixed with generic system, kernel, and system_dlkm images.
EMU_EXTRA_FILES := \
	$(INTERNAL_EMULATOR_PACKAGE_FILES) \
	$(INSTALLED_QEMU_RAMDISKIMAGE) \
	$(PRODUCT_OUT)/system-qemu-config.txt \
	$(PRODUCT_OUT)/misc_info.txt \
	$(PRODUCT_OUT)/vbmeta.img \
	$(foreach p,$(BOARD_SUPER_PARTITION_PARTITION_LIST),$(PRODUCT_OUT)/$(p).img)

EMU_EXTRA_TARGET_DEPENDENCIES := \
	$(EMU_EXTRA_FILES) \
	$(PRODUCT_OUT_DATA_FILES)

EMU_EXTRA_TARGET := $(PRODUCT_OUT)/emu-extra-linux-system-images.zip

$(EMU_EXTRA_TARGET): PRIVATE_PACKAGE_SRC := \
	$(call intermediates-dir-for, PACKAGING, emu_extra_target)

$(EMU_EXTRA_TARGET): $(EMU_EXTRA_TARGET_DEPENDENCIES) $(SOONG_ZIP)
	@echo "Package: $@"
	$(hide) rm -rf $@ $(PRIVATE_PACKAGE_SRC)
	$(hide) mkdir -p $(PRIVATE_PACKAGE_SRC)/$(TARGET_ARCH)/system
	$(hide) $(ACP) $(PRODUCT_OUT)/system/build.prop $(PRIVATE_PACKAGE_SRC)/$(TARGET_ARCH)/system
	$(hide) $(foreach f,$(EMU_EXTRA_FILES), $(ACP) $(f) $(PRIVATE_PACKAGE_SRC)/$(TARGET_ARCH)/$(notdir $(f)) &&) true
	$(hide) $(ACP) -r $(PRODUCT_OUT)/data $(PRIVATE_PACKAGE_SRC)/$(TARGET_ARCH)
	$(SOONG_ZIP) -o $@ -C $(PRIVATE_PACKAGE_SRC) -D $(PRIVATE_PACKAGE_SRC)/$(TARGET_ARCH)

.PHONY: emu_extra_imgs
emu_extra_imgs: $(EMU_EXTRA_TARGET)

$(call dist-for-goals-with-filenametag, emu_extra_imgs, $(EMU_EXTRA_TARGET))
endif
