| #!/bin/sh |
| "." "`dirname $0`/../../vendor/google/aosp/scripts/envsetup.sh"; "exec" "$PY3" "$0" "$@" |
| |
| """Unpacks a prebuilt to look like an Android build directory.""" |
| |
| import argparse |
| import glob |
| import itertools |
| import os |
| import shutil |
| import stat |
| import sys |
| import tempfile |
| import zipfile |
| |
| |
| SCRIPT_DIR = os.path.abspath(os.path.dirname(__file__)) |
| |
| def main(): |
| """Unpacks a prebuilt to look like an Android build directory. |
| |
| Inputs, (specifically adb and qemu_trusty_arm64-target-files-buildid.zip) |
| must be placed in the pristine directory before running the script, or |
| passed in with the --artifacts-dir argument. |
| """ |
| parser = argparse.ArgumentParser() |
| parser.add_argument( |
| "-a", "--artifacts-dir", |
| type=str, |
| default=os.path.join(SCRIPT_DIR, "pristine"), |
| help="Path to the directory containing the input artifacts", |
| ) |
| parser.add_argument( |
| "-o", "--output-dir", |
| type=str, |
| default=os.path.join(SCRIPT_DIR, "android"), |
| help="Path to the output directory", |
| ) |
| args = parser.parse_args() |
| |
| adb_source_path = os.path.join(args.artifacts_dir, "adb") |
| # Make sure the relevant files are here - currently just adb + target files. |
| if not os.path.isfile(adb_source_path): |
| print(f"ADB missing from {adb_source_path}") |
| sys.exit(1) |
| |
| # Make sure we have exactly one target zip |
| target_files_search = os.path.join(args.artifacts_dir, |
| "qemu_trusty_arm64-target_files-*.zip") |
| target_files_zip_glob = glob.glob(target_files_search) |
| if not target_files_zip_glob: |
| print("No Android target_files found") |
| sys.exit(1) |
| if len(target_files_zip_glob) > 1: |
| print ("Multiple Android target_files archives found. Please clean up " |
| "old inputs before updating the prebuilt.") |
| sys.exit(1) |
| |
| if os.path.exists(args.output_dir): |
| print(f"Output directory {args.output_dir} already exists.") |
| print("Please remove it manually before running this script.") |
| sys.exit(1) |
| |
| # Unpack the target_files archive |
| with tempfile.TemporaryDirectory() as target_files_path: |
| zipfile.ZipFile(target_files_zip_glob[0]).extractall(target_files_path) |
| |
| # Build our directory structure |
| host_bin_path = os.path.join(args.output_dir, "out", "host", "linux-x86", "bin") |
| image_path = os.path.join(args.output_dir, "out", "target", "product", "trusty") |
| test_path = os.path.join(image_path, "data") |
| os.makedirs(host_bin_path) |
| os.makedirs(image_path) |
| os.makedirs(test_path) |
| |
| # Install adb to the host bin directory |
| shutil.copy(adb_source_path, host_bin_path) |
| |
| # Install images |
| image_source_path = os.path.join(target_files_path, "IMAGES") |
| shutil.move(os.path.join(image_source_path, "system.img"), image_path) |
| shutil.move(os.path.join(image_source_path, "vendor.img"), image_path) |
| shutil.move(os.path.join(image_source_path, "userdata.img"), image_path) |
| |
| # Install test apps |
| test_source_path = os.path.join(target_files_path, "DATA", "nativetest64") |
| shutil.move(test_source_path, test_path) |
| |
| # Fix up permissions |
| exec_perms = (stat.S_IXUSR | stat.S_IRUSR | stat.S_IXGRP | stat.S_IRGRP |
| | stat.S_IXOTH | stat.S_IROTH) |
| for (dirpath, _, filenames) in itertools.chain(os.walk(host_bin_path), |
| os.walk(test_path)): |
| for filename in filenames: |
| os.chmod(os.path.join(dirpath, filename), exec_perms) |
| |
| sys.exit(0) |
| |
| |
| if __name__ == "__main__": |
| main() |