diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/aconfig/aconfig/src/codegen/java.rs | 50 | ||||
-rw-r--r-- | tools/aconfig/aconfig/templates/CustomFeatureFlags.java.template | 27 | ||||
-rw-r--r-- | tools/aconfig/fake_device_config/src/android/os/Build.java | 5 | ||||
-rw-r--r-- | tools/otatools_package/Android.bp | 50 | ||||
-rw-r--r-- | tools/releasetools/common.py | 20 | ||||
-rw-r--r-- | tools/releasetools/merge/merge_compatibility_checks.py | 13 | ||||
-rwxr-xr-x | tools/releasetools/merge/merge_target_files.py | 17 |
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) |