1*4d7e907cSAndroid Build Coastguard Worker#/usr/bin/env bash 2*4d7e907cSAndroid Build Coastguard Worker 3*4d7e907cSAndroid Build Coastguard Workerset -euo pipefail 4*4d7e907cSAndroid Build Coastguard Worker 5*4d7e907cSAndroid Build Coastguard Workerif (echo "$@" |grep -qe -h); then 6*4d7e907cSAndroid Build Coastguard Worker echo "This script will generate a new HAL version identical to an other one." 7*4d7e907cSAndroid Build Coastguard Worker echo "This helps creating the boilerplate for a new version." 8*4d7e907cSAndroid Build Coastguard Worker echo 9*4d7e907cSAndroid Build Coastguard Worker echo "USAGE: $0 [BASE_VERSION] [NEW_VERSION]" 10*4d7e907cSAndroid Build Coastguard Worker echo " BASE_VERSION default value is the highest version currently existing" 11*4d7e907cSAndroid Build Coastguard Worker echo " NEW_VERSION default value is BASE_VERSION + 1" 12*4d7e907cSAndroid Build Coastguard Worker echo 13*4d7e907cSAndroid Build Coastguard Worker echo "Example: to generate a V6.0 by copying V5, do: $0 5.0 6.0" 14*4d7e907cSAndroid Build Coastguard Worker exit 15*4d7e907cSAndroid Build Coastguard Workerfi 16*4d7e907cSAndroid Build Coastguard Workerreadonly HAL_DIRECTORY=hardware/interfaces/audio 17*4d7e907cSAndroid Build Coastguard Workerreadonly HAL_VTS_DIRECTORY=core/all-versions/vts/functional 18*4d7e907cSAndroid Build Coastguard Workerreadonly HAL_VTS_FILE=AudioPrimaryHidlHalTest.cpp 19*4d7e907cSAndroid Build Coastguard Workerreadonly HAL_EFFECT_VTS_DIRECTORY=effect/all-versions/vts/functional 20*4d7e907cSAndroid Build Coastguard Workerreadonly HAL_SERVICE_DIRECTORY=common/all-versions/default/service/ 21*4d7e907cSAndroid Build Coastguard Workerreadonly HAL_SERVICE_CPP=service.cpp 22*4d7e907cSAndroid Build Coastguard Worker 23*4d7e907cSAndroid Build Coastguard Workerreadonly FWK_DIRECTORY=frameworks/av/media/libaudiohal 24*4d7e907cSAndroid Build Coastguard Workerreadonly IMPL_DIRECTORY=impl 25*4d7e907cSAndroid Build Coastguard Workerreadonly IMPL_FACTORYHAL=FactoryHalHidl.cpp 26*4d7e907cSAndroid Build Coastguard Worker 27*4d7e907cSAndroid Build Coastguard Workerreadonly VTS_DIRECTORY=test/vts-testcase/hal/audio 28*4d7e907cSAndroid Build Coastguard Workerreadonly VTS_LIST=test/vts/tools/build/tasks/list/vts_test_lib_hidl_package_list.mk 29*4d7e907cSAndroid Build Coastguard Workerreadonly WATCHDOG=frameworks/base/services/core/java/com/android/server/Watchdog.java 30*4d7e907cSAndroid Build Coastguard Workerreadonly DUMP_UTILS=frameworks/native/libs/dumputils/dump_utils.cpp 31*4d7e907cSAndroid Build Coastguard Workerreadonly GSI_CURRENT=build/make/target/product/gsi/current.txt 32*4d7e907cSAndroid Build Coastguard Worker 33*4d7e907cSAndroid Build Coastguard Workerreadonly BASE_VERSION=${1:-$(ls $ANDROID_BUILD_TOP/$HAL_DIRECTORY | grep -E '[0-9]+\.[0-9]+' | 34*4d7e907cSAndroid Build Coastguard Worker sort -n |tail -n1)} 35*4d7e907cSAndroid Build Coastguard Workerreadonly BASE_MAJOR_VERSION=${BASE_VERSION%.*} 36*4d7e907cSAndroid Build Coastguard Workerreadonly BASE_MINOR_VERSION=${BASE_VERSION##*.} 37*4d7e907cSAndroid Build Coastguard Worker 38*4d7e907cSAndroid Build Coastguard Workerreadonly NEW_VERSION="${2:-$((${BASE_MAJOR_VERSION} + 1)).0}" 39*4d7e907cSAndroid Build Coastguard Workerreadonly NEW_MAJOR_VERSION=${NEW_VERSION%.*} 40*4d7e907cSAndroid Build Coastguard Workerreadonly NEW_MINOR_VERSION=${NEW_VERSION##*.} 41*4d7e907cSAndroid Build Coastguard Worker 42*4d7e907cSAndroid Build Coastguard Worker 43*4d7e907cSAndroid Build Coastguard Workerreadonly BASE_VERSION_REGEX="${BASE_MAJOR_VERSION}[._]${BASE_MINOR_VERSION}" 44*4d7e907cSAndroid Build Coastguard Workerreadonly NEW_VERSION_REGEX="${NEW_MAJOR_VERSION}[._]${NEW_MINOR_VERSION}" 45*4d7e907cSAndroid Build Coastguard Worker 46*4d7e907cSAndroid Build Coastguard Workerreadonly BASE_VERSION_ESCAPE="${BASE_MAJOR_VERSION}\.${BASE_MINOR_VERSION}" 47*4d7e907cSAndroid Build Coastguard Workerreadonly BASE_VERSION_UNDERSCORE="${BASE_MAJOR_VERSION}_${BASE_MINOR_VERSION}" 48*4d7e907cSAndroid Build Coastguard Workerreadonly NEW_VERSION_UNDERSCORE="${NEW_MAJOR_VERSION}_${NEW_MINOR_VERSION}" 49*4d7e907cSAndroid Build Coastguard Worker 50*4d7e907cSAndroid Build Coastguard Workerreadonly HAL_VTS_CONFIG_FILE_GLOB="*Audio*V${BASE_VERSION_UNDERSCORE}*Test.xml" 51*4d7e907cSAndroid Build Coastguard Worker 52*4d7e907cSAndroid Build Coastguard WorkerupdateVersion() { 53*4d7e907cSAndroid Build Coastguard Worker if [ $1 == "-e" ]; then 54*4d7e907cSAndroid Build Coastguard Worker local -r REGEX="$2"; shift 2 55*4d7e907cSAndroid Build Coastguard Worker else 56*4d7e907cSAndroid Build Coastguard Worker local -r REGEX="$BASE_VERSION_REGEX" 57*4d7e907cSAndroid Build Coastguard Worker fi 58*4d7e907cSAndroid Build Coastguard Worker awk -i inplace -e "{if (!/$REGEX/) print; else { 59*4d7e907cSAndroid Build Coastguard Worker if (original_before) print 60*4d7e907cSAndroid Build Coastguard Worker if (original_after) original_line=\$0; 61*4d7e907cSAndroid Build Coastguard Worker 62*4d7e907cSAndroid Build Coastguard Worker gsub(/$BASE_VERSION_ESCAPE/,\"$NEW_VERSION\"); 63*4d7e907cSAndroid Build Coastguard Worker gsub(/$BASE_VERSION_UNDERSCORE/,\"$NEW_VERSION_UNDERSCORE\"); 64*4d7e907cSAndroid Build Coastguard Worker gsub(/MAJOR_VERSION=$BASE_MAJOR_VERSION/, 65*4d7e907cSAndroid Build Coastguard Worker \"MAJOR_VERSION=$NEW_MAJOR_VERSION\"); 66*4d7e907cSAndroid Build Coastguard Worker gsub(/MINOR_VERSION=$BASE_MINOR_VERSION/, 67*4d7e907cSAndroid Build Coastguard Worker \"MINOR_VERSION=$NEW_MINOR_VERSION\"); 68*4d7e907cSAndroid Build Coastguard Worker 69*4d7e907cSAndroid Build Coastguard Worker print 70*4d7e907cSAndroid Build Coastguard Worker if (original_after) print original_line 71*4d7e907cSAndroid Build Coastguard Worker }}" "$@" 72*4d7e907cSAndroid Build Coastguard Worker} 73*4d7e907cSAndroid Build Coastguard Worker 74*4d7e907cSAndroid Build Coastguard WorkerupdateAudioVersion() { 75*4d7e907cSAndroid Build Coastguard Worker updateVersion -e "audio.*$BASE_VERSION_REGEX" "$@" 76*4d7e907cSAndroid Build Coastguard Worker} 77*4d7e907cSAndroid Build Coastguard Worker 78*4d7e907cSAndroid Build Coastguard WorkerupdateAudioVtsTargetVersion() { 79*4d7e907cSAndroid Build Coastguard Worker updateVersion -e "Audio.*V$BASE_VERSION_REGEX" "$@" 80*4d7e907cSAndroid Build Coastguard Worker} 81*4d7e907cSAndroid Build Coastguard Worker 82*4d7e907cSAndroid Build Coastguard WorkerupdateLicenceDates() { 83*4d7e907cSAndroid Build Coastguard Worker # Update date on the 2 first lines 84*4d7e907cSAndroid Build Coastguard Worker sed -i "1,2 s/20[0-9][0-9]/$(date +"%Y")/g" "$@" 85*4d7e907cSAndroid Build Coastguard Worker} 86*4d7e907cSAndroid Build Coastguard Worker 87*4d7e907cSAndroid Build Coastguard Workerecho "Creating new audio HAL V$NEW_VERSION based on V$BASE_VERSION" 88*4d7e907cSAndroid Build Coastguard Workerecho "Press Ctrl-C to cancel, Enter to continue" 89*4d7e907cSAndroid Build Coastguard Workerread 90*4d7e907cSAndroid Build Coastguard Worker 91*4d7e907cSAndroid Build Coastguard WorkerMODIFIED= 92*4d7e907cSAndroid Build Coastguard WorkerrunIfNeeded() { 93*4d7e907cSAndroid Build Coastguard Worker local -r TARGET=$1; shift 94*4d7e907cSAndroid Build Coastguard Worker cd $ANDROID_BUILD_TOP/$TARGET 95*4d7e907cSAndroid Build Coastguard Worker if grep -q -r "audio.*$NEW_VERSION_REGEX"; then 96*4d7e907cSAndroid Build Coastguard Worker echo " Skipping $TARGET as already up to date" 97*4d7e907cSAndroid Build Coastguard Worker else 98*4d7e907cSAndroid Build Coastguard Worker echo " Updating $PWD" 99*4d7e907cSAndroid Build Coastguard Worker MODIFIED+=$'\n - '$TARGET 100*4d7e907cSAndroid Build Coastguard Worker "$@" 101*4d7e907cSAndroid Build Coastguard Worker fi 102*4d7e907cSAndroid Build Coastguard Worker} 103*4d7e907cSAndroid Build Coastguard Worker 104*4d7e907cSAndroid Build Coastguard WorkercreateHALVersion() { 105*4d7e907cSAndroid Build Coastguard Worker local -r DIRS=". common effect" 106*4d7e907cSAndroid Build Coastguard Worker local COPY= 107*4d7e907cSAndroid Build Coastguard Worker echo "Copy $BASE_VERSION to $NEW_VERSION in $DIRS" 108*4d7e907cSAndroid Build Coastguard Worker for DIR in $DIRS; do 109*4d7e907cSAndroid Build Coastguard Worker cp -Tar $DIR/$BASE_VERSION $DIR/$NEW_VERSION 110*4d7e907cSAndroid Build Coastguard Worker COPY+=" $DIR/$NEW_VERSION" 111*4d7e907cSAndroid Build Coastguard Worker done 112*4d7e907cSAndroid Build Coastguard Worker local COPY_FILES_TO= 113*4d7e907cSAndroid Build Coastguard Worker for FILE_FROM in $(find . -type f -name "$HAL_VTS_CONFIG_FILE_GLOB"); do 114*4d7e907cSAndroid Build Coastguard Worker local FILE_TO=${FILE_FROM/$BASE_VERSION_UNDERSCORE/$NEW_VERSION_UNDERSCORE} 115*4d7e907cSAndroid Build Coastguard Worker cp "$FILE_FROM" "$FILE_TO" 116*4d7e907cSAndroid Build Coastguard Worker COPY_FILES_TO+=" $FILE_TO" 117*4d7e907cSAndroid Build Coastguard Worker done 118*4d7e907cSAndroid Build Coastguard Worker 119*4d7e907cSAndroid Build Coastguard Worker echo "Replacing $BASE_VERSION by $NEW_VERSION in the copied files" 120*4d7e907cSAndroid Build Coastguard Worker updateVersion $(find $COPY -type f) 121*4d7e907cSAndroid Build Coastguard Worker updateVersion $COPY_FILES_TO 122*4d7e907cSAndroid Build Coastguard Worker updateLicenceDates $(find $COPY -type f) 123*4d7e907cSAndroid Build Coastguard Worker 124*4d7e907cSAndroid Build Coastguard Worker echo "Update implementation and VTS generic code" 125*4d7e907cSAndroid Build Coastguard Worker local -r FILES="*/all-versions/default/Android.bp */all-versions/vts/functional/Android.bp" 126*4d7e907cSAndroid Build Coastguard Worker updateVersion -v original_before=1 -v RS= -v ORS='\n\n' $FILES 127*4d7e907cSAndroid Build Coastguard Worker sed -i '${/^$/d}' $FILES # Remove \n at the end of the files 128*4d7e907cSAndroid Build Coastguard Worker 129*4d7e907cSAndroid Build Coastguard Worker updateVersion -v original_before=1 $HAL_SERVICE_DIRECTORY/Android.bp 130*4d7e907cSAndroid Build Coastguard Worker 131*4d7e907cSAndroid Build Coastguard Worker updateVersion -e "audio::.*$BASE_VERSION_REGEX" -v original_after=1 \ 132*4d7e907cSAndroid Build Coastguard Worker $HAL_SERVICE_DIRECTORY/$HAL_SERVICE_CPP 133*4d7e907cSAndroid Build Coastguard Worker updateVersion -e "audio\/.*$BASE_VERSION_REGEX" -v original_before=1 \ 134*4d7e907cSAndroid Build Coastguard Worker $HAL_SERVICE_DIRECTORY/$HAL_SERVICE_CPP 135*4d7e907cSAndroid Build Coastguard Worker 136*4d7e907cSAndroid Build Coastguard Worker local -r HAL_VTS_PATH=$HAL_VTS_DIRECTORY/$NEW_VERSION/$HAL_VTS_FILE 137*4d7e907cSAndroid Build Coastguard Worker mkdir -p $(dirname $HAL_VTS_PATH) 138*4d7e907cSAndroid Build Coastguard Worker cat > $HAL_VTS_PATH <<EOF 139*4d7e907cSAndroid Build Coastguard Worker/* 140*4d7e907cSAndroid Build Coastguard Worker * Copyright (C) $(date +"%Y") The Android Open Source Project 141*4d7e907cSAndroid Build Coastguard Worker * 142*4d7e907cSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 143*4d7e907cSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 144*4d7e907cSAndroid Build Coastguard Worker * You may obtain a copy of the License at 145*4d7e907cSAndroid Build Coastguard Worker * 146*4d7e907cSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 147*4d7e907cSAndroid Build Coastguard Worker * 148*4d7e907cSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 149*4d7e907cSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 150*4d7e907cSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 151*4d7e907cSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 152*4d7e907cSAndroid Build Coastguard Worker * limitations under the License. 153*4d7e907cSAndroid Build Coastguard Worker */ 154*4d7e907cSAndroid Build Coastguard Worker 155*4d7e907cSAndroid Build Coastguard Worker// pull in all the <= $BASE_VERSION tests 156*4d7e907cSAndroid Build Coastguard Worker#include "$BASE_VERSION/$(basename AudioPrimaryHidlHalTest.cpp)" 157*4d7e907cSAndroid Build Coastguard WorkerEOF 158*4d7e907cSAndroid Build Coastguard Worker 159*4d7e907cSAndroid Build Coastguard Worker echo "New HAL version $NEW_VERSION successfully created" 160*4d7e907cSAndroid Build Coastguard Worker} 161*4d7e907cSAndroid Build Coastguard Worker 162*4d7e907cSAndroid Build Coastguard Workerecho "Creating new audio HAL definition, default impl and VTS" 163*4d7e907cSAndroid Build Coastguard WorkerrunIfNeeded $HAL_DIRECTORY createHALVersion 164*4d7e907cSAndroid Build Coastguard Worker 165*4d7e907cSAndroid Build Coastguard Worker 166*4d7e907cSAndroid Build Coastguard WorkercreateFrameworkAdapter() { 167*4d7e907cSAndroid Build Coastguard Worker updateVersion -v original_before=1 Android.bp 168*4d7e907cSAndroid Build Coastguard Worker updateVersion -v original_before=1 -v RS= -v ORS='\n\n' $IMPL_DIRECTORY/Android.bp 169*4d7e907cSAndroid Build Coastguard Worker updateVersion -v original_after=1 $IMPL_FACTORYHAL 170*4d7e907cSAndroid Build Coastguard Worker} 171*4d7e907cSAndroid Build Coastguard Workerecho "Now creating the framework adapter version" 172*4d7e907cSAndroid Build Coastguard WorkerrunIfNeeded $FWK_DIRECTORY createFrameworkAdapter 173*4d7e907cSAndroid Build Coastguard Worker 174*4d7e907cSAndroid Build Coastguard Workerecho "Now register new VTS" 175*4d7e907cSAndroid Build Coastguard WorkerPREV_MODIFIED="$MODIFIED" 176*4d7e907cSAndroid Build Coastguard WorkerrunIfNeeded $(dirname $VTS_LIST) updateAudioVersion -v original_before=1 $(basename $VTS_LIST) 177*4d7e907cSAndroid Build Coastguard Workerif [[ "$PREV_MODIFIED" != "$MODIFIED" ]]; then 178*4d7e907cSAndroid Build Coastguard Worker updateAudioVtsTargetVersion -v original_after=1 $(basename $VTS_LIST) 179*4d7e907cSAndroid Build Coastguard Workerfi 180*4d7e907cSAndroid Build Coastguard Worker 181*4d7e907cSAndroid Build Coastguard Workerecho "Now update watchdog" 182*4d7e907cSAndroid Build Coastguard WorkerrunIfNeeded $(dirname $WATCHDOG) updateAudioVersion -v original_before=1 $(basename $WATCHDOG) 183*4d7e907cSAndroid Build Coastguard Worker 184*4d7e907cSAndroid Build Coastguard Workerecho "Now update dumputils" 185*4d7e907cSAndroid Build Coastguard WorkerrunIfNeeded $(dirname $DUMP_UTILS) updateAudioVersion -v original_before=1 $(basename $DUMP_UTILS) 186*4d7e907cSAndroid Build Coastguard Worker 187*4d7e907cSAndroid Build Coastguard Workerecho "Now update GSI current.txt" 188*4d7e907cSAndroid Build Coastguard WorkerrunIfNeeded $(dirname $GSI_CURRENT) update-vndk-list.sh 189*4d7e907cSAndroid Build Coastguard Worker 190*4d7e907cSAndroid Build Coastguard Workerif ! [ "$MODIFIED" ]; then 191*4d7e907cSAndroid Build Coastguard Worker echo 192*4d7e907cSAndroid Build Coastguard Worker echo "$NEW_VERSION already exist, nothing to do" 193*4d7e907cSAndroid Build Coastguard Worker exit 194*4d7e907cSAndroid Build Coastguard Workerfi 195*4d7e907cSAndroid Build Coastguard Worker 196*4d7e907cSAndroid Build Coastguard Workercat << EOF 197*4d7e907cSAndroid Build Coastguard Worker 198*4d7e907cSAndroid Build Coastguard WorkerAll File generated successfully. Please submit a patch in all those directories: $MODIFIED 199*4d7e907cSAndroid Build Coastguard Worker 200*4d7e907cSAndroid Build Coastguard Worker----------------------------------------------------------- 201*4d7e907cSAndroid Build Coastguard WorkerWHAT WAS *NOT* DONE, and you need to do now: 202*4d7e907cSAndroid Build Coastguard Worker 1) You need to choose if the new HAL is optional or not for new devices. 203*4d7e907cSAndroid Build Coastguard Worker Either add or replace $BASE_VERSION by $NEW_VERSION in 204*4d7e907cSAndroid Build Coastguard Worker compatibility_matrices/compatibility_matrix.current.xml 205*4d7e907cSAndroid Build Coastguard Worker Do not forget to update both the "audio" and "audio.effects" HAL' 206*4d7e907cSAndroid Build Coastguard Worker 207*4d7e907cSAndroid Build Coastguard Worker 2) Then you need to choose a device to update its audio HAL implementation: 208*4d7e907cSAndroid Build Coastguard Worker a) Update the HAL manifest of your device: open your device manifest.xml 209*4d7e907cSAndroid Build Coastguard Worker and replace $BASE_VERSION by $NEW_VERSION for both 210*4d7e907cSAndroid Build Coastguard Worker - android.hardware.audio 211*4d7e907cSAndroid Build Coastguard Worker - android.hardware.audio.effect 212*4d7e907cSAndroid Build Coastguard Worker b) Go to your device device.mk (usually next to the manifest) and replace: 213*4d7e907cSAndroid Build Coastguard Worker - android.hardware.audio@$BASE_VERSION-impl by 214*4d7e907cSAndroid Build Coastguard Worker android.hardware.audio@$NEW_VERSION-impl 215*4d7e907cSAndroid Build Coastguard Worker - android.hardware.audio.effect@$BASE_VERSION-impl by 216*4d7e907cSAndroid Build Coastguard Worker android.hardware.audio.effect@$NEW_VERSION-impl 217*4d7e907cSAndroid Build Coastguard WorkerEOF 218