| #!/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<NF;i++){printf(".%s", $i);}; printf("@%s\n", $NF);}'; |
| popd > /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 |
| } |