summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/aconfig/aconfig/src/codegen/java.rs50
-rw-r--r--tools/aconfig/aconfig/templates/CustomFeatureFlags.java.template27
-rw-r--r--tools/aconfig/fake_device_config/src/android/os/Build.java5
-rw-r--r--tools/otatools_package/Android.bp50
-rw-r--r--tools/releasetools/common.py20
-rw-r--r--tools/releasetools/merge/merge_compatibility_checks.py13
-rwxr-xr-xtools/releasetools/merge/merge_target_files.py17
7 files changed, 171 insertions, 11 deletions
diff --git a/tools/aconfig/aconfig/src/codegen/java.rs b/tools/aconfig/aconfig/src/codegen/java.rs
index d74e87a593..e9c95fd766 100644
--- a/tools/aconfig/aconfig/src/codegen/java.rs
+++ b/tools/aconfig/aconfig/src/codegen/java.rs
@@ -893,12 +893,16 @@ mod tests {
package com.android.aconfig.test;
import java.util.Arrays;
+ import java.util.HashMap;
+ import java.util.Map;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.BiPredicate;
import java.util.function.Predicate;
+ import android.os.Build;
+
/** @hide */
public class CustomFeatureFlags implements FeatureFlags {
@@ -941,6 +945,19 @@ mod tests {
""
)
);
+
+ private Map<String, Integer> mFinalizedFlags = new HashMap<>(
+ Map.ofEntries(
+ Map.entry("", Integer.MAX_VALUE)
+ )
+ );
+
+ public boolean isFlagFinalized(String flagName) {
+ if (!mFinalizedFlags.containsKey(flagName)) {
+ return false;
+ }
+ return Build.VERSION.SDK_INT >= mFinalizedFlags.get(flagName);
+ }
}
"#;
@@ -1089,11 +1106,14 @@ mod tests {
package com.android.aconfig.test;
import java.util.Arrays;
+ import java.util.HashMap;
+ import java.util.Map;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.BiPredicate;
import java.util.function.Predicate;
+ import android.os.Build;
/** @hide */
public class CustomFeatureFlags implements FeatureFlags {
@@ -1137,6 +1157,19 @@ mod tests {
""
)
);
+
+ private Map<String, Integer> mFinalizedFlags = new HashMap<>(
+ Map.ofEntries(
+ Map.entry("", Integer.MAX_VALUE)
+ )
+ );
+
+ public boolean isFlagFinalized(String flagName) {
+ if (!mFinalizedFlags.containsKey(flagName)) {
+ return false;
+ }
+ return Build.VERSION.SDK_INT >= mFinalizedFlags.get(flagName);
+ }
}
"#;
@@ -1296,11 +1329,14 @@ mod tests {
package com.android.aconfig.test;
import java.util.Arrays;
+ import java.util.HashMap;
+ import java.util.Map;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.BiPredicate;
import java.util.function.Predicate;
+ import android.os.Build;
/** @hide */
public class CustomFeatureFlags implements FeatureFlags {
@@ -1344,6 +1380,20 @@ mod tests {
""
)
);
+
+ private Map<String, Integer> mFinalizedFlags = new HashMap<>(
+ Map.ofEntries(
+ Map.entry(Flags.FLAG_DISABLED_RW_EXPORTED, 36),
+ Map.entry("", Integer.MAX_VALUE)
+ )
+ );
+
+ public boolean isFlagFinalized(String flagName) {
+ if (!mFinalizedFlags.containsKey(flagName)) {
+ return false;
+ }
+ return Build.VERSION.SDK_INT >= mFinalizedFlags.get(flagName);
+ }
}
"#;
diff --git a/tools/aconfig/aconfig/templates/CustomFeatureFlags.java.template b/tools/aconfig/aconfig/templates/CustomFeatureFlags.java.template
index ef183678ef..c702c9b1e5 100644
--- a/tools/aconfig/aconfig/templates/CustomFeatureFlags.java.template
+++ b/tools/aconfig/aconfig/templates/CustomFeatureFlags.java.template
@@ -5,11 +5,18 @@ package {package_name};
import android.compat.annotation.UnsupportedAppUsage;
{{ -endif }}
import java.util.Arrays;
+{{ -if library_exported }}
+import java.util.HashMap;
+import java.util.Map;
+{{ -endif }}
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.BiPredicate;
import java.util.function.Predicate;
+{{ -if library_exported }}
+import android.os.Build;
+{{ -endif }}
{{ -if single_exported_file }}
{{ -if library_exported }}
@@ -73,4 +80,24 @@ public class CustomFeatureFlags implements FeatureFlags \{
""{# The empty string here is to resolve the ending comma #}
)
);
+
+{{ -if library_exported }}
+ private Map<String, Integer> mFinalizedFlags = new HashMap<>(
+ Map.ofEntries(
+ {{ -for item in flag_elements }}
+ {{ -if item.finalized_sdk_present }}
+ Map.entry(Flags.FLAG_{item.flag_name_constant_suffix}, {item.finalized_sdk_value}),
+ {{ -endif }}
+ {{ -endfor }}
+ Map.entry("", Integer.MAX_VALUE){# The empty entry to avoid empty entries #}
+ )
+ );
+
+ public boolean isFlagFinalized(String flagName) \{
+ if (!mFinalizedFlags.containsKey(flagName)) \{
+ return false;
+ }
+ return Build.VERSION.SDK_INT >= mFinalizedFlags.get(flagName);
+ }
+{{ -endif }}
}
diff --git a/tools/aconfig/fake_device_config/src/android/os/Build.java b/tools/aconfig/fake_device_config/src/android/os/Build.java
index 8ec72fb2dc..790ff82ad1 100644
--- a/tools/aconfig/fake_device_config/src/android/os/Build.java
+++ b/tools/aconfig/fake_device_config/src/android/os/Build.java
@@ -18,6 +18,9 @@ package android.os;
public class Build {
public static class VERSION {
- public static final int SDK_INT = 0;
+ public static final int SDK_INT = placeholder();
+ private static int placeholder() {
+ throw new UnsupportedOperationException("Stub!");
+ }
}
}
diff --git a/tools/otatools_package/Android.bp b/tools/otatools_package/Android.bp
index 5c7bfc7e7a..ef8c867228 100644
--- a/tools/otatools_package/Android.bp
+++ b/tools/otatools_package/Android.bp
@@ -45,6 +45,55 @@ genrule {
out: ["otatools_package_cert_files.zip"],
}
+cc_genrule {
+ name: "otatools_package_dep_libs",
+ host_supported: true,
+ device_supported: false,
+ compile_multilib: "first",
+ tools: ["soong_zip"],
+ cmd: "mkdir -p $(genDir)/$$CC_MULTILIB &&" +
+ "cp $(in) $(genDir)/$$CC_MULTILIB && " +
+ "$(location soong_zip) -o $(out) -C $(genDir) -D $(genDir)/$$CC_MULTILIB",
+ srcs: [
+ ":libbase",
+ ":libbrillo",
+ ":libbrillo-stream",
+ ":libc++",
+ "//external/libchrome:libchrome",
+ ":libconscrypt_openjdk_jni",
+ ":libcrypto",
+ ":libcrypto_utils",
+ ":libcutils",
+ ":libevent",
+ ":libext2_blkid",
+ ":libext2_com_err",
+ ":libext2_e2p",
+ ":libext2_quota",
+ ":libext2_uuid",
+ ":libext2fs",
+ ":libext4_utils",
+ ":libfec",
+ ":libhidl-gen-utils",
+ ":libhidlmetadata",
+ ":libicui18n",
+ ":libicuuc",
+ ":liblog",
+ ":liblp",
+ ":liblz4",
+ ":libpcre2",
+ ":libprocessgroup",
+ ":libprotobuf-cpp-lite",
+ ":libselinux",
+ ":libsparse",
+ ":libsqlite",
+ ":libsquashfs_utils",
+ ":libssl",
+ ":libz",
+ ":libziparchive",
+ ],
+ out: ["otatools_package_dep_libs.zip"],
+}
+
java_genrule_host {
name: "otatools_package",
tools: ["merge_zips"],
@@ -53,6 +102,7 @@ java_genrule_host {
srcs: [
":otatools_package_cert_files",
":otatools_package_dep_jars",
+ ":otatools_package_dep_libs",
":otatools_package_releasetools",
],
// TODO: Rename as "otatools.zip" when the rest files are ready.
diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py
index e5f5f92b6d..3fc08c668e 100644
--- a/tools/releasetools/common.py
+++ b/tools/releasetools/common.py
@@ -1410,7 +1410,22 @@ def SharedUidPartitionViolations(uid_dict, partition_groups):
return errors
-def RunHostInitVerifier(product_out, partition_map):
+def RunVendoredHostInitVerifier(product_out, partition_map):
+ """Runs vendor host_init_verifier on the init rc files within selected partitions.
+
+ host_init_verifier searches the etc/init path within each selected partition.
+
+ Args:
+ product_out: PRODUCT_OUT directory, containing partition directories.
+ partition_map: A map of partition name -> relative path within product_out.
+ """
+ return RunHostInitVerifier(
+ product_out,
+ partition_map,
+ tool=os.path.join(OPTIONS.vendor_otatools, 'bin', 'host_init_verifier'))
+
+
+def RunHostInitVerifier(product_out, partition_map, tool="host_init_verifier"):
"""Runs host_init_verifier on the init rc files within partitions.
host_init_verifier searches the etc/init path within each partition.
@@ -1418,9 +1433,10 @@ def RunHostInitVerifier(product_out, partition_map):
Args:
product_out: PRODUCT_OUT directory, containing partition directories.
partition_map: A map of partition name -> relative path within product_out.
+ tool: Full path to host_init_verifier or binary name
"""
allowed_partitions = ("system", "system_ext", "product", "vendor", "odm")
- cmd = ["host_init_verifier"]
+ cmd = [tool]
for partition, path in partition_map.items():
if partition not in allowed_partitions:
raise ExternalError("Unable to call host_init_verifier for partition %s" %
diff --git a/tools/releasetools/merge/merge_compatibility_checks.py b/tools/releasetools/merge/merge_compatibility_checks.py
index 8c9993f2e2..80b5caa156 100644
--- a/tools/releasetools/merge/merge_compatibility_checks.py
+++ b/tools/releasetools/merge/merge_compatibility_checks.py
@@ -95,8 +95,19 @@ def CheckShareduidViolation(target_files_dir, partition_map):
def CheckInitRcFiles(target_files_dir, partition_map):
"""Check for any init.rc issues using host_init_verifier."""
try:
+ vendor_partitions = set()
+ if OPTIONS.vendor_otatools:
+ vendor_partitions = {"vendor", "odm"}
+ common.RunVendoredHostInitVerifier(
+ product_out=target_files_dir,
+ partition_map={p: partition_map[p] for p in vendor_partitions})
+
common.RunHostInitVerifier(
- product_out=target_files_dir, partition_map=partition_map)
+ product_out=target_files_dir,
+ partition_map={
+ p: partition_map[p]
+ for p in partition_map.keys() - vendor_partitions
+ })
except RuntimeError as err:
return [str(err)]
return []
diff --git a/tools/releasetools/merge/merge_target_files.py b/tools/releasetools/merge/merge_target_files.py
index fdba927db9..de4d9a8cc7 100755
--- a/tools/releasetools/merge/merge_target_files.py
+++ b/tools/releasetools/merge/merge_target_files.py
@@ -87,8 +87,8 @@ Usage: merge_target_files [args]
If provided, rebuilds odm.img or vendor.img to include merged sepolicy
files. If odm is present then odm is preferred.
- --vendor-otatools otatools.zip
- If provided, use this otatools.zip when recompiling the odm or vendor
+ --vendor-otatools otatools.zip or directory
+ If provided, use these otatools when recompiling the odm or vendor
image to include sepolicy.
--keep-tmp
@@ -312,12 +312,9 @@ def rebuild_image_with_sepolicy(target_files_dir):
'%s recompilation will be performed using the vendor otatools.zip',
partition_img)
- # Unzip the vendor build's otatools.zip and target-files archive.
- vendor_otatools_dir = common.MakeTempDir(
- prefix='merge_target_files_vendor_otatools_')
+ # Unzip the vendor build's target-files archive.
vendor_target_files_dir = common.MakeTempDir(
prefix='merge_target_files_vendor_target_files_')
- common.UnzipToDir(OPTIONS.vendor_otatools, vendor_otatools_dir)
merge_utils.CollectTargetFiles(
input_zipfile_or_dir=OPTIONS.vendor_target_files,
output_dir=vendor_target_files_dir,
@@ -335,7 +332,7 @@ def rebuild_image_with_sepolicy(target_files_dir):
remove_file_if_exists(
os.path.join(vendor_target_files_dir, 'IMAGES', partition_img))
rebuild_partition_command = [
- os.path.join(vendor_otatools_dir, 'bin', 'add_img_to_target_files'),
+ os.path.join(OPTIONS.vendor_otatools, 'bin', 'add_img_to_target_files'),
'--verbose',
'--add_missing',
]
@@ -669,6 +666,12 @@ def main():
if OPTIONS.output_item_list:
OPTIONS.output_item_list = common.LoadListFromFile(OPTIONS.output_item_list)
+ if OPTIONS.vendor_otatools and zipfile.is_zipfile(OPTIONS.vendor_otatools):
+ vendor_otatools_dir = common.MakeTempDir(
+ prefix='merge_target_files_vendor_otatools_')
+ common.UnzipToDir(OPTIONS.vendor_otatools, vendor_otatools_dir)
+ OPTIONS.vendor_otatools = vendor_otatools_dir
+
if not merge_utils.ValidateConfigLists():
sys.exit(1)