1# Rules to generate a zip file that contains google emulator images
2# and other files for distribution
3
4ifneq ($(filter sdk_% gcar_%, $(TARGET_PRODUCT)),)
5target_notice_file_txt := $(TARGET_OUT_INTERMEDIATES)/NOTICE.txt
6
7emulator_img_source_prop := $(TARGET_OUT_INTERMEDIATES)/source.properties
8$(emulator_img_source_prop): $(PRODUCT_SDK_ADDON_SYS_IMG_SOURCE_PROP)
9	$(process_prop_template)
10
11ifeq ($(TARGET_ARCH), x86)
12# a 32bit guest on a 64bit kernel
13EMULATOR_KERNEL_DIST_NAME := kernel-ranchu-64
14else
15EMULATOR_KERNEL_DIST_NAME := kernel-ranchu
16endif # x86
17
18INTERNAL_EMULATOR_PACKAGE_FILES := \
19	$(target_notice_file_txt) \
20	$(emulator_img_source_prop) \
21	$(PRODUCT_OUT)/system/build.prop \
22	$(PRODUCT_OUT)/VerifiedBootParams.textproto \
23	$(PRODUCT_OUT)/advancedFeatures.ini \
24	$(PRODUCT_OUT)/$(EMULATOR_KERNEL_DIST_NAME) \
25	$(PRODUCT_OUT)/kernel_cmdline.txt \
26	$(PRODUCT_OUT)/encryptionkey.img \
27
28ifneq ($(filter $(TARGET_PRODUCT), sdk_goog3_x86 sdk_goog3_x86_64 sdk_goog3_x86_arm),)
29INTERNAL_EMULATOR_PACKAGE_FILES += \
30	$(HOST_OUT_EXECUTABLES)/dex2oat \
31	$(HOST_OUT_EXECUTABLES)/dex2oatd
32endif
33
34ifneq ($(filter $(PRODUCT_DEVICE), emulator_car64_arm64 emulator_car64_x86_64),)
35INTERNAL_EMULATOR_PACKAGE_FILES += \
36	hardware/interfaces/automotive/vehicle/aidl/emu_metadata/android.hardware.automotive.vehicle-types-meta.json
37endif
38
39INTERNAL_EMULATOR_PACKAGE_SOURCE := $(PRODUCT_OUT)/emulator
40INTERNAL_EMULATOR_PACKAGE_SOURCE_DST := $(INTERNAL_EMULATOR_PACKAGE_SOURCE)/$(TARGET_CPU_ABI)
41INTERNAL_EMULATOR_PACKAGE_TARGET := $(PRODUCT_OUT)/sdk-repo-linux-system-images.zip
42
43INSTALLED_QEMU_SYSTEMIMAGE := $(PRODUCT_OUT)/system-qemu.img
44INSTALLED_QEMU_RAMDISKIMAGE := $(PRODUCT_OUT)/ramdisk-qemu.img
45INSTALLED_QEMU_VENDORIMAGE := $(PRODUCT_OUT)/vendor-qemu.img
46
47PRODUCT_OUT_DATA_FILES := $(PRODUCT_OUT)/userdata.img # also builds $(PRODUCT_OUT)/data
48
49INTERNAL_EMULATOR_PACKAGE_TARGET_DEPENDENCIES := \
50	$(INTERNAL_EMULATOR_PACKAGE_FILES) \
51	$(INSTALLED_QEMU_SYSTEMIMAGE) \
52	$(INSTALLED_QEMU_RAMDISKIMAGE) \
53	$(INSTALLED_QEMU_VENDORIMAGE) \
54	$(PRODUCT_OUT_DATA_FILES) \
55	$(ACP) $(SOONG_ZIP) \
56
57$(INTERNAL_EMULATOR_PACKAGE_TARGET): $(INTERNAL_EMULATOR_PACKAGE_TARGET_DEPENDENCIES)
58	@echo "Package: $@"
59	$(hide) rm -rf $(INTERNAL_EMULATOR_PACKAGE_SOURCE_DST)
60	$(hide) mkdir -p $(INTERNAL_EMULATOR_PACKAGE_SOURCE_DST)
61	$(hide) $(foreach f,$(INTERNAL_EMULATOR_PACKAGE_FILES), $(ACP) $(f) $(INTERNAL_EMULATOR_PACKAGE_SOURCE_DST)/$(notdir $(f));)
62	$(hide) $(ACP) -r $(INSTALLED_QEMU_SYSTEMIMAGE) $(INTERNAL_EMULATOR_PACKAGE_SOURCE_DST)/system.img
63	$(hide) $(ACP) -r $(INSTALLED_QEMU_RAMDISKIMAGE) $(INTERNAL_EMULATOR_PACKAGE_SOURCE_DST)/ramdisk.img
64	$(hide) $(ACP) -r $(INSTALLED_QEMU_VENDORIMAGE) $(INTERNAL_EMULATOR_PACKAGE_SOURCE_DST)/vendor.img
65	$(hide) $(ACP) -r $(PRODUCT_OUT)/data $(INTERNAL_EMULATOR_PACKAGE_SOURCE_DST)
66	$(hide) $(SOONG_ZIP) -o $@ -C $(INTERNAL_EMULATOR_PACKAGE_SOURCE) -D $(INTERNAL_EMULATOR_PACKAGE_SOURCE_DST)
67
68.PHONY: emu_img_zip
69emu_img_zip: $(INTERNAL_EMULATOR_PACKAGE_TARGET)
70
71# TODO(b/361152997): replace goog_emu_imgs with emu_img_zip and retire this target
72.PHONY: goog_emu_imgs
73goog_emu_imgs: emu_img_zip
74
75# The following rules generate emu_extra_imgs package. It is similar to
76# emu_img_zip, but it does not contain system-qemu.img and vendor-qemu.img. It
77# conatins the necessary data to build the qemu images. The package can be
78# mixed with generic system, kernel, and system_dlkm images.
79EMU_EXTRA_FILES := \
80	$(INTERNAL_EMULATOR_PACKAGE_FILES) \
81	$(INSTALLED_QEMU_RAMDISKIMAGE) \
82	$(PRODUCT_OUT)/system-qemu-config.txt \
83	$(PRODUCT_OUT)/misc_info.txt \
84	$(PRODUCT_OUT)/vbmeta.img \
85	$(foreach p,$(BOARD_SUPER_PARTITION_PARTITION_LIST),$(PRODUCT_OUT)/$(p).img)
86
87EMU_EXTRA_TARGET_DEPENDENCIES := \
88	$(EMU_EXTRA_FILES) \
89	$(PRODUCT_OUT_DATA_FILES)
90
91EMU_EXTRA_TARGET := $(PRODUCT_OUT)/emu-extra-linux-system-images.zip
92
93$(EMU_EXTRA_TARGET): PRIVATE_PACKAGE_SRC := \
94	$(call intermediates-dir-for, PACKAGING, emu_extra_target)
95
96$(EMU_EXTRA_TARGET): $(EMU_EXTRA_TARGET_DEPENDENCIES) $(SOONG_ZIP)
97	@echo "Package: $@"
98	$(hide) rm -rf $@ $(PRIVATE_PACKAGE_SRC)
99	$(hide) mkdir -p $(PRIVATE_PACKAGE_SRC)/$(TARGET_ARCH)/system
100	$(hide) $(ACP) $(PRODUCT_OUT)/system/build.prop $(PRIVATE_PACKAGE_SRC)/$(TARGET_ARCH)/system
101	$(hide) $(foreach f,$(EMU_EXTRA_FILES), $(ACP) $(f) $(PRIVATE_PACKAGE_SRC)/$(TARGET_ARCH)/$(notdir $(f)) &&) true
102	$(hide) $(ACP) -r $(PRODUCT_OUT)/data $(PRIVATE_PACKAGE_SRC)/$(TARGET_ARCH)
103	$(SOONG_ZIP) -o $@ -C $(PRIVATE_PACKAGE_SRC) -D $(PRIVATE_PACKAGE_SRC)/$(TARGET_ARCH)
104
105.PHONY: emu_extra_imgs
106emu_extra_imgs: $(EMU_EXTRA_TARGET)
107
108$(call dist-for-goals-with-filenametag, emu_extra_imgs, $(EMU_EXTRA_TARGET))
109endif
110