1*90c8c64dSAndroid Build Coastguard Worker#!/bin/bash -ex 2*90c8c64dSAndroid Build Coastguard Workerusage () { 3*90c8c64dSAndroid Build Coastguard Worker echo "Create a Mixed Build archive with the given system and device archives." 4*90c8c64dSAndroid Build Coastguard Worker echo 5*90c8c64dSAndroid Build Coastguard Worker echo "Usage: $0 [-v <vendor_version>] [-m <modify_system_image_path>]" 6*90c8c64dSAndroid Build Coastguard Worker echo " [-t <prebuilt_otatools_path>] [-p <override_vbmeta_image_path>]" 7*90c8c64dSAndroid Build Coastguard Worker echo " [-b <override_boot_image_path>]" 8*90c8c64dSAndroid Build Coastguard Worker echo " [-s] [-d] system_build_dir device_build_dir out_dir" 9*90c8c64dSAndroid Build Coastguard Worker echo 10*90c8c64dSAndroid Build Coastguard Worker echo "Options -v, -m, -t, -p, -b, -s, -d must precede positional arguments." 11*90c8c64dSAndroid Build Coastguard Worker echo 12*90c8c64dSAndroid Build Coastguard Worker echo "vendor_version is the version of the vendor image when Keymaster v3" 13*90c8c64dSAndroid Build Coastguard Worker echo " related modifications to the system image is necessary. Optional." 14*90c8c64dSAndroid Build Coastguard Worker echo " eg. 8.1.0 for a mixed build of GSI and O-MR1 vendor image." 15*90c8c64dSAndroid Build Coastguard Worker echo "modify_system_image_path is the path to the script that modifies the" 16*90c8c64dSAndroid Build Coastguard Worker echo " system image, needed for Keymaster v3. Optional." 17*90c8c64dSAndroid Build Coastguard Worker echo "prebuilt_otatools_path is the path to otatools.zip file that has all" 18*90c8c64dSAndroid Build Coastguard Worker echo " required host binaries to modify system image. It also must include" 19*90c8c64dSAndroid Build Coastguard Worker echo " VINTF check tool to verify the compatibility of the given images." 20*90c8c64dSAndroid Build Coastguard Worker echo " Optional." 21*90c8c64dSAndroid Build Coastguard Worker echo "override_vbmeta_image_path is the path to a vbmeta.img to use" 22*90c8c64dSAndroid Build Coastguard Worker echo " to override the existing vbmeta.img of device. Optional." 23*90c8c64dSAndroid Build Coastguard Worker echo "override_boot_image_path is the path to a boot imgage to use to" 24*90c8c64dSAndroid Build Coastguard Worker echo " override the existing boot.img of device. Optional." 25*90c8c64dSAndroid Build Coastguard Worker echo "-s is used to fetch and flash both product.img and system.img from" 26*90c8c64dSAndroid Build Coastguard Worker echo " the system_build_dir for devices with a product partition." 27*90c8c64dSAndroid Build Coastguard Worker echo " product.img will be removed if system_build_dir does not have" 28*90c8c64dSAndroid Build Coastguard Worker echo " product.img when -s option is declared." 29*90c8c64dSAndroid Build Coastguard Worker echo " By default, only system.img is flashed to the target device for" 30*90c8c64dSAndroid Build Coastguard Worker echo " independent system update. No parameter required. Optional" 31*90c8c64dSAndroid Build Coastguard Worker echo "-d is used to skip vbmeta.img replacement in its entirety and the" 32*90c8c64dSAndroid Build Coastguard Worker echo " one from the device build (if exists) is left untouched" 33*90c8c64dSAndroid Build Coastguard Worker echo "system_build_dir is the path to the system build" 34*90c8c64dSAndroid Build Coastguard Worker echo " eg. aosp_arm64-userdebug." 35*90c8c64dSAndroid Build Coastguard Worker echo "device_build_dir is the path to the device build" 36*90c8c64dSAndroid Build Coastguard Worker echo " eg. sailfish-user." 37*90c8c64dSAndroid Build Coastguard Worker echo "out_dir is the path to where the new build will be placed." 38*90c8c64dSAndroid Build Coastguard Worker} 39*90c8c64dSAndroid Build Coastguard Worker 40*90c8c64dSAndroid Build Coastguard Worker# Print error message and exit. 41*90c8c64dSAndroid Build Coastguard Worker# Usage: exit_badparam message 42*90c8c64dSAndroid Build Coastguard Worker# 43*90c8c64dSAndroid Build Coastguard Worker# message is a string to be displayed before exit. 44*90c8c64dSAndroid Build Coastguard Workerexit_badparam () { 45*90c8c64dSAndroid Build Coastguard Worker echo "ERROR: $1" >&2 46*90c8c64dSAndroid Build Coastguard Worker usage 47*90c8c64dSAndroid Build Coastguard Worker exit 1 48*90c8c64dSAndroid Build Coastguard Worker} 49*90c8c64dSAndroid Build Coastguard Worker 50*90c8c64dSAndroid Build Coastguard Workercleanup_and_exit () { 51*90c8c64dSAndroid Build Coastguard Worker readonly result="$?" 52*90c8c64dSAndroid Build Coastguard Worker rm -rf "$TEMP_DIR" 53*90c8c64dSAndroid Build Coastguard Worker exit "$result" 54*90c8c64dSAndroid Build Coastguard Worker} 55*90c8c64dSAndroid Build Coastguard Worker 56*90c8c64dSAndroid Build Coastguard Workertrap cleanup_and_exit EXIT 57*90c8c64dSAndroid Build Coastguard Worker 58*90c8c64dSAndroid Build Coastguard Workerwhile getopts :v:m:p:b:t:sd opt; do 59*90c8c64dSAndroid Build Coastguard Worker case "$opt" in 60*90c8c64dSAndroid Build Coastguard Worker v) 61*90c8c64dSAndroid Build Coastguard Worker readonly VENDOR_VERSION="$OPTARG" 62*90c8c64dSAndroid Build Coastguard Worker ;; 63*90c8c64dSAndroid Build Coastguard Worker m) 64*90c8c64dSAndroid Build Coastguard Worker readonly MODIFY_SYSTEM_SCRIPT="$OPTARG" 65*90c8c64dSAndroid Build Coastguard Worker ;; 66*90c8c64dSAndroid Build Coastguard Worker p) 67*90c8c64dSAndroid Build Coastguard Worker readonly OVERRIDE_VBMETA_IMAGE_PATH="$OPTARG" 68*90c8c64dSAndroid Build Coastguard Worker ;; 69*90c8c64dSAndroid Build Coastguard Worker b) 70*90c8c64dSAndroid Build Coastguard Worker readonly OVERRIDE_BOOT_IMAGE_PATH="$OPTARG" 71*90c8c64dSAndroid Build Coastguard Worker ;; 72*90c8c64dSAndroid Build Coastguard Worker t) 73*90c8c64dSAndroid Build Coastguard Worker readonly OTATOOLS_ZIP="$OPTARG" 74*90c8c64dSAndroid Build Coastguard Worker ;; 75*90c8c64dSAndroid Build Coastguard Worker s) 76*90c8c64dSAndroid Build Coastguard Worker readonly INCLUDE_PRODUCT=true 77*90c8c64dSAndroid Build Coastguard Worker ;; 78*90c8c64dSAndroid Build Coastguard Worker d) 79*90c8c64dSAndroid Build Coastguard Worker readonly SKIP_VBMETA_REPLACE=true 80*90c8c64dSAndroid Build Coastguard Worker ;; 81*90c8c64dSAndroid Build Coastguard Worker \?) 82*90c8c64dSAndroid Build Coastguard Worker exit_badparam "Invalid options: -"$OPTARG"" 83*90c8c64dSAndroid Build Coastguard Worker ;; 84*90c8c64dSAndroid Build Coastguard Worker :) 85*90c8c64dSAndroid Build Coastguard Worker exit_badparam "Option -"$OPTARG" requires an argument." 86*90c8c64dSAndroid Build Coastguard Worker ;; 87*90c8c64dSAndroid Build Coastguard Worker esac 88*90c8c64dSAndroid Build Coastguard Workerdone 89*90c8c64dSAndroid Build Coastguard Worker 90*90c8c64dSAndroid Build Coastguard Workerif [[ -z "${VENDOR_VERSION+x}" && ! -z "${MODIFY_SYSTEM_SCRIPT+x}" ]] || \ 91*90c8c64dSAndroid Build Coastguard Worker [[ ! -z "${VENDOR_VERSION+x}" && -z "${MODIFY_SYSTEM_SCRIPT+x}" ]]; then 92*90c8c64dSAndroid Build Coastguard Worker exit_badparam "Options -v and -m must be set together." 93*90c8c64dSAndroid Build Coastguard Workerfi 94*90c8c64dSAndroid Build Coastguard Worker 95*90c8c64dSAndroid Build Coastguard Workershift "$((OPTIND-1))" 96*90c8c64dSAndroid Build Coastguard Worker 97*90c8c64dSAndroid Build Coastguard Workerif [[ $# -lt 3 ]]; then 98*90c8c64dSAndroid Build Coastguard Worker exit_badparam "Unexpected number of arguments" 99*90c8c64dSAndroid Build Coastguard Workerfi 100*90c8c64dSAndroid Build Coastguard Worker 101*90c8c64dSAndroid Build Coastguard Workerreadonly SYSTEM_DIR="$1" 102*90c8c64dSAndroid Build Coastguard Workerreadonly DEVICE_DIR="$2" 103*90c8c64dSAndroid Build Coastguard Workerreadonly DIST_DIR="$3" 104*90c8c64dSAndroid Build Coastguard Workerreadonly TEMP_DIR="$(mktemp -d /tmp/"$(basename $0)"_XXXXXXXX)" 105*90c8c64dSAndroid Build Coastguard Worker 106*90c8c64dSAndroid Build Coastguard Workerreadonly SYSTEM_TARGET_FILES_ARCHIVE="$(find "$SYSTEM_DIR" -name "*-target_files-*.zip" -print)" 107*90c8c64dSAndroid Build Coastguard Workerif [[ ! -f "$SYSTEM_TARGET_FILES_ARCHIVE" ]]; then 108*90c8c64dSAndroid Build Coastguard Worker exit_badparam "Could not find system target files archive in $SYSTEM_DIR." 109*90c8c64dSAndroid Build Coastguard Workerfi 110*90c8c64dSAndroid Build Coastguard Worker 111*90c8c64dSAndroid Build Coastguard Workerreadonly DEVICE_ARCHIVE="$(find "$DEVICE_DIR" -name "*-img-*.zip" -print)" 112*90c8c64dSAndroid Build Coastguard Workerif [[ ! -f "$DEVICE_ARCHIVE" ]]; then 113*90c8c64dSAndroid Build Coastguard Worker exit_badparam "Could not find device img archive in $DEVICE_DIR." 114*90c8c64dSAndroid Build Coastguard Workerfi 115*90c8c64dSAndroid Build Coastguard Worker 116*90c8c64dSAndroid Build Coastguard Workerreadonly DEVICE_TARGET_FILES_ARCHIVE="$(find "$DEVICE_DIR" -name "*-target_files-*.zip" -print)" 117*90c8c64dSAndroid Build Coastguard Workerif [[ ! -f "$DEVICE_TARGET_FILES_ARCHIVE" ]]; then 118*90c8c64dSAndroid Build Coastguard Worker exit_badparam "Could not find device target_files archive in $DEVICE_DIR." 119*90c8c64dSAndroid Build Coastguard Workerfi 120*90c8c64dSAndroid Build Coastguard Worker 121*90c8c64dSAndroid Build Coastguard Workerif [[ ! -z "${MODIFY_SYSTEM_SCRIPT+x}" && ! -f "$MODIFY_SYSTEM_SCRIPT" ]]; then 122*90c8c64dSAndroid Build Coastguard Worker exit_badparam "Script not found: "$MODIFY_SYSTEM_SCRIPT"" 123*90c8c64dSAndroid Build Coastguard Workerfi 124*90c8c64dSAndroid Build Coastguard Worker 125*90c8c64dSAndroid Build Coastguard Workerif [[ ! -z "${OVERRIDE_VBMETA_IMAGE_PATH+x}" && ! -f "$OVERRIDE_VBMETA_IMAGE_PATH" ]]; then 126*90c8c64dSAndroid Build Coastguard Worker exit_badparam "Specified vbmeta.img not found: "$OVERRIDE_VBMETA_IMAGE_PATH"" 127*90c8c64dSAndroid Build Coastguard Workerfi 128*90c8c64dSAndroid Build Coastguard Worker 129*90c8c64dSAndroid Build Coastguard Workerif [[ ! -z "${OVERRIDE_BOOT_IMAGE_PATH+x}" && ! -f "$OVERRIDE_BOOT_IMAGE_PATH" ]]; then 130*90c8c64dSAndroid Build Coastguard Worker exit_badparam "Specified boot image not found: "$OVERRIDE_BOOT_IMAGE_PATH"" 131*90c8c64dSAndroid Build Coastguard Workerfi 132*90c8c64dSAndroid Build Coastguard Worker 133*90c8c64dSAndroid Build Coastguard Workerreadonly DEVICE_ARTIFACTS_DIR="$TEMP_DIR"/device_archive_artifacts 134*90c8c64dSAndroid Build Coastguard Workerreadonly DEVICE_IMAGES_DIR="$DEVICE_ARTIFACTS_DIR"/IMAGES 135*90c8c64dSAndroid Build Coastguard Workerreadonly SYSTEM_ARTIFACTS_DIR="$TEMP_DIR"/system_artifacts 136*90c8c64dSAndroid Build Coastguard Workerreadonly SYSTEM_IMAGES_DIR="$SYSTEM_ARTIFACTS_DIR"/IMAGES 137*90c8c64dSAndroid Build Coastguard Workerreadonly OTATOOLS_DIR="$TEMP_DIR"/otatools 138*90c8c64dSAndroid Build Coastguard Worker 139*90c8c64dSAndroid Build Coastguard Workerreadonly SPL_PROPERTY_NAME="ro.build.version.security_patch" 140*90c8c64dSAndroid Build Coastguard Workerreadonly SYSTEM_BUILD_PROP="SYSTEM/build.prop" 141*90c8c64dSAndroid Build Coastguard Worker 142*90c8c64dSAndroid Build Coastguard Workerdeclare -a EXTRACT_SYSTEM_FILE_LIST 143*90c8c64dSAndroid Build Coastguard WorkerEXTRACT_SYSTEM_FILE_LIST=( 144*90c8c64dSAndroid Build Coastguard Worker IMAGES/system.img \ 145*90c8c64dSAndroid Build Coastguard Worker IMAGES/vbmeta.img \ 146*90c8c64dSAndroid Build Coastguard Worker "$SYSTEM_BUILD_PROP" \ 147*90c8c64dSAndroid Build Coastguard Worker) 148*90c8c64dSAndroid Build Coastguard Worker 149*90c8c64dSAndroid Build Coastguard Workerdeclare -a EXTRACT_VINTF_SYSTEM_FILE_LIST 150*90c8c64dSAndroid Build Coastguard WorkerEXTRACT_VINTF_SYSTEM_FILE_LIST=( 151*90c8c64dSAndroid Build Coastguard Worker "$SYSTEM_BUILD_PROP" \ 152*90c8c64dSAndroid Build Coastguard Worker) 153*90c8c64dSAndroid Build Coastguard Worker 154*90c8c64dSAndroid Build Coastguard Workerdeclare -a EXTRACT_DEVICE_FILE_LIST 155*90c8c64dSAndroid Build Coastguard WorkerEXTRACT_DEVICE_FILE_LIST=( 156*90c8c64dSAndroid Build Coastguard Worker */build.prop \ 157*90c8c64dSAndroid Build Coastguard Worker META/* \ 158*90c8c64dSAndroid Build Coastguard Worker) 159*90c8c64dSAndroid Build Coastguard Worker 160*90c8c64dSAndroid Build Coastguard Workerdeclare -A SYSTEM_SEARCH_PATH 161*90c8c64dSAndroid Build Coastguard WorkerSYSTEM_SEARCH_PATH=( \ 162*90c8c64dSAndroid Build Coastguard Worker [/system]="SYSTEM" \ 163*90c8c64dSAndroid Build Coastguard Worker [/product]="PRODUCT SYSTEM/product" \ 164*90c8c64dSAndroid Build Coastguard Worker [/system_ext]="SYSTEM_EXT SYSTEM/system_ext" \ 165*90c8c64dSAndroid Build Coastguard Worker) 166*90c8c64dSAndroid Build Coastguard Worker 167*90c8c64dSAndroid Build Coastguard Workerdeclare -A DEVICE_SEARCH_PATH 168*90c8c64dSAndroid Build Coastguard Worker# Mixed build will not have /vendor to SYSTEM/vendor case 169*90c8c64dSAndroid Build Coastguard WorkerDEVICE_SEARCH_PATH=( \ 170*90c8c64dSAndroid Build Coastguard Worker [/vendor]="VENDOR" \ 171*90c8c64dSAndroid Build Coastguard Worker [/odm]="ODM VENDOR/odm" \ 172*90c8c64dSAndroid Build Coastguard Worker) 173*90c8c64dSAndroid Build Coastguard Worker 174*90c8c64dSAndroid Build Coastguard Worker### 175*90c8c64dSAndroid Build Coastguard Worker# Uncompress otatools.zip and get vintf file list. 176*90c8c64dSAndroid Build Coastguard Workerif [[ ! -f "$OTATOOLS_ZIP" ]]; then 177*90c8c64dSAndroid Build Coastguard Worker echo "WARNING: otatools.zip is missing. Add \"-t otatools.zip\" to enable checkvintf" 178*90c8c64dSAndroid Build Coastguard Workerelse 179*90c8c64dSAndroid Build Coastguard Worker readonly OTATOOLS_AVAILABLE=true 180*90c8c64dSAndroid Build Coastguard Worker # Uncompress otatools 181*90c8c64dSAndroid Build Coastguard Worker mkdir -p "$OTATOOLS_DIR" 182*90c8c64dSAndroid Build Coastguard Worker unzip "$OTATOOLS_ZIP" bin/* lib64/* -d "$OTATOOLS_DIR" 183*90c8c64dSAndroid Build Coastguard Worker # Set paths for using prebuilt host binaries. 184*90c8c64dSAndroid Build Coastguard Worker export PATH="$OTATOOLS_DIR"/bin:"$PATH" 185*90c8c64dSAndroid Build Coastguard Worker export LD_LIBRARY_PATH="$OTATOOLS_DIR"/lib64:"$LD_LIBRARY_PATH" 186*90c8c64dSAndroid Build Coastguard Worker 187*90c8c64dSAndroid Build Coastguard Worker # Add vintf file to extract file list 188*90c8c64dSAndroid Build Coastguard Worker declare -a VINTF_DUMP_FILE_LIST 189*90c8c64dSAndroid Build Coastguard Worker VINTF_DUMP_FILE_LIST=( "$(checkvintf --dump-file-list)" ) 190*90c8c64dSAndroid Build Coastguard Worker 191*90c8c64dSAndroid Build Coastguard Worker for vintf_file_list in ${VINTF_DUMP_FILE_LIST[*]}; do 192*90c8c64dSAndroid Build Coastguard Worker if [[ "$vintf_file_list" == */ ]]; then 193*90c8c64dSAndroid Build Coastguard Worker vintf_file_list="$vintf_file_list"\* 194*90c8c64dSAndroid Build Coastguard Worker # Create system vintf file list for system target files archive 195*90c8c64dSAndroid Build Coastguard Worker for system_dir in "${!SYSTEM_SEARCH_PATH[@]}"; do 196*90c8c64dSAndroid Build Coastguard Worker if [[ "$vintf_file_list" == "$system_dir"/* ]]; then 197*90c8c64dSAndroid Build Coastguard Worker for search_dir in ${SYSTEM_SEARCH_PATH["$system_dir"]}; do 198*90c8c64dSAndroid Build Coastguard Worker search_file=${vintf_file_list/$system_dir/$search_dir} 199*90c8c64dSAndroid Build Coastguard Worker unzip -l "$SYSTEM_TARGET_FILES_ARCHIVE" "$search_file" > /dev/null && \ 200*90c8c64dSAndroid Build Coastguard Worker EXTRACT_VINTF_SYSTEM_FILE_LIST+=( "$search_file" ) 201*90c8c64dSAndroid Build Coastguard Worker done 202*90c8c64dSAndroid Build Coastguard Worker break 203*90c8c64dSAndroid Build Coastguard Worker fi 204*90c8c64dSAndroid Build Coastguard Worker done 205*90c8c64dSAndroid Build Coastguard Worker # Create device vintf file list for device target files archive 206*90c8c64dSAndroid Build Coastguard Worker for device_dir in "${!DEVICE_SEARCH_PATH[@]}"; do 207*90c8c64dSAndroid Build Coastguard Worker if [[ "$vintf_file_list" == "$device_dir"/* ]]; then 208*90c8c64dSAndroid Build Coastguard Worker for search_dir in ${DEVICE_SEARCH_PATH["$device_dir"]}; do 209*90c8c64dSAndroid Build Coastguard Worker search_file=${vintf_file_list/$device_dir/$search_dir} 210*90c8c64dSAndroid Build Coastguard Worker unzip -l "$DEVICE_TARGET_FILES_ARCHIVE" "$search_file" > /dev/null && \ 211*90c8c64dSAndroid Build Coastguard Worker EXTRACT_DEVICE_FILE_LIST+=( "$search_file" ) 212*90c8c64dSAndroid Build Coastguard Worker done 213*90c8c64dSAndroid Build Coastguard Worker break 214*90c8c64dSAndroid Build Coastguard Worker fi 215*90c8c64dSAndroid Build Coastguard Worker done 216*90c8c64dSAndroid Build Coastguard Worker fi 217*90c8c64dSAndroid Build Coastguard Worker done 218*90c8c64dSAndroid Build Coastguard Workerfi 219*90c8c64dSAndroid Build Coastguard Worker 220*90c8c64dSAndroid Build Coastguard Worker### 221*90c8c64dSAndroid Build Coastguard Worker# Uncompress the system archives. 222*90c8c64dSAndroid Build Coastguard Workerif [[ "$INCLUDE_PRODUCT" == true ]]; then 223*90c8c64dSAndroid Build Coastguard Worker unzip -l "$SYSTEM_TARGET_FILES_ARCHIVE" | grep -q IMAGES/product.img && 224*90c8c64dSAndroid Build Coastguard Worker EXTRACT_SYSTEM_FILE_LIST+=(IMAGES/product.img) 225*90c8c64dSAndroid Build Coastguard Workerfi 226*90c8c64dSAndroid Build Coastguard Worker 227*90c8c64dSAndroid Build Coastguard Workermkdir -p "$SYSTEM_ARTIFACTS_DIR" 228*90c8c64dSAndroid Build Coastguard Worker# Get system images. 229*90c8c64dSAndroid Build Coastguard Workerunzip "$SYSTEM_TARGET_FILES_ARCHIVE" "${EXTRACT_SYSTEM_FILE_LIST[@]}" \ 230*90c8c64dSAndroid Build Coastguard Worker -d "$SYSTEM_ARTIFACTS_DIR" 231*90c8c64dSAndroid Build Coastguard Worker 232*90c8c64dSAndroid Build Coastguard Worker### 233*90c8c64dSAndroid Build Coastguard Worker# Uncompress the device archives. 234*90c8c64dSAndroid Build Coastguard Workermkdir -p "$DEVICE_IMAGES_DIR" 235*90c8c64dSAndroid Build Coastguard Worker# Get device images. 236*90c8c64dSAndroid Build Coastguard Workerunzip "$DEVICE_ARCHIVE" -d "$DEVICE_IMAGES_DIR" 237*90c8c64dSAndroid Build Coastguard Worker# Get the device meta data. 238*90c8c64dSAndroid Build Coastguard Workerunzip "$DEVICE_TARGET_FILES_ARCHIVE" "${EXTRACT_DEVICE_FILE_LIST[@]}" \ 239*90c8c64dSAndroid Build Coastguard Worker -d "$DEVICE_ARTIFACTS_DIR" 240*90c8c64dSAndroid Build Coastguard Worker 241*90c8c64dSAndroid Build Coastguard Worker### 242*90c8c64dSAndroid Build Coastguard Worker# Modify system.img if vendor version is provided. 243*90c8c64dSAndroid Build Coastguard Workerif [[ ! -z "${VENDOR_VERSION+x}" ]]; then 244*90c8c64dSAndroid Build Coastguard Worker # Create copy of system target files package that can be modified 245*90c8c64dSAndroid Build Coastguard Worker # since the original $SYSTEM_TARGET_FILES_ARCHIVE is a symlink to 246*90c8c64dSAndroid Build Coastguard Worker # prebuilt files in cache 247*90c8c64dSAndroid Build Coastguard Worker cp "$SYSTEM_TARGET_FILES_ARCHIVE" "$TEMP_DIR" 248*90c8c64dSAndroid Build Coastguard Worker readonly COPY_SYSTEM_TARGET_FILES_ARCHIVE="$TEMP_DIR"/"$(basename "$SYSTEM_TARGET_FILES_ARCHIVE")" 249*90c8c64dSAndroid Build Coastguard Worker 250*90c8c64dSAndroid Build Coastguard Worker # Check compatibility of security patch level 251*90c8c64dSAndroid Build Coastguard Worker readonly SYSTEM_SPL=$(sed -n -r "s/^"$SPL_PROPERTY_NAME"=(.*)$/\1/p" "$SYSTEM_ARTIFACTS_DIR"/"$SYSTEM_BUILD_PROP") 252*90c8c64dSAndroid Build Coastguard Worker readonly VENDOR_SPL=$(sed -n -r "s/^"$SPL_PROPERTY_NAME"=(.*)$/\1/p" "$DEVICE_ARTIFACTS_DIR"/"$SYSTEM_BUILD_PROP") 253*90c8c64dSAndroid Build Coastguard Worker declare -a args 254*90c8c64dSAndroid Build Coastguard Worker args=(-v "$VENDOR_VERSION" "$COPY_SYSTEM_TARGET_FILES_ARCHIVE") 255*90c8c64dSAndroid Build Coastguard Worker if [[ "$SYSTEM_SPL" != "$VENDOR_SPL" ]]; then 256*90c8c64dSAndroid Build Coastguard Worker echo "Security patch level mismatch detected..." 257*90c8c64dSAndroid Build Coastguard Worker echo " SPL of system: "$SYSTEM_SPL"" 258*90c8c64dSAndroid Build Coastguard Worker echo " SPL of vendor: "$VENDOR_SPL"" 259*90c8c64dSAndroid Build Coastguard Worker args+=("$VENDOR_SPL") 260*90c8c64dSAndroid Build Coastguard Worker fi 261*90c8c64dSAndroid Build Coastguard Worker "$MODIFY_SYSTEM_SCRIPT" "${args[@]}" 262*90c8c64dSAndroid Build Coastguard Worker # Replace system.img with newly modified system.img 263*90c8c64dSAndroid Build Coastguard Worker unzip -o "$COPY_SYSTEM_TARGET_FILES_ARCHIVE" IMAGES/system.img -d "$SYSTEM_ARTIFACTS_DIR" 264*90c8c64dSAndroid Build Coastguard Workerfi 265*90c8c64dSAndroid Build Coastguard Worker 266*90c8c64dSAndroid Build Coastguard Worker# Check vintf 267*90c8c64dSAndroid Build Coastguard Workerif [[ "$OTATOOLS_AVAILABLE" == true ]]; then 268*90c8c64dSAndroid Build Coastguard Worker # Overwrite VINTF system matrix to device artifacts dir 269*90c8c64dSAndroid Build Coastguard Worker unzip -o "$SYSTEM_TARGET_FILES_ARCHIVE" "${EXTRACT_VINTF_SYSTEM_FILE_LIST[@]}" \ 270*90c8c64dSAndroid Build Coastguard Worker -d "$DEVICE_ARTIFACTS_DIR" 271*90c8c64dSAndroid Build Coastguard Worker check_target_files_vintf "$DEVICE_ARTIFACTS_DIR" 272*90c8c64dSAndroid Build Coastguard Workerfi 273*90c8c64dSAndroid Build Coastguard Worker 274*90c8c64dSAndroid Build Coastguard Worker### 275*90c8c64dSAndroid Build Coastguard Worker# Overwrite artifacts in the device archive to create the Mixed Build artifacts. 276*90c8c64dSAndroid Build Coastguard Workercp "$SYSTEM_IMAGES_DIR"/system.img "$DEVICE_IMAGES_DIR"/ 277*90c8c64dSAndroid Build Coastguard Workerif [[ "$INCLUDE_PRODUCT" == true ]]; then 278*90c8c64dSAndroid Build Coastguard Worker if [[ -f "$SYSTEM_IMAGES_DIR"/product.img ]]; then 279*90c8c64dSAndroid Build Coastguard Worker cp "$SYSTEM_IMAGES_DIR"/product.img "$DEVICE_IMAGES_DIR"/ 280*90c8c64dSAndroid Build Coastguard Worker else 281*90c8c64dSAndroid Build Coastguard Worker rm -f "$DEVICE_IMAGES_DIR"/product.img 282*90c8c64dSAndroid Build Coastguard Worker # Removed product partition from required partition list 283*90c8c64dSAndroid Build Coastguard Worker sed -i "/partition-exists=product$/d" "$DEVICE_IMAGES_DIR"/android-info.txt 284*90c8c64dSAndroid Build Coastguard Worker fi 285*90c8c64dSAndroid Build Coastguard Workerfi 286*90c8c64dSAndroid Build Coastguard Worker 287*90c8c64dSAndroid Build Coastguard Workerif [[ "$SKIP_VBMETA_REPLACE" == true ]]; then 288*90c8c64dSAndroid Build Coastguard Worker # Totally skip the vbmeta.img replacement 289*90c8c64dSAndroid Build Coastguard Worker echo "Skip vbmeta.img replacement." 290*90c8c64dSAndroid Build Coastguard Workerelse 291*90c8c64dSAndroid Build Coastguard Worker # Only override vbmeta if it is already present since fastboot update will try 292*90c8c64dSAndroid Build Coastguard Worker # to flash whatever is in the archive. 293*90c8c64dSAndroid Build Coastguard Worker if [[ -f "$DEVICE_IMAGES_DIR"/vbmeta.img ]]; then 294*90c8c64dSAndroid Build Coastguard Worker readonly VBMETA_IMAGE_PATH="${OVERRIDE_VBMETA_IMAGE_PATH:-"$SYSTEM_IMAGES_DIR"/vbmeta.img}" 295*90c8c64dSAndroid Build Coastguard Worker cp "$VBMETA_IMAGE_PATH" "$DEVICE_IMAGES_DIR"/ 296*90c8c64dSAndroid Build Coastguard Worker fi 297*90c8c64dSAndroid Build Coastguard Workerfi 298*90c8c64dSAndroid Build Coastguard Worker 299*90c8c64dSAndroid Build Coastguard Worker# Override boot.img with the provided boot image file since fastboot update cmd 300*90c8c64dSAndroid Build Coastguard Worker# will try to flash boot.img in the archive. 301*90c8c64dSAndroid Build Coastguard Workerif [[ ! -z "${OVERRIDE_BOOT_IMAGE_PATH+x}" && -f "$DEVICE_IMAGES_DIR"/boot.img ]]; then 302*90c8c64dSAndroid Build Coastguard Worker cp "$OVERRIDE_BOOT_IMAGE_PATH" "$DEVICE_IMAGES_DIR"/boot.img 303*90c8c64dSAndroid Build Coastguard Workerfi 304*90c8c64dSAndroid Build Coastguard Worker 305*90c8c64dSAndroid Build Coastguard Worker### 306*90c8c64dSAndroid Build Coastguard Worker# Create the Mixed Build archive. 307*90c8c64dSAndroid Build Coastguard Worker( 308*90c8c64dSAndroid Build Coastguard Worker cd "$DEVICE_IMAGES_DIR" 309*90c8c64dSAndroid Build Coastguard Worker zip -r mixed.zip ./* 310*90c8c64dSAndroid Build Coastguard Worker) 311*90c8c64dSAndroid Build Coastguard Worker 312*90c8c64dSAndroid Build Coastguard Worker### 313*90c8c64dSAndroid Build Coastguard Worker# Archive the artifacts. 314*90c8c64dSAndroid Build Coastguard Workerif [ -n "$DIST_DIR" ]; then 315*90c8c64dSAndroid Build Coastguard Worker mkdir -p "$DIST_DIR" || true 316*90c8c64dSAndroid Build Coastguard Workerfi 317*90c8c64dSAndroid Build Coastguard Worker# Archive all the device artifacts. 318*90c8c64dSAndroid Build Coastguard Workerrsync --archive --verbose --copy-links --exclude='logs' \ 319*90c8c64dSAndroid Build Coastguard Worker "$DEVICE_DIR"/* "$DIST_DIR" 320*90c8c64dSAndroid Build Coastguard Worker# Overwrite the image archive with the Mixed Build archive. 321*90c8c64dSAndroid Build Coastguard WorkerOUT_ARCHIVE="$DIST_DIR"/"$(basename $DEVICE_ARCHIVE)" 322*90c8c64dSAndroid Build Coastguard Workercp "$DEVICE_IMAGES_DIR"/mixed.zip "$OUT_ARCHIVE" 323*90c8c64dSAndroid Build Coastguard Worker# Overwrite android-info.txt with the updated one. 324*90c8c64dSAndroid Build Coastguard Workercp "$DEVICE_IMAGES_DIR"/android-info.txt "$DIST_DIR"/ 325