1*e5eeaa8eSAndroid Build Coastguard Worker#!/bin/bash 2*e5eeaa8eSAndroid Build Coastguard Worker 3*e5eeaa8eSAndroid Build Coastguard Worker# Copyright (C) 2020 The Android Open Source Project 4*e5eeaa8eSAndroid Build Coastguard Worker# 5*e5eeaa8eSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 6*e5eeaa8eSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 7*e5eeaa8eSAndroid Build Coastguard Worker# You may obtain a copy of the License at 8*e5eeaa8eSAndroid Build Coastguard Worker# 9*e5eeaa8eSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 10*e5eeaa8eSAndroid Build Coastguard Worker# 11*e5eeaa8eSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 12*e5eeaa8eSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 13*e5eeaa8eSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*e5eeaa8eSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 15*e5eeaa8eSAndroid Build Coastguard Worker# limitations under the License. 16*e5eeaa8eSAndroid Build Coastguard Worker 17*e5eeaa8eSAndroid Build Coastguard Workerset -e 18*e5eeaa8eSAndroid Build Coastguard Worker 19*e5eeaa8eSAndroid Build Coastguard Workerbootstrap= 20*e5eeaa8eSAndroid Build Coastguard Workerall= 21*e5eeaa8eSAndroid Build Coastguard Workerroot= 22*e5eeaa8eSAndroid Build Coastguard Workerblock_apexes= 23*e5eeaa8eSAndroid Build Coastguard Worker 24*e5eeaa8eSAndroid Build Coastguard Workerfunction usage() { 25*e5eeaa8eSAndroid Build Coastguard Worker echo "usage: $0 [--bootstrap|--all] [--block apexes(colol-separated)] --root root" && exit 1 26*e5eeaa8eSAndroid Build Coastguard Worker} 27*e5eeaa8eSAndroid Build Coastguard Worker 28*e5eeaa8eSAndroid Build Coastguard Workerwhile [[ $# -gt 0 ]]; do 29*e5eeaa8eSAndroid Build Coastguard Worker case "$1" in 30*e5eeaa8eSAndroid Build Coastguard Worker --bootstrap) 31*e5eeaa8eSAndroid Build Coastguard Worker bootstrap=yes 32*e5eeaa8eSAndroid Build Coastguard Worker shift 33*e5eeaa8eSAndroid Build Coastguard Worker ;; 34*e5eeaa8eSAndroid Build Coastguard Worker --all) 35*e5eeaa8eSAndroid Build Coastguard Worker all=yes 36*e5eeaa8eSAndroid Build Coastguard Worker shift 37*e5eeaa8eSAndroid Build Coastguard Worker ;; 38*e5eeaa8eSAndroid Build Coastguard Worker --block) 39*e5eeaa8eSAndroid Build Coastguard Worker block_apexes=$2 40*e5eeaa8eSAndroid Build Coastguard Worker shift 41*e5eeaa8eSAndroid Build Coastguard Worker shift 42*e5eeaa8eSAndroid Build Coastguard Worker ;; 43*e5eeaa8eSAndroid Build Coastguard Worker --root) 44*e5eeaa8eSAndroid Build Coastguard Worker root=$2 45*e5eeaa8eSAndroid Build Coastguard Worker shift 46*e5eeaa8eSAndroid Build Coastguard Worker shift 47*e5eeaa8eSAndroid Build Coastguard Worker ;; 48*e5eeaa8eSAndroid Build Coastguard Worker *) 49*e5eeaa8eSAndroid Build Coastguard Worker usage 50*e5eeaa8eSAndroid Build Coastguard Worker esac 51*e5eeaa8eSAndroid Build Coastguard Workerdone 52*e5eeaa8eSAndroid Build Coastguard Worker 53*e5eeaa8eSAndroid Build Coastguard Workerif [ -z $root ]; then 54*e5eeaa8eSAndroid Build Coastguard Worker usage 55*e5eeaa8eSAndroid Build Coastguard Workerfi 56*e5eeaa8eSAndroid Build Coastguard Worker 57*e5eeaa8eSAndroid Build Coastguard Workerif [ ! -z $bootstrap ] && [ ! -z $all ]; then 58*e5eeaa8eSAndroid Build Coastguard Worker usage 59*e5eeaa8eSAndroid Build Coastguard Workerfi 60*e5eeaa8eSAndroid Build Coastguard Worker 61*e5eeaa8eSAndroid Build Coastguard Workeractivate_level=0 62*e5eeaa8eSAndroid Build Coastguard Workerif [ ! -z $bootstrap ]; then 63*e5eeaa8eSAndroid Build Coastguard Worker activate_level=1 64*e5eeaa8eSAndroid Build Coastguard Workerelif [ ! -z $all ]; then 65*e5eeaa8eSAndroid Build Coastguard Worker activate_level=2 66*e5eeaa8eSAndroid Build Coastguard Workerfi 67*e5eeaa8eSAndroid Build Coastguard Worker 68*e5eeaa8eSAndroid Build Coastguard Workerfunction get_level() { 69*e5eeaa8eSAndroid Build Coastguard Worker case $1 in 70*e5eeaa8eSAndroid Build Coastguard Worker com.android.art|com.android.runtime|com.android.i18n|com.android.tzdata|com.android.vndk.vR) 71*e5eeaa8eSAndroid Build Coastguard Worker echo 1 ;; 72*e5eeaa8eSAndroid Build Coastguard Worker *) 73*e5eeaa8eSAndroid Build Coastguard Worker echo 2 ;; 74*e5eeaa8eSAndroid Build Coastguard Worker esac 75*e5eeaa8eSAndroid Build Coastguard Worker} 76*e5eeaa8eSAndroid Build Coastguard Worker 77*e5eeaa8eSAndroid Build Coastguard Workerfunction abs() { 78*e5eeaa8eSAndroid Build Coastguard Worker if [[ $1 = /* ]]; then 79*e5eeaa8eSAndroid Build Coastguard Worker echo $1 80*e5eeaa8eSAndroid Build Coastguard Worker else 81*e5eeaa8eSAndroid Build Coastguard Worker echo $(realpath $(pwd)/$1) 82*e5eeaa8eSAndroid Build Coastguard Worker fi 83*e5eeaa8eSAndroid Build Coastguard Worker} 84*e5eeaa8eSAndroid Build Coastguard Worker 85*e5eeaa8eSAndroid Build Coastguard WorkerROOT=$(abs $root) 86*e5eeaa8eSAndroid Build Coastguard Worker 87*e5eeaa8eSAndroid Build Coastguard Worker# to use relative paths 88*e5eeaa8eSAndroid Build Coastguard Workercd $(dirname $0) 89*e5eeaa8eSAndroid Build Coastguard Worker 90*e5eeaa8eSAndroid Build Coastguard Worker# clean /apex directory 91*e5eeaa8eSAndroid Build Coastguard Workerrm -iRf $ROOT/apex 92*e5eeaa8eSAndroid Build Coastguard Worker 93*e5eeaa8eSAndroid Build Coastguard Worker# prepare /apex directory 94*e5eeaa8eSAndroid Build Coastguard Worker# 1) activate APEXes 95*e5eeaa8eSAndroid Build Coastguard Worker# 2) generate /apex/apex-info-list.xml 96*e5eeaa8eSAndroid Build Coastguard Worker 97*e5eeaa8eSAndroid Build Coastguard Workermkdir -p $ROOT/apex 98*e5eeaa8eSAndroid Build Coastguard Worker 99*e5eeaa8eSAndroid Build Coastguard WorkerblockIndex=1 100*e5eeaa8eSAndroid Build Coastguard WorkerapexInfo=$ROOT/apex/apex-info-list.xml 101*e5eeaa8eSAndroid Build Coastguard Workerecho "<?xml version=\"1.0\" encoding=\"utf-8\"?>" > $apexInfo 102*e5eeaa8eSAndroid Build Coastguard Workerecho "<apex-info-list>" > $apexInfo 103*e5eeaa8eSAndroid Build Coastguard Worker 104*e5eeaa8eSAndroid Build Coastguard Workerfor partition in system product system_ext vendor odm; do 105*e5eeaa8eSAndroid Build Coastguard Worker if [ -d $ROOT/$partition/apex ]; then 106*e5eeaa8eSAndroid Build Coastguard Worker for src in $ROOT/$partition/apex/*/; do 107*e5eeaa8eSAndroid Build Coastguard Worker if test ! -d $src; then 108*e5eeaa8eSAndroid Build Coastguard Worker continue 109*e5eeaa8eSAndroid Build Coastguard Worker fi 110*e5eeaa8eSAndroid Build Coastguard Worker name=$(basename $src) 111*e5eeaa8eSAndroid Build Coastguard Worker dst=$ROOT/apex/$name 112*e5eeaa8eSAndroid Build Coastguard Worker # b/234792422 Atest is running with PATH prebuilts/build-tools/path/linux-x86 113*e5eeaa8eSAndroid Build Coastguard Worker # where the realpath does not support --relative-to option. Use shell 114*e5eeaa8eSAndroid Build Coastguard Worker # parameter expansion to avoid invalid options. 115*e5eeaa8eSAndroid Build Coastguard Worker module_path="${src/$ROOT/}" 116*e5eeaa8eSAndroid Build Coastguard Worker # simulate block apexes are activated from /dev/block/vdaN 117*e5eeaa8eSAndroid Build Coastguard Worker if [[ "$block_apexes" == *"$name"* ]]; then 118*e5eeaa8eSAndroid Build Coastguard Worker module_path=/dev/block/vda$blockIndex 119*e5eeaa8eSAndroid Build Coastguard Worker ((blockIndex=blockIndex+1)) 120*e5eeaa8eSAndroid Build Coastguard Worker fi 121*e5eeaa8eSAndroid Build Coastguard Worker if [ $(get_level $name) -le $activate_level ]; then 122*e5eeaa8eSAndroid Build Coastguard Worker # simulate "activation" by copying "apex dir" into /apex 123*e5eeaa8eSAndroid Build Coastguard Worker cp -r $src $dst 124*e5eeaa8eSAndroid Build Coastguard Worker echo " <apex-info moduleName=\"$name\" modulePath=\"$module_path\" partition=\"${partition^^}\" isFactory=\"true\" isActive=\"true\" />" >> $apexInfo 125*e5eeaa8eSAndroid Build Coastguard Worker fi 126*e5eeaa8eSAndroid Build Coastguard Worker done 127*e5eeaa8eSAndroid Build Coastguard Worker fi 128*e5eeaa8eSAndroid Build Coastguard Workerdone 129*e5eeaa8eSAndroid Build Coastguard Worker 130*e5eeaa8eSAndroid Build Coastguard Workerecho "</apex-info-list>" >> $apexInfo 131