# Auto-generate module defitions from platform.zip.
# We use these rules to rebuild .odex files of the .jar/.apk inside the platform.zip.
#

pdk_dexpreopt_config_mk := $(TARGET_OUT_INTERMEDIATES)/pdk_dexpreopt_config.mk

$(shell rm -f $(pdk_dexpreopt_config_mk) && mkdir -p $(dir $(pdk_dexpreopt_config_mk)) && \
        unzip -qo $(PDK_FUSION_PLATFORM_ZIP) -d $(dir $(pdk_dexpreopt_config_mk)) pdk_dexpreopt_config.mk 2>/dev/null)

-include $(pdk_dexpreopt_config_mk)

# Define a PDK prebuilt module that comes from platform.zip.
# Must be called with $(eval)
define prebuilt-pdk-java-module
include $(CLEAR_VARS)
LOCAL_MODULE:=$(1)
LOCAL_MODULE_CLASS:=$(2)
# Use LOCAL_PREBUILT_MODULE_FILE instead of LOCAL_SRC_FILES so we don't need to deal with LOCAL_PATH.
LOCAL_PREBUILT_MODULE_FILE:=$(3)
LOCAL_DEX_PREOPT:=$(4)
LOCAL_MULTILIB:=$(5)
LOCAL_DEX_PREOPT_FLAGS:=$(6)
LOCAL_BUILT_MODULE_STEM:=$(7)
LOCAL_MODULE_SUFFIX:=$(suffix $(7))
LOCAL_PRIVILEGED_MODULE:=$(8)
LOCAL_PROPRIETARY_MODULE:=$(9)
LOCAL_MODULE_TARGET_ARCH:=$(10)
LOCAL_REPLACE_PREBUILT_APK_INSTALLED:=$(11)
LOCAL_CERTIFICATE:=PRESIGNED
include $(BUILD_PREBUILT)

# The source prebuilts are extracted in the rule of _pdk_fusion_stamp.
# Use a touch rule to establish the dependency.
$(3) $(11) : $(_pdk_fusion_stamp)
	$(hide) if [ ! -f $$@ ]; then \
	  echo 'Error: $$@ does not exist. Check your platform.zip.' 1>&2; \
	  exit 1; \
	fi
	$(hide) touch $$@
endef

# We don't have a LOCAL_PATH for the auto-generated modules, so let it be the $(BUILD_SYSTEM).
LOCAL_PATH := $(BUILD_SYSTEM)

##### Java libraries.
# Only set up rules for modules that aren't built from source.
pdk_prebuilt_libraries := $(foreach l,$(PDK.DEXPREOPT.JAVA_LIBRARIES),\
  $(if $(MODULE.TARGET.JAVA_LIBRARIES.$(l)),,$(l)))

$(foreach l,$(pdk_prebuilt_libraries), $(eval \
  $(call prebuilt-pdk-java-module,\
    $(l),\
    JAVA_LIBRARIES,\
    $(_pdk_fusion_intermediates)/$(PDK.DEXPREOPT.$(l).SRC),\
    $(PDK.DEXPREOPT.$(l).DEX_PREOPT),\
    $(PDK.DEXPREOPT.$(l).MULTILIB),\
    $(PDK.DEXPREOPT.$(l).DEX_PREOPT_FLAGS),\
    javalib.jar,\
    )))

###### Apps.
pdk_prebuilt_apps := $(foreach a,$(PDK.DEXPREOPT.APPS),\
  $(if $(MODULE.TARGET.APPS.$(a)),,$(a)))

$(foreach a,$(pdk_prebuilt_apps), $(eval \
  $(call prebuilt-pdk-java-module,\
    $(a),\
    APPS,\
    $(_pdk_fusion_intermediates)/$(PDK.DEXPREOPT.$(a).SRC),\
    $(PDK.DEXPREOPT.$(a).DEX_PREOPT),\
    $(PDK.DEXPREOPT.$(a).MULTILIB),\
    $(PDK.DEXPREOPT.$(a).DEX_PREOPT_FLAGS),\
    package.apk,\
    $(PDK.DEXPREOPT.$(a).PRIVILEGED_MODULE),\
    $(PDK.DEXPREOPT.$(a).PROPRIETARY_MODULE),\
    $(PDK.DEXPREOPT.$(a).TARGET_ARCH),\
    $(_pdk_fusion_intermediates)/$(PDK.DEXPREOPT.$(a).STRIPPED_SRC),\
    )))
