389bbe45a2
Pre-extracting the zip files are more sustainable for git, so that
objects can be shared if unchanged, rather than the 900MB zip file
changing on every build.
This also has the advantage that we could put an Android.bp file inside
the PDK, and Soong would just pick it up.
Bug: 68767391
Test: Build mini_arm64 PDK with platform.zip
Test: Build mini_arm64 PDK with extracted zip file
Change-Id: I16db030a731aea55b69c1d6e2260dbd70b167544
Merged-In: I16db030a731aea55b69c1d6e2260dbd70b167544
(cherry picked from commit 0663f685c2
)
189 lines
8.2 KiB
Makefile
189 lines
8.2 KiB
Makefile
# This file defines the rule to fuse the platform.zip into the current PDK build.
|
|
PDK_PLATFORM_JAVA_ZIP_JAVA_TARGET_LIB_DIR :=
|
|
PDK_PLATFORM_JAVA_ZIP_JAVA_HOST_LIB_DIR := \
|
|
host/common/obj/JAVA_LIBRARIES/bouncycastle-host_intermediates \
|
|
host/common/obj/JAVA_LIBRARIES/compatibility-host-util_intermediates \
|
|
host/common/obj/JAVA_LIBRARIES/cts-tradefed-harness_intermediates \
|
|
host/common/obj/JAVA_LIBRARIES/hosttestlib_intermediates
|
|
PDK_PLATFORM_JAVA_ZIP_CONTENTS :=
|
|
|
|
ifneq (,$(filter platform-java, $(MAKECMDGOALS))$(PDK_FUSION_PLATFORM_ZIP)$(PDK_FUSION_PLATFORM_DIR))
|
|
# additional items to add to platform.zip for platform-java build
|
|
# For these dirs, add classes.jar and javalib.jar from the dir to platform.zip
|
|
# all paths under out dir
|
|
PDK_PLATFORM_JAVA_ZIP_JAVA_TARGET_LIB_DIR += \
|
|
target/common/obj/JAVA_LIBRARIES/android.test.runner_intermediates \
|
|
target/common/obj/JAVA_LIBRARIES/android.hidl.base-V1.0-java_intermediates \
|
|
target/common/obj/JAVA_LIBRARIES/android.hidl.manager-V1.0-java_intermediates \
|
|
target/common/obj/JAVA_LIBRARIES/android-common_intermediates \
|
|
target/common/obj/JAVA_LIBRARIES/android-ex-camera2_intermediates \
|
|
target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates \
|
|
target/common/obj/JAVA_LIBRARIES/bouncycastle_intermediates \
|
|
target/common/obj/JAVA_LIBRARIES/conscrypt_intermediates \
|
|
target/common/obj/JAVA_LIBRARIES/core-oj_intermediates \
|
|
target/common/obj/JAVA_LIBRARIES/core-libart_intermediates \
|
|
target/common/obj/JAVA_LIBRARIES/legacy-test_intermediates \
|
|
target/common/obj/JAVA_LIBRARIES/legacy-android-test_intermediates \
|
|
target/common/obj/JAVA_LIBRARIES/ext_intermediates \
|
|
target/common/obj/JAVA_LIBRARIES/framework_intermediates \
|
|
target/common/obj/JAVA_LIBRARIES/hwbinder_intermediates \
|
|
target/common/obj/JAVA_LIBRARIES/ims-common_intermediates \
|
|
target/common/obj/JAVA_LIBRARIES/okhttp_intermediates \
|
|
target/common/obj/JAVA_LIBRARIES/telephony-common_intermediates \
|
|
target/common/obj/JAVA_LIBRARIES/voip-common_intermediates \
|
|
|
|
# not java libraries
|
|
PDK_PLATFORM_JAVA_ZIP_CONTENTS += \
|
|
target/common/obj/APPS/framework-res_intermediates/package-export.apk \
|
|
target/common/obj/APPS/framework-res_intermediates/src/R.stamp
|
|
endif # platform-java or FUSION build
|
|
|
|
PDK_PLATFORM_JAVA_ZIP_JAVA_LIB_DIR := \
|
|
$(PDK_PLATFORM_JAVA_ZIP_JAVA_TARGET_LIB_DIR) \
|
|
$(PDK_PLATFORM_JAVA_ZIP_JAVA_HOST_LIB_DIR)
|
|
|
|
PDK_PLATFORM_JAVA_ZIP_CONTENTS += $(foreach lib_dir,$(PDK_PLATFORM_JAVA_ZIP_JAVA_LIB_DIR),\
|
|
$(lib_dir)/classes.jar $(lib_dir)/classes-header.jar \
|
|
$(lib_dir)/javalib.jar $(lib_dir)/classes*.dex \
|
|
$(lib_dir)/classes.dex.toc )
|
|
|
|
# check and override java support level
|
|
ifneq ($(TARGET_BUILD_PDK)$(PDK_FUSION_PLATFORM_ZIP)$(PDK_FUSION_PLATFORM_DIR),)
|
|
ifneq ($(wildcard external/proguard),)
|
|
TARGET_BUILD_JAVA_SUPPORT_LEVEL := sdk
|
|
else # no proguard
|
|
TARGET_BUILD_JAVA_SUPPORT_LEVEL :=
|
|
endif
|
|
# platform support is set after checking platform.zip
|
|
endif # PDK
|
|
|
|
ifneq (,$(PDK_FUSION_PLATFORM_DIR)$(PDK_FUSION_PLATFORM_ZIP))
|
|
|
|
_pdk_fusion_intermediates :=
|
|
_pdk_fusion_stamp :=
|
|
_pdk_fusion_file_list :=
|
|
_pdk_fusion_java_file_list :=
|
|
PDK_FUSION_SYMLINK_STAMP :=
|
|
|
|
ifdef PDK_FUSION_PLATFORM_DIR
|
|
_pdk_fusion_intermediates := $(PDK_FUSION_PLATFORM_DIR)
|
|
_pdk_fusion_file_list := $(sort \
|
|
$(shell cd $(PDK_FUSION_PLATFORM_DIR); find * -type f))
|
|
_pdk_fusion_java_file_list := $(filter target/common/%,$(_pdk_fusion_file_list))
|
|
_pdk_fusion_file_list := $(filter-out target/common/%,$(_pdk_fusion_file_list))
|
|
|
|
PDK_FUSION_SYMLINK_STAMP := $(call intermediates-dir-for, PACKAGING, pdk_fusion)/pdk_symlinks.stamp
|
|
|
|
symlink_list := $(sort \
|
|
$(shell cd $(PDK_FUSION_PLATFORM_DIR); find * -type l))
|
|
$(PDK_FUSION_SYMLINK_STAMP): PRIVATE_SYMLINKS := $(foreach s,$(symlink_list),\
|
|
$(s):$(shell readlink $(PDK_FUSION_PLATFORM_DIR)/$(s)))
|
|
$(PDK_FUSION_SYMLINK_STAMP):
|
|
$(foreach s,$(PRIVATE_SYMLINKS),\
|
|
mkdir -p $(PRODUCT_OUT)/$(dir $(call word-colon,1,$(s))) && \
|
|
ln -sf $(call word-colon,2,$(s)) $(PRODUCT_OUT)/$(call word-colon,1,$(s)) &&) true
|
|
touch $@
|
|
|
|
symlink_list :=
|
|
endif # PDK_FUSION_PLATFORM_DIR
|
|
|
|
ifdef PDK_FUSION_PLATFORM_ZIP
|
|
_pdk_fusion_intermediates := $(call intermediates-dir-for, PACKAGING, pdk_fusion)
|
|
_pdk_fusion_stamp := $(_pdk_fusion_intermediates)/pdk_fusion.stamp
|
|
|
|
_pdk_fusion_file_list := $(shell unzip -Z -1 $(PDK_FUSION_PLATFORM_ZIP) \
|
|
'*[^/]' -x 'target/common/*' 2>/dev/null)
|
|
_pdk_fusion_java_file_list := \
|
|
$(shell unzip -Z -1 $(PDK_FUSION_PLATFORM_ZIP) 'target/common/*' 2>/dev/null)
|
|
_pdk_fusion_files := $(addprefix $(_pdk_fusion_intermediates)/,\
|
|
$(_pdk_fusion_file_list) $(_pdk_fusion_java_file_list))
|
|
|
|
$(_pdk_fusion_stamp) : $(PDK_FUSION_PLATFORM_ZIP)
|
|
@echo "Unzip $(dir $@) <- $<"
|
|
$(hide) rm -rf $(dir $@) && mkdir -p $(dir $@)
|
|
$(hide) unzip -qo $< -d $(dir $@)
|
|
$(call split-long-arguments,-touch,$(_pdk_fusion_files))
|
|
$(hide) touch $@
|
|
|
|
$(_pdk_fusion_files) : $(_pdk_fusion_stamp)
|
|
endif # PDK_FUSION_PLATFORM_ZIP
|
|
|
|
ifneq ($(_pdk_fusion_java_file_list),)
|
|
# This represents whether java build can use platform API or not
|
|
# This should not be used in Android.mk
|
|
TARGET_BUILD_PDK_JAVA_PLATFORM := true
|
|
ifneq ($(TARGET_BUILD_JAVA_SUPPORT_LEVEL),)
|
|
TARGET_BUILD_JAVA_SUPPORT_LEVEL := platform
|
|
endif
|
|
endif
|
|
|
|
# Implicit pattern rules to copy the fusion files to the system image directory.
|
|
# Note that if there is already explicit rule in the build system to generate a file,
|
|
# the pattern rule will be just ignored by make.
|
|
# That's desired by us: we want only absent files from the platform zip package.
|
|
# Copy with the last-modified time preserved, never follow symbolic links.
|
|
$(PRODUCT_OUT)/% : $(_pdk_fusion_intermediates)/% $(_pdk_fusion_stamp)
|
|
@mkdir -p $(dir $@)
|
|
$(hide) rm -rf $@
|
|
$(hide) cp -fpPR $< $@
|
|
|
|
# implicit rules for host java files
|
|
$(HOST_COMMON_OUT_ROOT)/% : $(_pdk_fusion_intermediates)/host/common/% $(_pdk_fusion_stamp)
|
|
@mkdir -p $(dir $@)
|
|
$(hide) cp -fpPR $< $@
|
|
|
|
ifeq (true,$(TARGET_BUILD_PDK_JAVA_PLATFORM))
|
|
PDK_FUSION_OUT_DIR := $(OUT_DIR)
|
|
|
|
define JAVA_dependency_template
|
|
$(call add-dependency,$(PDK_FUSION_OUT_DIR)/$(strip $(1)),\
|
|
$(foreach d,$(filter $(2),$(_pdk_fusion_java_file_list)),$(PDK_FUSION_OUT_DIR)/$(d)))
|
|
endef
|
|
|
|
# needs explicit dependency as package-export.apk is not explicitly pulled
|
|
$(eval $(call JAVA_dependency_template,\
|
|
target/common/obj/APPS/framework-res_intermediates/src/R.stamp,\
|
|
target/common/obj/APPS/framework-res_intermediates/package-export.apk))
|
|
|
|
# javalib.jar should pull classes.jar as classes.jar is not explicitly pulled.
|
|
$(foreach lib_dir,$(PDK_PLATFORM_JAVA_ZIP_JAVA_TARGET_LIB_DIR),\
|
|
$(eval $(call JAVA_dependency_template,$(lib_dir)/javalib.jar,\
|
|
$(lib_dir)/classes.jar)))
|
|
|
|
# implicit rules for all other target files
|
|
$(TARGET_COMMON_OUT_ROOT)/% : $(_pdk_fusion_intermediates)/target/common/% $(_pdk_fusion_stamp)
|
|
@mkdir -p $(dir $@)
|
|
$(hide) cp -fpPR $< $@
|
|
endif # TARGET_BUILD_PDK_JAVA_PLATFORM
|
|
|
|
ALL_PDK_FUSION_FILES := $(addprefix $(PRODUCT_OUT)/, $(_pdk_fusion_file_list))
|
|
|
|
endif # PDK_FUSION_PLATFORM_ZIP || PDK_FUSION_PLATFORM_DIR
|
|
|
|
ifeq ($(TARGET_BUILD_PDK),true)
|
|
$(info PDK TARGET_BUILD_JAVA_SUPPORT_LEVEL $(TARGET_BUILD_JAVA_SUPPORT_LEVEL))
|
|
ifeq ($(TARGET_BUILD_PDK_JAVA_PLATFORM),)
|
|
# SDK used for Java build under PDK
|
|
PDK_BUILD_SDK_VERSION := $(lastword $(TARGET_AVAILABLE_SDK_VERSIONS))
|
|
$(info PDK Build uses SDK $(PDK_BUILD_SDK_VERSION))
|
|
else # PDK_JAVA
|
|
$(info PDK Build uses the current platform API)
|
|
endif # PDK_JAVA
|
|
endif # BUILD_PDK
|
|
|
|
ifneq (,$(filter platform platform-java, $(MAKECMDGOALS))$(filter true,$(TARGET_BUILD_PDK)))
|
|
# files under $(PRODUCT_OUT)/symbols to help debugging.
|
|
# Source not included to PDK due to dependency issue, so provide symbols instead.
|
|
|
|
# We may not be building all of them.
|
|
# The platform.zip just silently ignores the nonexistent ones.
|
|
PDK_SYMBOL_FILES_LIST := \
|
|
system/bin/app_process32 \
|
|
system/bin/app_process64
|
|
|
|
ifneq (,$(PDK_FUSION_PLATFORM_ZIP)$(PDK_FUSION_PLATFORM_DIR))
|
|
# symbols should be explicitly pulled for fusion build
|
|
$(foreach f,$(filter $(PDK_SYMBOL_FILES_LIST), $(_pdk_fusion_file_list)),\
|
|
$(eval $(call add-dependency,$(PRODUCT_OUT)/$(f),$(PRODUCT_OUT)/symbols/$(f))))
|
|
endif # PLATFORM_ZIP || PLATFORM_DIR
|
|
endif # platform.zip/dir build or PDK
|