From 83b7bdf765886958e0d746cc839238e277b26b46 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Mon, 14 Jan 2019 14:10:20 -0800 Subject: [PATCH 1/2] Simplify soong_java_prebuilt.mk and soong_app_prebuilt.mk Simplify importing Soong modules into Make by always copying LOCAL_PREBUILT_MODULE_FILE to LOCAL_BUILT_MODULE, which lets Soong pick the final output file instead of trying to figure out which of the various intermediate files should be the output file. Also fixes an issue where hostdex modules could attempt to copy to both $(common_javalib.jar) and $(LOCAL_BUILT_MODULE), which are the same file for host java modules. Test: set compile_dex:true on core.platform.api.stubs. no warnings of target overriding Test: m checkbuild Change-Id: I2e089012436fe8649db82a673d446d1c5a73a731 --- core/soong_app_prebuilt.mk | 90 +++++++++++++++++++------------------ core/soong_java_prebuilt.mk | 75 +++++++++++++------------------ 2 files changed, 78 insertions(+), 87 deletions(-) diff --git a/core/soong_app_prebuilt.mk b/core/soong_app_prebuilt.mk index 91865bcc61..eb201e66ec 100644 --- a/core/soong_app_prebuilt.mk +++ b/core/soong_app_prebuilt.mk @@ -27,51 +27,18 @@ full_classes_jar := $(intermediates.COMMON)/classes.jar full_classes_pre_proguard_jar := $(intermediates.COMMON)/classes-pre-proguard.jar full_classes_header_jar := $(intermediates.COMMON)/classes-header.jar -$(eval $(call copy-one-file,$(LOCAL_SOONG_CLASSES_JAR),$(full_classes_jar))) -$(eval $(call copy-one-file,$(LOCAL_SOONG_CLASSES_JAR),$(full_classes_pre_proguard_jar))) +ifdef LOCAL_SOONG_CLASSES_JAR + $(eval $(call copy-one-file,$(LOCAL_SOONG_CLASSES_JAR),$(full_classes_jar))) + $(eval $(call copy-one-file,$(LOCAL_SOONG_CLASSES_JAR),$(full_classes_pre_proguard_jar))) + $(eval $(call add-dependency,$(LOCAL_BUILT_MODULE),$(full_classes_jar))) -ifdef LOCAL_SOONG_JACOCO_REPORT_CLASSES_JAR - $(eval $(call copy-one-file,$(LOCAL_SOONG_JACOCO_REPORT_CLASSES_JAR),\ - $(intermediates.COMMON)/jacoco-report-classes.jar)) - $(call add-dependency,$(LOCAL_BUILT_MODULE),\ - $(intermediates.COMMON)/jacoco-report-classes.jar) -endif - -ifdef LOCAL_SOONG_PROGUARD_DICT - $(eval $(call copy-one-file,$(LOCAL_SOONG_PROGUARD_DICT),\ - $(intermediates.COMMON)/proguard_dictionary)) - $(call add-dependency,$(LOCAL_BUILT_MODULE),\ - $(intermediates.COMMON)/proguard_dictionary) -endif - -ifneq ($(TURBINE_ENABLED),false) -ifdef LOCAL_SOONG_HEADER_JAR -$(eval $(call copy-one-file,$(LOCAL_SOONG_HEADER_JAR),$(full_classes_header_jar))) -else -$(eval $(call copy-one-file,$(full_classes_jar),$(full_classes_header_jar))) -endif -endif # TURBINE_ENABLED != false - - -ifdef LOCAL_SOONG_RESOURCE_EXPORT_PACKAGE -resource_export_package := $(intermediates.COMMON)/package-export.apk -resource_export_stamp := $(intermediates.COMMON)/src/R.stamp - -$(resource_export_package): PRIVATE_STAMP := $(resource_export_stamp) -$(resource_export_package): .KATI_IMPLICIT_OUTPUTS := $(resource_export_stamp) -$(resource_export_package): $(LOCAL_SOONG_RESOURCE_EXPORT_PACKAGE) - @echo "Copy: $$@" - $(copy-file-to-target) - touch $(PRIVATE_STAMP) -$(call add-dependency,$(LOCAL_BUILT_MODULE),$(resource_export_package)) - -endif # LOCAL_SOONG_RESOURCE_EXPORT_PACKAGE - -java-dex: $(LOCAL_SOONG_DEX_JAR) - - -ifneq ($(BUILD_PLATFORM_ZIP),) - $(eval $(call copy-one-file,$(LOCAL_SOONG_DEX_JAR),$(dir $(LOCAL_BUILT_MODULE))package.dex.apk)) + ifneq ($(TURBINE_ENABLED),false) + ifdef LOCAL_SOONG_HEADER_JAR + $(eval $(call copy-one-file,$(LOCAL_SOONG_HEADER_JAR),$(full_classes_header_jar))) + else + $(eval $(call copy-one-file,$(full_classes_jar),$(full_classes_header_jar))) + endif + endif # TURBINE_ENABLED != false endif # Run veridex on product, product_services and vendor modules. @@ -97,6 +64,41 @@ else $(eval $(call copy-one-file,$(LOCAL_PREBUILT_MODULE_FILE),$(LOCAL_BUILT_MODULE))) endif +ifdef LOCAL_SOONG_JACOCO_REPORT_CLASSES_JAR + $(eval $(call copy-one-file,$(LOCAL_SOONG_JACOCO_REPORT_CLASSES_JAR),\ + $(intermediates.COMMON)/jacoco-report-classes.jar)) + $(call add-dependency,$(LOCAL_BUILT_MODULE),\ + $(intermediates.COMMON)/jacoco-report-classes.jar) +endif + +ifdef LOCAL_SOONG_PROGUARD_DICT + $(eval $(call copy-one-file,$(LOCAL_SOONG_PROGUARD_DICT),\ + $(intermediates.COMMON)/proguard_dictionary)) + $(call add-dependency,$(LOCAL_BUILT_MODULE),\ + $(intermediates.COMMON)/proguard_dictionary) +endif + +ifdef LOCAL_SOONG_RESOURCE_EXPORT_PACKAGE +resource_export_package := $(intermediates.COMMON)/package-export.apk +resource_export_stamp := $(intermediates.COMMON)/src/R.stamp + +$(resource_export_package): PRIVATE_STAMP := $(resource_export_stamp) +$(resource_export_package): .KATI_IMPLICIT_OUTPUTS := $(resource_export_stamp) +$(resource_export_package): $(LOCAL_SOONG_RESOURCE_EXPORT_PACKAGE) + @echo "Copy: $$@" + $(copy-file-to-target) + touch $(PRIVATE_STAMP) +$(call add-dependency,$(LOCAL_BUILT_MODULE),$(resource_export_package)) + +endif # LOCAL_SOONG_RESOURCE_EXPORT_PACKAGE + +java-dex: $(LOCAL_SOONG_DEX_JAR) + + +ifneq ($(BUILD_PLATFORM_ZIP),) + $(eval $(call copy-one-file,$(LOCAL_SOONG_DEX_JAR),$(dir $(LOCAL_BUILT_MODULE))package.dex.apk)) +endif + my_built_installed := $(foreach f,$(LOCAL_SOONG_BUILT_INSTALLED),\ $(call word-colon,1,$(f)):$(PRODUCT_OUT)$(call word-colon,2,$(f))) my_installed := $(call copy-many-files, $(my_built_installed)) diff --git a/core/soong_java_prebuilt.mk b/core/soong_java_prebuilt.mk index 7ccbd68ddf..fb95d0f965 100644 --- a/core/soong_java_prebuilt.mk +++ b/core/soong_java_prebuilt.mk @@ -24,8 +24,21 @@ common_javalib.jar := $(intermediates.COMMON)/javalib.jar hiddenapi_flags_csv := $(intermediates.COMMON)/hiddenapi/flags.csv hiddenapi_metadata_csv := $(intermediates.COMMON)/hiddenapi/greylist.csv -$(eval $(call copy-one-file,$(LOCAL_SOONG_CLASSES_JAR),$(full_classes_jar))) -$(eval $(call copy-one-file,$(LOCAL_SOONG_CLASSES_JAR),$(full_classes_pre_proguard_jar))) +ifdef LOCAL_SOONG_CLASSES_JAR + $(eval $(call copy-one-file,$(LOCAL_SOONG_CLASSES_JAR),$(full_classes_jar))) + $(eval $(call copy-one-file,$(LOCAL_SOONG_CLASSES_JAR),$(full_classes_pre_proguard_jar))) + $(eval $(call add-dependency,$(LOCAL_BUILT_MODULE),$(full_classes_jar))) + + ifneq ($(TURBINE_ENABLED),false) + ifdef LOCAL_SOONG_HEADER_JAR + $(eval $(call copy-one-file,$(LOCAL_SOONG_HEADER_JAR),$(full_classes_header_jar))) + else + $(eval $(call copy-one-file,$(full_classes_jar),$(full_classes_header_jar))) + endif + endif # TURBINE_ENABLED != false +endif + +$(eval $(call copy-one-file,$(LOCAL_PREBUILT_MODULE_FILE),$(LOCAL_BUILT_MODULE))) ifdef LOCAL_SOONG_JACOCO_REPORT_CLASSES_JAR $(eval $(call copy-one-file,$(LOCAL_SOONG_JACOCO_REPORT_CLASSES_JAR),\ @@ -64,14 +77,6 @@ ifdef LOCAL_SOONG_RESOURCE_EXPORT_PACKAGE $(call add-dependency,$(LOCAL_BUILT_MODULE),$(my_static_library_android_manifest)) endif # LOCAL_SOONG_RESOURCE_EXPORT_PACKAGE -ifneq ($(TURBINE_ENABLED),false) -ifdef LOCAL_SOONG_HEADER_JAR -$(eval $(call copy-one-file,$(LOCAL_SOONG_HEADER_JAR),$(full_classes_header_jar))) -else -$(eval $(call copy-one-file,$(full_classes_jar),$(full_classes_header_jar))) -endif -endif # TURBINE_ENABLED != false - ifdef LOCAL_SOONG_DEX_JAR # Hidden API for boot jars @@ -83,36 +88,23 @@ ifdef LOCAL_SOONG_DEX_JAR # java.mk. $(eval $(call hiddenapi-generate-csv,$(full_classes_jar),$(hiddenapi_flags_csv),$(hiddenapi_metadata_csv))) $(eval $(call hiddenapi-copy-soong-jar,$(LOCAL_SOONG_DEX_JAR),$(common_javalib.jar))) - endif - endif - ifneq ($(LOCAL_UNINSTALLABLE_MODULE),true) - ifndef LOCAL_IS_HOST_MODULE - ifneq ($(filter $(LOCAL_MODULE),$(PRODUCT_BOOT_JARS)),) # is_boot_jar - ifeq (true,$(WITH_DEXPREOPT)) - # For libart, the boot jars' odex files are replaced by $(DEFAULT_DEX_PREOPT_INSTALLED_IMAGE). - # We use this installed_odex trick to get boot.art installed. - installed_odex := $(DEFAULT_DEX_PREOPT_INSTALLED_IMAGE) - # Append the odex for the 2nd arch if we have one. - installed_odex += $($(TARGET_2ND_ARCH_VAR_PREFIX)DEFAULT_DEX_PREOPT_INSTALLED_IMAGE) - ALL_MODULES.$(my_register_name).INSTALLED += $(installed_odex) - # Make sure to install the .odex and .vdex when you run "make " - $(my_all_targets): $(installed_odex) - endif - else # !is_boot_jar - $(eval $(call copy-one-file,$(LOCAL_SOONG_DEX_JAR),$(common_javalib.jar))) - endif # is_boot_jar - $(eval $(call add-dependency,$(common_javalib.jar),$(full_classes_jar) $(full_classes_header_jar))) + ifeq (true,$(WITH_DEXPREOPT)) + # For libart, the boot jars' odex files are replaced by $(DEFAULT_DEX_PREOPT_INSTALLED_IMAGE). + # We use this installed_odex trick to get boot.art installed. + installed_odex := $(DEFAULT_DEX_PREOPT_INSTALLED_IMAGE) + # Append the odex for the 2nd arch if we have one. + installed_odex += $($(TARGET_2ND_ARCH_VAR_PREFIX)DEFAULT_DEX_PREOPT_INSTALLED_IMAGE) + ALL_MODULES.$(my_register_name).INSTALLED += $(installed_odex) + # Make sure to install the .odex and .vdex when you run "make " + $(my_all_targets): $(installed_odex) + endif + else # !is_boot_jar + $(eval $(call copy-one-file,$(LOCAL_SOONG_DEX_JAR),$(common_javalib.jar))) + endif # is_boot_jar - $(eval $(call copy-one-file,$(LOCAL_PREBUILT_MODULE_FILE),$(LOCAL_BUILT_MODULE))) - $(eval $(call add-dependency,$(LOCAL_BUILT_MODULE),$(common_javalib.jar))) - else # LOCAL_IS_HOST_MODULE - $(eval $(call copy-one-file,$(LOCAL_SOONG_DEX_JAR),$(LOCAL_BUILT_MODULE))) - $(eval $(call add-dependency,$(LOCAL_BUILT_MODULE),$(full_classes_jar) $(full_classes_header_jar))) - endif - - java-dex : $(LOCAL_BUILT_MODULE) - else # LOCAL_UNINSTALLABLE_MODULE + $(eval $(call add-dependency,$(LOCAL_BUILT_MODULE),$(common_javalib.jar))) + $(eval $(call add-dependency,$(common_javalib.jar),$(full_classes_jar) $(full_classes_header_jar))) ifneq ($(filter $(LOCAL_MODULE),$(HIDDENAPI_EXTRA_APP_USAGE_JARS)),) # Derive greylist from classes.jar. @@ -121,18 +113,15 @@ ifdef LOCAL_SOONG_DEX_JAR # java.mk. $(eval $(call hiddenapi-generate-csv,$(full_classes_jar),$(hiddenapi_flags_csv),$(hiddenapi_metadata_csv))) endif + endif - $(eval $(call copy-one-file,$(full_classes_jar),$(LOCAL_BUILT_MODULE))) - $(eval $(call copy-one-file,$(LOCAL_SOONG_DEX_JAR),$(common_javalib.jar))) - java-dex : $(common_javalib.jar) - endif # LOCAL_UNINSTALLABLE_MODULE + java-dex : $(LOCAL_BUILT_MODULE) else # LOCAL_SOONG_DEX_JAR ifndef LOCAL_UNINSTALLABLE_MODULE ifndef LOCAL_IS_HOST_MODULE $(call pretty-error,Installable device module must have LOCAL_SOONG_DEX_JAR set) endif endif - $(eval $(call copy-one-file,$(full_classes_jar),$(LOCAL_BUILT_MODULE))) endif # LOCAL_SOONG_DEX_JAR my_built_installed := $(foreach f,$(LOCAL_SOONG_BUILT_INSTALLED),\ From 49adea3bd897bd51d9d77f157655bce73794f8e7 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Wed, 16 Jan 2019 15:13:48 -0800 Subject: [PATCH 2/2] Move hiddenapi to Soong Perform hiddenapi CSV generation and dex encoding for Soong modules in Soong. This fixes an issue where dexpreopting was happening on a different jar than was being installed. Bug: 122856783 Test: m checkbuild Change-Id: I24a235c63ff62fed7e1af9f2fd17e55b0c1598a5 --- core/config.mk | 2 -- core/definitions.mk | 23 ----------------------- core/dex_preopt.mk | 12 ++++++++++-- core/soong_config.mk | 4 ++++ core/soong_java_prebuilt.mk | 19 +------------------ 5 files changed, 15 insertions(+), 45 deletions(-) diff --git a/core/config.mk b/core/config.mk index a3be194417..ab9f4c332e 100644 --- a/core/config.mk +++ b/core/config.mk @@ -726,8 +726,6 @@ BRILLO_UPDATE_PAYLOAD := $(HOST_OUT_EXECUTABLES)/brillo_update_payload DEXDUMP := $(HOST_OUT_EXECUTABLES)/dexdump2$(BUILD_EXECUTABLE_SUFFIX) PROFMAN := $(HOST_OUT_EXECUTABLES)/profman -HIDDENAPI := $(HOST_OUT_EXECUTABLES)/hiddenapi -CLASS2GREYLIST := $(HOST_OUT_EXECUTABLES)/class2greylist FINDBUGS_DIR := external/owasp/sanitizer/tools/findbugs/bin FINDBUGS := $(FINDBUGS_DIR)/findbugs diff --git a/core/definitions.mk b/core/definitions.mk index d5c7b91133..3e7da0ded2 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -2714,29 +2714,6 @@ $(INTERNAL_PLATFORM_HIDDENAPI_GREYLIST_METADATA): \ endif endef -# File names for intermediate dex files of `hiddenapi-copy-soong-jar`. -hiddenapi-soong-input-dex = $(dir $(1))/hiddenapi/dex-input/classes.dex -hiddenapi-soong-output-dex = $(dir $(1))/hiddenapi/dex-output/classes.dex - -# Decompress a JAR with dex files, invoke $(HIDDENAPI) on them and compress again. -define hiddenapi-copy-soong-jar -$(call hiddenapi-soong-input-dex,$(2)): $(1) - @rm -rf `dirname $$@` - @mkdir -p `dirname $$@` - unzip -o -q $(1) 'classes*.dex' -d `dirname $$@` - find `dirname $$@` -maxdepth 1 -name 'classes*.dex' | xargs touch - -$(call hiddenapi-copy-dex-files,\ - $(call hiddenapi-soong-input-dex,$(2)),\ - $(call hiddenapi-soong-output-dex,$(2))) - -$(2): OUTPUT_DIR := $(dir $(call hiddenapi-soong-output-dex,$(2))) -$(2): OUTPUT_JAR := $(dir $(call hiddenapi-soong-output-dex,$(2)))classes.jar -$(2): $(1) $(call hiddenapi-soong-output-dex,$(2)) | $(SOONG_ZIP) $(MERGE_ZIPS) - $(SOONG_ZIP) -o $${OUTPUT_JAR} -C $${OUTPUT_DIR} -f "$${OUTPUT_DIR}/classes*.dex" - $(MERGE_ZIPS) -D -zipToNotStrip $${OUTPUT_JAR} -stripFile "classes*.dex" $(2) $${OUTPUT_JAR} $(1) -endef - ########################################################### ## Commands to call R8 diff --git a/core/dex_preopt.mk b/core/dex_preopt.mk index 4d7d11cc67..b3c0216574 100644 --- a/core/dex_preopt.mk +++ b/core/dex_preopt.mk @@ -61,7 +61,10 @@ ifdef PRODUCT_HIDDENAPI_STUBS_TEST endif # Singleton rule which applies $(HIDDENAPI) on all boot class path dex files. -# Inputs are filled with `hiddenapi-copy-dex-files` rules. +# Additional inputs are filled with `hiddenapi-copy-dex-files` rules. +$(INTERNAL_PLATFORM_HIDDENAPI_PRIVATE_LIST): $(SOONG_HIDDENAPI_DEX_INPUTS) +$(INTERNAL_PLATFORM_HIDDENAPI_PRIVATE_LIST): PRIVATE_DEX_INPUTS := $(SOONG_HIDDENAPI_DEX_INPUTS) + .KATI_RESTAT: \ $(INTERNAL_PLATFORM_HIDDENAPI_PRIVATE_LIST) \ $(INTERNAL_PLATFORM_HIDDENAPI_PUBLIC_LIST) @@ -83,7 +86,12 @@ $(INTERNAL_PLATFORM_HIDDENAPI_PRIVATE_LIST): $(HIDDENAPI) $(HIDDENAPI_STUBS) \ $(call commit-change-for-toc,$(INTERNAL_PLATFORM_HIDDENAPI_PUBLIC_LIST)) $(call commit-change-for-toc,$(INTERNAL_PLATFORM_HIDDENAPI_PRIVATE_LIST)) - +# Inputs to singleton rules located in frameworks/base +# Additional inputs are filled with `hiddenapi-generate-csv` +$(INTERNAL_PLATFORM_HIDDENAPI_FLAGS): $(SOONG_HIDDENAPI_FLAGS) +$(INTERNAL_PLATFORM_HIDDENAPI_FLAGS): PRIVATE_FLAGS_INPUTS := $(SOONG_HIDDENAPI_FLAGS) +$(INTERNAL_PLATFORM_HIDDENAPI_GREYLIST_METADATA): $(SOONG_HIDDENAPI_GREYLIST_METADATA) +$(INTERNAL_PLATFORM_HIDDENAPI_GREYLIST_METADATA): PRIVATE_METADATA_INPUTS := $(SOONG_HIDDENAPI_GREYLIST_METADATA) ifeq ($(PRODUCT_DIST_BOOT_AND_SYSTEM_JARS),true) boot_profile_jars_zip := $(PRODUCT_OUT)/boot_profile_jars.zip diff --git a/core/soong_config.mk b/core/soong_config.mk index 2363f2b167..1b6b9d3f4e 100644 --- a/core/soong_config.mk +++ b/core/soong_config.mk @@ -152,6 +152,10 @@ $(call add_json_list, ManifestPackageNameOverrides, $(PRODUCT_MANIFEST_PACK $(call add_json_bool, EnforceSystemCertificate, $(ENFORCE_SYSTEM_CERTIFICATE)) $(call add_json_list, EnforceSystemCertificateWhitelist, $(ENFORCE_SYSTEM_CERTIFICATE_WHITELIST)) +$(call add_json_str, HiddenAPIPublicList, $(INTERNAL_PLATFORM_HIDDENAPI_PUBLIC_LIST)) +$(call add_json_str, HiddenAPIFlags, $(INTERNAL_PLATFORM_HIDDENAPI_FLAGS)) +$(call add_json_list, HiddenAPIExtraAppUsageJars, $(HIDDENAPI_EXTRA_APP_USAGE_JARS)) + $(call add_json_map, VendorVars) $(foreach namespace,$(SOONG_CONFIG_NAMESPACES),\ $(call add_json_map, $(namespace))\ diff --git a/core/soong_java_prebuilt.mk b/core/soong_java_prebuilt.mk index fb95d0f965..ad1bfce815 100644 --- a/core/soong_java_prebuilt.mk +++ b/core/soong_java_prebuilt.mk @@ -79,16 +79,8 @@ endif # LOCAL_SOONG_RESOURCE_EXPORT_PACKAGE ifdef LOCAL_SOONG_DEX_JAR - # Hidden API for boot jars ifndef LOCAL_IS_HOST_MODULE ifneq ($(filter $(LOCAL_MODULE),$(PRODUCT_BOOT_JARS)),) # is_boot_jar - # Derive greylist from classes.jar. - # We use full_classes_jar here, which is the post-proguard jar (on the basis that we also - # have a full_classes_pre_proguard_jar). This is consistent with the equivalent code in - # java.mk. - $(eval $(call hiddenapi-generate-csv,$(full_classes_jar),$(hiddenapi_flags_csv),$(hiddenapi_metadata_csv))) - $(eval $(call hiddenapi-copy-soong-jar,$(LOCAL_SOONG_DEX_JAR),$(common_javalib.jar))) - ifeq (true,$(WITH_DEXPREOPT)) # For libart, the boot jars' odex files are replaced by $(DEFAULT_DEX_PREOPT_INSTALLED_IMAGE). # We use this installed_odex trick to get boot.art installed. @@ -99,20 +91,11 @@ ifdef LOCAL_SOONG_DEX_JAR # Make sure to install the .odex and .vdex when you run "make " $(my_all_targets): $(installed_odex) endif - else # !is_boot_jar - $(eval $(call copy-one-file,$(LOCAL_SOONG_DEX_JAR),$(common_javalib.jar))) endif # is_boot_jar + $(eval $(call copy-one-file,$(LOCAL_SOONG_DEX_JAR),$(common_javalib.jar))) $(eval $(call add-dependency,$(LOCAL_BUILT_MODULE),$(common_javalib.jar))) $(eval $(call add-dependency,$(common_javalib.jar),$(full_classes_jar) $(full_classes_header_jar))) - - ifneq ($(filter $(LOCAL_MODULE),$(HIDDENAPI_EXTRA_APP_USAGE_JARS)),) - # Derive greylist from classes.jar. - # We use full_classes_jar here, which is the post-proguard jar (on the basis that we also - # have a full_classes_pre_proguard_jar). This is consistent with the equivalent code in - # java.mk. - $(eval $(call hiddenapi-generate-csv,$(full_classes_jar),$(hiddenapi_flags_csv),$(hiddenapi_metadata_csv))) - endif endif java-dex : $(LOCAL_BUILT_MODULE)