#!/bin/bash #TODO(b/35570956): Do with Soong instead. #Note: see do_makefiles_update below. function package_root_to_package() { echo $1 | cut -f1 -d: } function package_root_to_root() { echo $1 | cut -f2 -d: } ## # Makes sure the appropriate directories are visible. # Usage: check_dirs root_or_cwd [package:root ...] function check_dirs() { local root_or_cwd=$1 shift 1 for package_root in "$@"; do dir=$(package_root_to_root $package_root) if [ ! -d $root_or_cwd$dir ] ; then echo "Where is $dir?"; return 1; fi done } ## # Gets all packages in a directory. # Usage: get_packages package root function get_packages() { local current_dir=$1 local current_package=$2 pushd $current_dir > /dev/null; find . -type f -name \*.hal -exec dirname {} \; | sort -u | \ cut -c3- | \ awk -F'/' \ '{printf("'$current_package'"); for(i=1;i /dev/null; } ## # Package roots to arguments. # Usage: get_root_arguments [package:root ...] function get_root_arguments() { for package_root in "$@"; do echo "-r $package_root" done } ## # Subdirectories of a directory which contain Android.bps # Note, does not return Android.bp in the current directory. # # Usage: get_bp_dirs dir function get_bp_dirs() { find $1/* \ -mindepth 1 \ -name "Android.bp" \ -printf "%H\n" \ | sort | uniq } ## # Returns directory path for a package # Usage: get_package_dir package_root_dir package_prefix package function get_package_dir() { local package_dir=`echo $3 | cut -f1 -d@ | sed "s/$2\.//" | sed "s/\./\//g"` local package_version=`echo $3 | cut -f2 -d@` echo $1/$package_dir/$package_version } ## # Helps manage the package root of a HAL directory. # Should be called from the android root directory. # # Usage: do_makefiles_update [package:root ...] # Where the first package root is the current one. # function do_makefiles_update() { local root_or_cwd=${ANDROID_BUILD_TOP%%/}${ANDROID_BUILD_TOP:+/} local current_package=$(package_root_to_package $1) local current_dir=$root_or_cwd$(package_root_to_root $1) echo "Updating makefiles for $current_package in $current_dir." check_dirs "$root_or_cwd" $@ || return 1 local packages=$(get_packages $current_dir $current_package) || return 1 local root_arguments=$(get_root_arguments $@) || return 1 for p in $packages; do echo "Updating $p"; local additional_options= if [[ -f $(get_package_dir $current_dir $current_package $p)/.hidl_for_test ]]; then additional_options="-t"; fi hidl-gen -Lmakefile $root_arguments $p; rc=$?; if [[ $rc != 0 ]]; then return $rc; fi hidl-gen -Landroidbp $root_arguments $additional_options $p; rc=$?; if [[ $rc != 0 ]]; then return $rc; fi done local android_dirs=$(get_bp_dirs $current_dir) || return 1 echo "Updating Android.bp files." for bp_dir in $android_dirs; do bp="$bp_dir/Android.bp" # locations of Android.bp files in specific subdirectory of frameworks/hardware/interfaces android_bps=$(find $bp_dir \ -name "Android.bp" \ ! -path $bp_dir/Android.bp \ -printf "%h\n" \ | sort) echo "// This is an autogenerated file, do not edit." > "$bp"; echo "subdirs = [" >> "$bp"; for a in $android_bps; do echo " \"${a#$bp_dir/}\"," >> "$bp"; done echo "]" >> "$bp"; done }