Merge "Prevent duplicate signals from makeparallel"
diff --git a/core/config.mk b/core/config.mk
index 0cf1293..8fa7d98 100644
--- a/core/config.mk
+++ b/core/config.mk
@@ -497,6 +497,8 @@
SOONG_ZIP := $(SOONG_HOST_OUT_EXECUTABLES)/soong_zip
ZIP2ZIP := $(SOONG_HOST_OUT_EXECUTABLES)/zip2zip
+JAVAC_FILTER := $(SOONG_HOST_OUT_EXECUTABLES)/soong_javac_filter
+
# Always use prebuilts for ckati and makeparallel
prebuilt_build_tools := prebuilts/build-tools
ifeq ($(filter address,$(SANITIZE_HOST)),)
@@ -708,7 +710,7 @@
# allow overriding default Java libraries on a per-target basis
ifeq ($(TARGET_DEFAULT_JAVA_LIBRARIES),)
- TARGET_DEFAULT_JAVA_LIBRARIES := core-oj core-libart legacy-test ext framework okhttp
+ TARGET_DEFAULT_JAVA_LIBRARIES := core-oj core-libart ext framework okhttp
endif
# Flags for DEX2OAT
diff --git a/core/definitions.mk b/core/definitions.mk
index 71b80e0..e9ec26a 100644
--- a/core/definitions.mk
+++ b/core/definitions.mk
@@ -2236,7 +2236,7 @@
$(hide) tr ' ' '\n' < $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list \
| $(NORMALIZE_PATH) | sort -u > $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq
$(hide) if [ -s $(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq ] ; then \
- $(1) -encoding UTF-8 \
+ ( $(1) -encoding UTF-8 \
$(if $(findstring true,$(PRIVATE_WARNINGS_ENABLE)),$(xlint_unchecked),) \
$(2) \
$(addprefix -classpath ,$(strip \
@@ -2245,7 +2245,7 @@
-extdirs "" -d $(PRIVATE_CLASS_INTERMEDIATES_DIR) \
$(PRIVATE_JAVACFLAGS) \
\@$(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq \
- || ( rm -rf $(PRIVATE_CLASS_INTERMEDIATES_DIR) ; exit 41 ) \
+ || ( rm -rf $(PRIVATE_CLASS_INTERMEDIATES_DIR) ; exit 41 ) ) 2>&1 | $(JAVAC_FILTER); \
fi
$(if $(PRIVATE_JAVA_LAYERS_FILE), $(hide) build/tools/java-layers.py \
$(PRIVATE_JAVA_LAYERS_FILE) \@$(PRIVATE_CLASS_INTERMEDIATES_DIR)/java-source-list-uniq,)
diff --git a/core/host_dalvik_java_library.mk b/core/host_dalvik_java_library.mk
index 0e35844..503f67b 100644
--- a/core/host_dalvik_java_library.mk
+++ b/core/host_dalvik_java_library.mk
@@ -90,6 +90,8 @@
$(full_java_lib_deps) \
$(jar_manifest_file) \
$(proto_java_sources_file_stamp) \
+ $(NORMALIZE_PATH) \
+ $(JAVAC_FILTER) \
$(LOCAL_ADDITIONAL_DEPENDENCIES)
$(transform-host-java-to-package)
diff --git a/core/host_java_library.mk b/core/host_java_library.mk
index cc26d7c..ba2999f 100644
--- a/core/host_java_library.mk
+++ b/core/host_java_library.mk
@@ -69,6 +69,7 @@
$(jar_manifest_file) \
$(proto_java_sources_file_stamp) \
$(NORMALIZE_PATH) \
+ $(JAVAC_FILTER) \
$(LOCAL_ADDITIONAL_DEPENDENCIES)
$(transform-host-java-to-package)
diff --git a/core/java.mk b/core/java.mk
index 41b3abe..d1ac6c7 100644
--- a/core/java.mk
+++ b/core/java.mk
@@ -446,6 +446,7 @@
$(RenderScript_file_stamp) \
$(proto_java_sources_file_stamp) \
$(NORMALIZE_PATH) \
+ $(JAVAC_FILTER) \
$(LOCAL_ADDITIONAL_DEPENDENCIES)
$(transform-java-to-classes.jar)
@@ -502,7 +503,8 @@
endif
# Keep a copy of the jar just before proguard processing.
-$(full_classes_jar): $(full_classes_emma_jar) | $(ACP)
+# TODO: this should depend on full_classes_emma_jar once coverage works again
+$(full_classes_jar): $(full_classes_jarjar_jar) | $(ACP)
@echo Copying: $@
$(hide) $(ACP) -fp $< $@
diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py
index 7b3e9ba..027e9f5 100644
--- a/tools/releasetools/common.py
+++ b/tools/releasetools/common.py
@@ -518,7 +518,13 @@
elif info_dict.get("vboot", None):
path = "/" + os.path.basename(sourcedir).lower()
img_keyblock = tempfile.NamedTemporaryFile()
- cmd = [info_dict["vboot_signer_cmd"], info_dict["futility"],
+ # We have switched from the prebuilt futility binary to using the tool
+ # (futility-host) built from the source. Override the setting in the old
+ # TF.zip.
+ futility = info_dict["futility"]
+ if futility.startswith("prebuilts/"):
+ futility = "futility-host"
+ cmd = [info_dict["vboot_signer_cmd"], futility,
img_unsigned.name, info_dict["vboot_key"] + ".vbpubk",
info_dict["vboot_key"] + ".vbprivk",
info_dict["vboot_subkey"] + ".vbprivk",
diff --git a/tools/releasetools/edify_generator.py b/tools/releasetools/edify_generator.py
index 3028b2a..343f344 100644
--- a/tools/releasetools/edify_generator.py
+++ b/tools/releasetools/edify_generator.py
@@ -77,26 +77,28 @@
with temporary=True) to this one."""
self.script.extend(other.script)
- def AssertOemProperty(self, name, value):
- """Assert that a property on the OEM paritition matches a value."""
+ def AssertOemProperty(self, name, values):
+ """Assert that a property on the OEM paritition matches allowed values."""
if not name:
raise ValueError("must specify an OEM property")
- if not value:
+ if not values:
raise ValueError("must specify the OEM value")
+ get_prop_command = None
if common.OPTIONS.oem_no_mount:
- cmd = ('getprop("{name}") == "{value}" || '
- 'abort("E{code}: This package expects the value \\"{value}\\" for '
- '\\"{name}\\"; this has value \\"" + '
- 'getprop("{name}") + "\\".");').format(
- code=common.ErrorCode.OEM_PROP_MISMATCH,
- name=name, value=value)
+ get_prop_command = 'getprop("%s")' % name
else:
- cmd = ('file_getprop("/oem/oem.prop", "{name}") == "{value}" || '
- 'abort("E{code}: This package expects the value \\"{value}\\" for '
- '\\"{name}\\" on the OEM partition; this has value \\"" + '
- 'file_getprop("/oem/oem.prop", "{name}") + "\\".");').format(
- code=common.ErrorCode.OEM_PROP_MISMATCH,
- name=name, value=value)
+ get_prop_command = 'file_getprop("/oem/oem.prop", "%s")' % name
+
+ cmd = ''
+ for value in values:
+ cmd += '%s == "%s" || ' % (get_prop_command, value)
+ cmd += (
+ 'abort("E{code}: This package expects the value \\"{values}\\" for '
+ '\\"{name}\\"; this has value \\"" + '
+ '{get_prop_command} + "\\".");').format(
+ code=common.ErrorCode.OEM_PROP_MISMATCH,
+ get_prop_command=get_prop_command, name=name,
+ values='\\" or \\"'.join(values))
self.script.append(cmd)
def AssertSomeFingerprint(self, *fp):
diff --git a/tools/releasetools/ota_from_target_files.py b/tools/releasetools/ota_from_target_files.py
index 72e00b2..4b1b3a0 100755
--- a/tools/releasetools/ota_from_target_files.py
+++ b/tools/releasetools/ota_from_target_files.py
@@ -50,9 +50,11 @@
Remount and verify the checksums of the files written to the
system and vendor (if used) partitions. Incremental builds only.
- -o (--oem_settings) <file>
- Use the file to specify the expected OEM-specific properties
- on the OEM partition of the intended device.
+ -o (--oem_settings) <main_file[,additional_files...]>
+ Comma seperated list of files used to specify the expected OEM-specific
+ properties on the OEM partition of the intended device.
+ Multiple expected values can be used by providing multiple files.
+
--oem_no_mount
For devices with OEM-specific properties but without an OEM partition,
@@ -445,20 +447,38 @@
whole_file=True)
-def AppendAssertions(script, info_dict, oem_dict=None):
+def AppendAssertions(script, info_dict, oem_dicts=None):
oem_props = info_dict.get("oem_fingerprint_properties")
if not oem_props:
device = GetBuildProp("ro.product.device", info_dict)
script.AssertDevice(device)
else:
- if oem_dict is None:
+ if not oem_dicts:
raise common.ExternalError(
"No OEM file provided to answer expected assertions")
for prop in oem_props.split():
- if oem_dict.get(prop) is None:
+ values = []
+ for oem_dict in oem_dicts:
+ if oem_dict.get(prop):
+ values.append(oem_dict[prop])
+ if not values:
raise common.ExternalError(
"The OEM file is missing the property %s" % prop)
- script.AssertOemProperty(prop, oem_dict.get(prop))
+ script.AssertOemProperty(prop, values)
+
+
+def _LoadOemDicts(script, recovery_mount_options):
+ """Returns the list of loaded OEM properties dict."""
+ oem_dicts = None
+ if OPTIONS.oem_source is None:
+ raise common.ExternalError("OEM source required for this build")
+ if not OPTIONS.oem_no_mount:
+ script.Mount("/oem", recovery_mount_options)
+ oem_dicts = []
+ for oem_file in OPTIONS.oem_source:
+ oem_dicts.append(common.LoadDictionaryFromLines(
+ open(oem_file).readlines()))
+ return oem_dicts
def _WriteRecoveryImageToBoot(script, output_zip):
@@ -571,19 +591,15 @@
recovery_mount_options = OPTIONS.info_dict.get("recovery_mount_options")
oem_props = OPTIONS.info_dict.get("oem_fingerprint_properties")
- oem_dict = None
+ oem_dicts = None
if oem_props:
- if OPTIONS.oem_source is None:
- raise common.ExternalError("OEM source required for this build")
- if not OPTIONS.oem_no_mount:
- script.Mount("/oem", recovery_mount_options)
- oem_dict = common.LoadDictionaryFromLines(
- open(OPTIONS.oem_source).readlines())
+ oem_dicts = _LoadOemDicts(script, recovery_mount_options)
- target_fp = CalculateFingerprint(oem_props, oem_dict, OPTIONS.info_dict)
+ target_fp = CalculateFingerprint(oem_props, oem_dicts and oem_dicts[0],
+ OPTIONS.info_dict)
metadata = {
- "post-build": target_fp,
- "pre-device": GetOemProperty("ro.product.device", oem_props, oem_dict,
+ "pre-device": GetOemProperty("ro.product.device", oem_props,
+ oem_dicts and oem_dicts[0],
OPTIONS.info_dict),
"post-timestamp": GetBuildProp("ro.build.date.utc", OPTIONS.info_dict),
}
@@ -606,7 +622,7 @@
ts_text = GetBuildProp("ro.build.date", OPTIONS.info_dict)
script.AssertOlderBuild(ts, ts_text)
- AppendAssertions(script, OPTIONS.info_dict, oem_dict)
+ AppendAssertions(script, OPTIONS.info_dict, oem_dicts)
device_specific.FullOTA_Assertions()
# Two-step package strategy (in chronological order, which is *not*
@@ -858,18 +874,14 @@
"recovery_mount_options")
source_oem_props = OPTIONS.source_info_dict.get("oem_fingerprint_properties")
target_oem_props = OPTIONS.target_info_dict.get("oem_fingerprint_properties")
- oem_dict = None
- if source_oem_props or target_oem_props:
- if OPTIONS.oem_source is None:
- raise common.ExternalError("OEM source required for this build")
- if not OPTIONS.oem_no_mount:
- script.Mount("/oem", recovery_mount_options)
- oem_dict = common.LoadDictionaryFromLines(
- open(OPTIONS.oem_source).readlines())
+ oem_dicts = None
+ if source_oem_props and target_oem_props:
+ oem_dicts = _LoadOemDicts(script, recovery_mount_options)
metadata = {
"pre-device": GetOemProperty("ro.product.device", source_oem_props,
- oem_dict, OPTIONS.source_info_dict),
+ oem_dicts and oem_dicts[0],
+ OPTIONS.source_info_dict),
"ota-type": "BLOCK",
}
@@ -885,9 +897,9 @@
metadata=metadata,
info_dict=OPTIONS.source_info_dict)
- source_fp = CalculateFingerprint(source_oem_props, oem_dict,
+ source_fp = CalculateFingerprint(source_oem_props, oem_dicts and oem_dicts[0],
OPTIONS.source_info_dict)
- target_fp = CalculateFingerprint(target_oem_props, oem_dict,
+ target_fp = CalculateFingerprint(target_oem_props, oem_dicts and oem_dicts[0],
OPTIONS.target_info_dict)
metadata["pre-build"] = source_fp
metadata["post-build"] = target_fp
@@ -952,7 +964,7 @@
else:
vendor_diff = None
- AppendAssertions(script, OPTIONS.target_info_dict, oem_dict)
+ AppendAssertions(script, OPTIONS.target_info_dict, oem_dicts)
device_specific.IncrementalOTA_Assertions()
# Two-step incremental package strategy (in chronological order,
@@ -1162,19 +1174,16 @@
oem_props = OPTIONS.info_dict.get("oem_fingerprint_properties")
recovery_mount_options = OPTIONS.info_dict.get(
"recovery_mount_options")
- oem_dict = None
+ oem_dicts = None
if oem_props:
- if OPTIONS.oem_source is None:
- raise common.ExternalError("OEM source required for this build")
- if not OPTIONS.oem_no_mount:
- script.Mount("/oem", recovery_mount_options)
- oem_dict = common.LoadDictionaryFromLines(
- open(OPTIONS.oem_source).readlines())
+ oem_dicts = _LoadOemDicts(script, oem_props, recovery_mount_options)
- target_fp = CalculateFingerprint(oem_props, oem_dict, OPTIONS.info_dict)
+ target_fp = CalculateFingerprint(oem_props, oem_dicts and oem_dicts[0],
+ OPTIONS.info_dict)
metadata = {
"post-build": target_fp,
- "pre-device": GetOemProperty("ro.product.device", oem_props, oem_dict,
+ "pre-device": GetOemProperty("ro.product.device", oem_props,
+ oem_dicts and oem_dicts[0],
OPTIONS.info_dict),
"post-timestamp": GetBuildProp("ro.build.date.utc", OPTIONS.info_dict),
}
@@ -1188,7 +1197,7 @@
metadata=metadata,
info_dict=OPTIONS.info_dict)
- AppendAssertions(script, OPTIONS.info_dict, oem_dict)
+ AppendAssertions(script, OPTIONS.info_dict, oem_dicts)
script.Print("Verifying device images against %s..." % target_fp)
script.AppendExtra("")
@@ -1310,26 +1319,25 @@
# Metadata to comply with Android OTA package format.
oem_props = OPTIONS.info_dict.get("oem_fingerprint_properties", None)
- oem_dict = None
+ oem_dicts = None
if oem_props:
- if OPTIONS.oem_source is None:
- raise common.ExternalError("OEM source required for this build")
- oem_dict = common.LoadDictionaryFromLines(
- open(OPTIONS.oem_source).readlines())
+ oem_dicts = _LoadOemDicts(script, None)
metadata = {
- "post-build": CalculateFingerprint(oem_props, oem_dict,
+ "post-build": CalculateFingerprint(oem_props, oem_dicts and oem_dicts[0],
OPTIONS.info_dict),
"post-build-incremental" : GetBuildProp("ro.build.version.incremental",
OPTIONS.info_dict),
- "pre-device": GetOemProperty("ro.product.device", oem_props, oem_dict,
+ "pre-device": GetOemProperty("ro.product.device", oem_props,
+ oem_dicts and oem_dicts[0],
OPTIONS.info_dict),
"ota-required-cache": "0",
"ota-type": "AB",
}
if source_file is not None:
- metadata["pre-build"] = CalculateFingerprint(oem_props, oem_dict,
+ metadata["pre-build"] = CalculateFingerprint(oem_props,
+ oem_dicts and oem_dicts[0],
OPTIONS.source_info_dict)
metadata["pre-build-incremental"] = GetBuildProp(
"ro.build.version.incremental", OPTIONS.source_info_dict)
@@ -1653,18 +1661,14 @@
"recovery_mount_options")
source_oem_props = OPTIONS.source_info_dict.get("oem_fingerprint_properties")
target_oem_props = OPTIONS.target_info_dict.get("oem_fingerprint_properties")
- oem_dict = None
+ oem_dicts = None
if source_oem_props or target_oem_props:
- if OPTIONS.oem_source is None:
- raise common.ExternalError("OEM source required for this build")
- if not OPTIONS.oem_no_mount:
- script.Mount("/oem", recovery_mount_options)
- oem_dict = common.LoadDictionaryFromLines(
- open(OPTIONS.oem_source).readlines())
+ oem_dicts = _LoadOemDicts(script, recovery_mount_options)
metadata = {
"pre-device": GetOemProperty("ro.product.device", source_oem_props,
- oem_dict, OPTIONS.source_info_dict),
+ oem_dicts and oem_dicts[0],
+ OPTIONS.source_info_dict),
"ota-type": "FILE",
}
@@ -1688,9 +1692,9 @@
else:
vendor_diff = None
- target_fp = CalculateFingerprint(target_oem_props, oem_dict,
+ target_fp = CalculateFingerprint(target_oem_props, oem_dicts and oem_dicts[0],
OPTIONS.target_info_dict)
- source_fp = CalculateFingerprint(source_oem_props, oem_dict,
+ source_fp = CalculateFingerprint(source_oem_props, oem_dicts and oem_dicts[0],
OPTIONS.source_info_dict)
if source_oem_props is None and target_oem_props is None:
@@ -1736,7 +1740,7 @@
# 0.1 for unpacking verbatim files, symlinking, and doing the
# device-specific commands.
- AppendAssertions(script, OPTIONS.target_info_dict, oem_dict)
+ AppendAssertions(script, OPTIONS.target_info_dict, oem_dicts)
device_specific.IncrementalOTA_Assertions()
# Two-step incremental package strategy (in chronological order,
@@ -2072,7 +2076,7 @@
OPTIONS.downgrade = True
OPTIONS.wipe_user_data = True
elif o in ("-o", "--oem_settings"):
- OPTIONS.oem_source = a
+ OPTIONS.oem_source = a.split(',')
elif o == "--oem_no_mount":
OPTIONS.oem_no_mount = True
elif o in ("-e", "--extra_script"):