diff options
| -rw-r--r-- | CleanSpec.mk | 3 | ||||
| -rw-r--r-- | core/base_rules.mk | 14 | ||||
| -rw-r--r-- | core/cleanbuild.mk | 40 | ||||
| -rw-r--r-- | core/config_sanitizers.mk | 6 | ||||
| -rw-r--r-- | core/dex_preopt_libart.mk | 1 | ||||
| -rw-r--r-- | core/dex_preopt_odex_install.mk | 12 | ||||
| -rw-r--r-- | core/main.mk | 9 | ||||
| -rw-r--r-- | core/package_internal.mk | 4 | ||||
| -rw-r--r-- | core/product.mk | 3 | ||||
| -rw-r--r-- | core/setup_one_odex.mk | 11 | ||||
| -rw-r--r-- | core/tasks/tools/package-modules.mk | 12 | ||||
| -rw-r--r-- | envsetup.sh | 6 | ||||
| -rwxr-xr-x | tools/fat16copy.py | 11 | ||||
| -rw-r--r-- | tools/releasetools/blockimgdiff.py | 28 |
14 files changed, 115 insertions, 45 deletions
diff --git a/CleanSpec.mk b/CleanSpec.mk index bbeac6ca09..b9f6e1390b 100644 --- a/CleanSpec.mk +++ b/CleanSpec.mk @@ -395,6 +395,9 @@ $(call add-clean-step, rm -rf $(TARGET_OUT_INTERMEDIATES)/APPS/*/package-res.apk $(call add-clean-step, rm -rf $(TARGET_OUT_COMMON_INTERMEDIATES)/APPS/*_intermediates/src) $(call add-clean-step, rm -rf $(TARGET_OUT_COMMON_INTERMEDIATES)/JAVA_LIBRARIES/*_intermediates/src) +$(call add-clean-step, rm -rf $(HOST_OUT_TESTCASES)) +$(call add-clean-step, rm -rf $(TARGET_OUT_TESTCASES)) + # ************************************************ # NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST # ************************************************ diff --git a/core/base_rules.mk b/core/base_rules.mk index a7c9ad2fbf..1f55eaef32 100644 --- a/core/base_rules.mk +++ b/core/base_rules.mk @@ -424,10 +424,13 @@ ifneq ($(words $(LOCAL_COMPATIBILITY_SUITE)),1) $(error $(LOCAL_PATH):$(LOCAL_MODULE) LOCAL_COMPATIBILITY_SUITE can be only one name) endif +# Copy this module into its own subdirectory in the common testcases output directory. +my_testcases_subdir := $($(my_prefix)OUT_TESTCASES)/$(LOCAL_MODULE) + # The module itself. my_compat_dist := \ $(LOCAL_BUILT_MODULE):$(COMPATIBILITY_TESTCASES_OUT_$(LOCAL_COMPATIBILITY_SUITE))/$(my_installed_module_stem) \ - $(LOCAL_BUILT_MODULE):$($(my_prefix)OUT_TESTCASES)/$(my_installed_module_stem) + $(LOCAL_BUILT_MODULE):$(my_testcases_subdir)/$(my_installed_module_stem) # Make sure we only add the files once for multilib modules. ifndef $(my_prefix)$(LOCAL_MODULE_CLASS)_$(LOCAL_MODULE)_compat_files @@ -439,20 +442,20 @@ my_compat_dist += $(foreach f, $(LOCAL_COMPATIBILITY_SUPPORT_FILES),\ $(eval s := $(word 1,$(p)))\ $(eval n := $(or $(word 2,$(p)),$(notdir $(word 1, $(p))))) \ $(eval d := $(COMPATIBILITY_TESTCASES_OUT_$(LOCAL_COMPATIBILITY_SUITE))/$(n)) \ - $(s):$(d) $(s):$($(my_prefix)OUT_TESTCASES)/$(n)) + $(s):$(d) $(s):$(my_testcases_subdir)/$(n)) ifneq (,$(wildcard $(LOCAL_PATH)/AndroidTest.xml)) my_compat_dist += \ $(LOCAL_PATH)/AndroidTest.xml:$(COMPATIBILITY_TESTCASES_OUT_$(LOCAL_COMPATIBILITY_SUITE))/$(LOCAL_MODULE).config my_compat_dist += \ - $(LOCAL_PATH)/AndroidTest.xml:$($(my_prefix)OUT_TESTCASES)/$(LOCAL_MODULE).config + $(LOCAL_PATH)/AndroidTest.xml:$(my_testcases_subdir)/$(LOCAL_MODULE).config endif ifneq (,$(wildcard $(LOCAL_PATH)/DynamicConfig.xml)) my_compat_dist += \ $(LOCAL_PATH)/DynamicConfig.xml:$(COMPATIBILITY_TESTCASES_OUT_$(LOCAL_COMPATIBILITY_SUITE))/$(LOCAL_MODULE).dynamic my_compat_dist += \ - $(LOCAL_PATH)/DynamicConfig.xml:$($(my_prefix)OUT_TESTCASES)/$(LOCAL_MODULE).dynamic + $(LOCAL_PATH)/DynamicConfig.xml:$(my_testcases_subdir)/$(LOCAL_MODULE).dynamic endif endif # $(my_prefix)$(LOCAL_MODULE_CLASS)_$(LOCAL_MODULE)_compat_files @@ -534,6 +537,9 @@ my_required_modules += $(LOCAL_REQUIRED_MODULES_$($(my_prefix)OS)) endif ALL_MODULES.$(my_register_name).REQUIRED := \ $(strip $(ALL_MODULES.$(my_register_name).REQUIRED) $(my_required_modules)) +ALL_MODULES.$(my_register_name).EXPLICITLY_REQUIRED := \ + $(strip $(ALL_MODULES.$(my_register_name).EXPLICITLY_REQUIRED)\ + $(my_required_modules)) ALL_MODULES.$(my_register_name).EVENT_LOG_TAGS := \ $(ALL_MODULES.$(my_register_name).EVENT_LOG_TAGS) $(event_log_tags) ALL_MODULES.$(my_register_name).MAKEFILE := \ diff --git a/core/cleanbuild.mk b/core/cleanbuild.mk index 76f4613bec..22b966494f 100644 --- a/core/cleanbuild.mk +++ b/core/cleanbuild.mk @@ -194,22 +194,33 @@ current_build_config := # installclean logic # -# The files/dirs to delete during an installclean. This includes the -# non-common APPS directory, which may contain the wrong resources. +# The files/dirs to delete during an installclean. # -# Deletes all of the files that change between different build types, -# like "make user" vs. "make sdk". This lets you work with different -# build types without having to do a full clean each time. E.g.: +# Deletes all of the installed files -- the intent is to remove files +# that may no longer be installed, either because the user previously +# installed them, or they were previously installed by default but no +# longer are. # -# $ make -j8 all -# $ make installclean -# $ make -j8 user -# $ make installclean -# $ make -j8 sdk +# This is faster than a full clean, since we're not deleting the +# intermediates. Instead of recompiling, we can just copy the results. # +# Host bin, frameworks, and lib* are intentionally omitted, since +# otherwise we'd have to rebuild any generated files created with those +# tools. installclean_files := \ $(HOST_OUT)/obj/NOTICE_FILES \ + $(HOST_OUT)/obj/PACKAGING \ + $(HOST_OUT)/coverage \ + $(HOST_OUT)/cts \ + $(HOST_OUT)/nativetest* \ $(HOST_OUT)/sdk \ + $(HOST_OUT)/sdk_addon \ + $(HOST_OUT)/testcases \ + $(HOST_OUT)/vts \ + $(HOST_CROSS_OUT)/bin \ + $(HOST_CROSS_OUT)/coverage \ + $(HOST_CROSS_OUT)/lib* \ + $(HOST_CROSS_OUT)/nativetest* \ $(PRODUCT_OUT)/*.img \ $(PRODUCT_OUT)/*.ini \ $(PRODUCT_OUT)/*.txt \ @@ -226,7 +237,14 @@ installclean_files := \ $(PRODUCT_OUT)/system_other \ $(PRODUCT_OUT)/vendor \ $(PRODUCT_OUT)/oem \ - $(PRODUCT_OUT)/obj/FAKE + $(PRODUCT_OUT)/obj/FAKE \ + $(PRODUCT_OUT)/breakpad \ + $(PRODUCT_OUT)/cache \ + $(PRODUCT_OUT)/coverage \ + $(PRODUCT_OUT)/installer \ + $(PRODUCT_OUT)/odm \ + $(PRODUCT_OUT)/sysloader \ + $(PRODUCT_OUT)/testcases \ # The files/dirs to delete during a dataclean, which removes any files # in the staging and emulator data partitions. diff --git a/core/config_sanitizers.mk b/core/config_sanitizers.mk index 5eaf7b1455..57a7993bd9 100644 --- a/core/config_sanitizers.mk +++ b/core/config_sanitizers.mk @@ -68,6 +68,12 @@ ifeq ($(strip $(ENABLE_CFI)),) my_sanitize_diag := $(filter-out cfi,$(my_sanitize_diag)) endif +# Disable CFI for arm32 (b/35157333). +ifneq ($(filter arm,$(TARGET_$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH)),) + my_sanitize := $(filter-out cfi,$(my_sanitize)) + my_sanitize_diag := $(filter-out cfi,$(my_sanitize_diag)) +endif + # CFI needs gold linker, and mips toolchain does not have one. ifneq ($(filter mips mips64,$(TARGET_$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH)),) my_sanitize := $(filter-out cfi,$(my_sanitize)) diff --git a/core/dex_preopt_libart.mk b/core/dex_preopt_libart.mk index 3cff9c81c1..41e5e87b5e 100644 --- a/core/dex_preopt_libart.mk +++ b/core/dex_preopt_libart.mk @@ -124,5 +124,6 @@ $(hide) ANDROID_LOG_TAGS="*:e" $(DEX2OAT) \ --abort-on-hard-verifier-error \ --no-inline-from=core-oj.jar \ $(PRIVATE_DEX_PREOPT_FLAGS) \ + $(PRIVATE_ART_FILE_PREOPT_FLAGS) \ $(GLOBAL_DEXPREOPT_FLAGS) endef diff --git a/core/dex_preopt_odex_install.mk b/core/dex_preopt_odex_install.mk index 52a67fee7c..9a15706bd5 100644 --- a/core/dex_preopt_odex_install.mk +++ b/core/dex_preopt_odex_install.mk @@ -50,10 +50,14 @@ endif built_odex := built_vdex := +built_art := installed_odex := installed_vdex := +installed_art := built_installed_odex := built_installed_vdex := +built_installed_art := + ifdef LOCAL_DEX_PREOPT dexpreopt_boot_jar_module := $(filter $(DEXPREOPT_BOOT_JARS_MODULES),$(LOCAL_MODULE)) ifdef dexpreopt_boot_jar_module @@ -103,8 +107,10 @@ endif # boot jar built_odex := $(strip $(built_odex)) built_vdex := $(strip $(built_vdex)) +built_art := $(strip $(built_art)) installed_odex := $(strip $(installed_odex)) installed_vdex := $(strip $(installed_vdex)) +installed_art := $(strip $(installed_art)) ifdef built_odex ifndef LOCAL_DEX_PREOPT_FLAGS @@ -113,16 +119,18 @@ ifndef LOCAL_DEX_PREOPT_FLAGS LOCAL_DEX_PREOPT_FLAGS := $(PRODUCT_DEX_PREOPT_DEFAULT_FLAGS) endif endif - $(built_odex): PRIVATE_DEX_PREOPT_FLAGS := $(LOCAL_DEX_PREOPT_FLAGS) $(built_vdex): $(built_odex) +$(built_art): $(built_odex) endif # Add the installed_odex to the list of installed files for this module. ALL_MODULES.$(my_register_name).INSTALLED += $(installed_odex) ALL_MODULES.$(my_register_name).INSTALLED += $(installed_vdex) +ALL_MODULES.$(my_register_name).INSTALLED += $(installed_art) ALL_MODULES.$(my_register_name).BUILT_INSTALLED += $(built_installed_odex) ALL_MODULES.$(my_register_name).BUILT_INSTALLED += $(built_installed_vdex) +ALL_MODULES.$(my_register_name).BUILT_INSTALLED += $(built_installed_art) # Record dex-preopt config. DEXPREOPT.$(LOCAL_MODULE).DEX_PREOPT := $(LOCAL_DEX_PREOPT) @@ -138,6 +146,6 @@ DEXPREOPT.MODULES.$(LOCAL_MODULE_CLASS) := $(sort \ # Make sure to install the .odex and .vdex when you run "make <module_name>" -$(my_all_targets): $(installed_odex) $(installed_vdex) +$(my_all_targets): $(installed_odex) $(installed_vdex) $(installed_art) endif # LOCAL_DEX_PREOPT diff --git a/core/main.mk b/core/main.mk index cca0d214b7..dff0163da3 100644 --- a/core/main.mk +++ b/core/main.mk @@ -1078,15 +1078,6 @@ tests : host-tests target-tests # Phony target to run all java compilations that use javac instead of jack. .PHONY: javac-check -# To catch more build breakage, check build tests modules in eng and userdebug builds. -ifneq ($(ANDROID_NO_TEST_CHECK),true) -ifneq ($(TARGET_BUILD_PDK),true) -ifneq ($(filter eng userdebug,$(TARGET_BUILD_VARIANT)),) -droidcore : target-tests host-tests -endif -endif -endif - ifneq (,$(filter samplecode, $(MAKECMDGOALS))) .PHONY: samplecode sample_MODULES := $(sort $(call get-tagged-modules,samples)) diff --git a/core/package_internal.mk b/core/package_internal.mk index f5f58618d5..694716a969 100644 --- a/core/package_internal.mk +++ b/core/package_internal.mk @@ -585,8 +585,8 @@ ifdef LOCAL_COMPATIBILITY_SUITE cts_testcase_file := $(foreach s,$(my_split_suffixes),$(COMPATIBILITY_TESTCASES_OUT_$(LOCAL_COMPATIBILITY_SUITE))/$(LOCAL_MODULE)_$(s).apk) $(cts_testcase_file) : $(COMPATIBILITY_TESTCASES_OUT_$(LOCAL_COMPATIBILITY_SUITE))/$(LOCAL_MODULE)_%.apk : $(built_module_path)/package_%.apk | $(ACP) $(copy-file-to-new-target) -common_testcase_file := $(foreach s,$(my_split_suffixes),$($(my_prefix)OUT_TESTCASES)/$(LOCAL_MODULE)_$(s).apk) -$(common_testcase_file) : $($(my_prefix)OUT_TESTCASES)/$(LOCAL_MODULE)_%.apk : $(built_module_path)/package_%.apk +common_testcase_file := $(foreach s,$(my_split_suffixes),$($(my_prefix)OUT_TESTCASES)/$(LOCAL_MODULE)/$(LOCAL_MODULE)_$(s).apk) +$(common_testcase_file) : $($(my_prefix)OUT_TESTCASES)/$(LOCAL_MODULE)/$(LOCAL_MODULE)_%.apk : $(built_module_path)/package_%.apk $(copy-file-to-new-target) COMPATIBILITY.$(LOCAL_COMPATIBILITY_SUITE).FILES := \ diff --git a/core/product.mk b/core/product.mk index 93d42fd1f6..7d7c68b617 100644 --- a/core/product.mk +++ b/core/product.mk @@ -289,7 +289,8 @@ _product_stash_var_list += \ _product_stash_var_list += \ DEFAULT_SYSTEM_DEV_CERTIFICATE \ WITH_DEXPREOPT \ - WITH_DEXPREOPT_BOOT_IMG_ONLY + WITH_DEXPREOPT_BOOT_IMG_ONLY \ + WITH_DEXPREOPT_APP_IMAGE # # Mark the variables in _product_stash_var_list as readonly diff --git a/core/setup_one_odex.mk b/core/setup_one_odex.mk index 37aeb607ea..0afc5b7b4f 100644 --- a/core/setup_one_odex.mk +++ b/core/setup_one_odex.mk @@ -36,6 +36,17 @@ my_installed_odex := $(call get-odex-installed-file-path,$($(my_2nd_arch_prefix) my_built_vdex := $(patsubst %.odex,%.vdex,$(my_built_odex)) my_installed_vdex := $(patsubst %.odex,%.vdex,$(my_installed_odex)) +my_installed_art := $(patsubst %.odex,%.art,$(my_installed_odex)) + +ifeq (true,$(WITH_DEXPREOPT_APP_IMAGE)) +my_built_art := $(patsubst %.odex,%.art,$(my_built_odex)) +$(my_built_odex): PRIVATE_ART_FILE_PREOPT_FLAGS := --app-image-file=$(my_built_art) \ + --image-format=lz4 +$(eval $(call copy-one-file,$(my_built_art),$(my_installed_art))) +built_art += $(my_built_art) +installed_art += $(my_installed_art) +built_installed_art += $(my_built_art):$(my_installed_art) +endif $(eval $(call copy-one-file,$(my_built_odex),$(my_installed_odex))) $(eval $(call copy-one-file,$(my_built_vdex),$(my_installed_vdex))) diff --git a/core/tasks/tools/package-modules.mk b/core/tasks/tools/package-modules.mk index 24a7608b2d..ef49d90805 100644 --- a/core/tasks/tools/package-modules.mk +++ b/core/tasks/tools/package-modules.mk @@ -14,10 +14,20 @@ my_built_modules := my_copy_pairs := my_pickup_files := +# Iterate over the modules and include their direct dependencies stated in the +# LOCAL_REQUIRED_MODULES. +my_modules_and_deps := $(my_modules) +$(foreach m,$(my_modules),\ + $(eval _explicitly_required := \ + $(strip $(ALL_MODULES.$(m).EXPLICITLY_REQUIRED)\ + $(ALL_MODULES.$(m)$(TARGET_2ND_ARCH_MODULE_SUFFIX).EXPLICITLY_REQUIRED)))\ + $(eval my_modules_and_deps += $(_explicitly_required))\ +) + # Iterate over modules' built files and installed files; # Calculate the dest files in the output zip file. -$(foreach m,$(my_modules),\ +$(foreach m,$(my_modules_and_deps),\ $(eval _pickup_files := $(strip $(ALL_MODULES.$(m).PICKUP_FILES)\ $(ALL_MODULES.$(m)$(TARGET_2ND_ARCH_MODULE_SUFFIX).PICKUP_FILES)))\ $(eval _built_files := $(strip $(ALL_MODULES.$(m).BUILT_INSTALLED)\ diff --git a/envsetup.sh b/envsetup.sh index 710b28f0d8..b239441f0e 100644 --- a/envsetup.sh +++ b/envsetup.sh @@ -260,6 +260,12 @@ function setpaths() unset ANDROID_HOST_OUT export ANDROID_HOST_OUT=$(get_abs_build_var HOST_OUT) + unset ANDROID_HOST_OUT_TESTCASES + export ANDROID_HOST_OUT_TESTCASES=$(get_abs_build_var HOST_OUT_TESTCASES) + + unset ANDROID_TARGET_OUT_TESTCASES + export ANDROID_TARGET_OUT_TESTCASES=$(get_abs_build_var TARGET_OUT_TESTCASES) + # needed for building linux on MacOS # TODO: fix the path #export HOST_EXTRACFLAGS="-I "$T/system/kernel_headers/host_include diff --git a/tools/fat16copy.py b/tools/fat16copy.py index af8bd838cc..c20930a475 100755 --- a/tools/fat16copy.py +++ b/tools/fat16copy.py @@ -234,11 +234,16 @@ class fat_dir(object): data.seek(0) data_file.write(data.read()) - def new_subdirectory(self, name): + def open_subdirectory(self, name): """ - Create a new subdirectory of this directory with the given name. + Open a subdirectory of this directory with the given name. If the + subdirectory doesn't exist, a new one is created instead. Returns a fat_dir(). """ + for dent in self.dentries: + if dent.longname == name: + return dent.open_directory() + chunk = self.backing.fs.allocate(1) (shortname, ext) = self.make_short_name(name) new_dentry = self.add_dentry(ATTRIBUTE_SUBDIRECTORY, shortname, @@ -751,7 +756,7 @@ def add_item(directory, item): base = os.path.basename(item) if len(base) == 0: base = os.path.basename(item[:-1]) - sub = directory.new_subdirectory(base) + sub = directory.open_subdirectory(base) for next_item in sorted(os.listdir(item)): add_item(sub, os.path.join(item, next_item)) else: diff --git a/tools/releasetools/blockimgdiff.py b/tools/releasetools/blockimgdiff.py index 433a010819..1edf5b2a6d 100644 --- a/tools/releasetools/blockimgdiff.py +++ b/tools/releasetools/blockimgdiff.py @@ -635,7 +635,7 @@ class BlockImageDiff(object): stash_map = {} # Create the map between a stash and its def/use points. For example, for a - # given stash of (raw_id, sr), stashes[raw_id] = (sr, def_cmd, use_cmd). + # given stash of (raw_id, sr), stash_map[raw_id] = (sr, def_cmd, use_cmd). for xf in self.transfers: # Command xf defines (stores) all the stashes in stash_before. for stash_raw_id, sr in xf.stash_before: @@ -672,20 +672,10 @@ class BlockImageDiff(object): # Check the post-command stashed_blocks. stashed_blocks_after = stashed_blocks if self.version == 2: - assert stash_raw_id not in stashes - if free_stash_ids: - sid = heapq.heappop(free_stash_ids) - else: - sid = next_stash_id - next_stash_id += 1 - stashes[stash_raw_id] = sid stashed_blocks_after += sr.size() else: sh = self.HashBlocks(self.src, sr) - if sh in stashes: - stashes[sh] += 1 - else: - stashes[sh] = 1 + if sh not in stashes: stashed_blocks_after += sr.size() if stashed_blocks_after > max_allowed: @@ -695,6 +685,20 @@ class BlockImageDiff(object): replaced_cmds.append(use_cmd) print("%10d %9s %s" % (sr.size(), "explicit", use_cmd)) else: + # Update the stashes map. + if self.version == 2: + assert stash_raw_id not in stashes + if free_stash_ids: + sid = heapq.heappop(free_stash_ids) + else: + sid = next_stash_id + next_stash_id += 1 + stashes[stash_raw_id] = sid + else: + if sh in stashes: + stashes[sh] += 1 + else: + stashes[sh] = 1 stashed_blocks = stashed_blocks_after # "move" and "diff" may introduce implicit stashes in BBOTA v3. Prior to |