Steven Moreland | 8e369ba | 2017-03-20 04:20:28 -0700 | [diff] [blame] | 1 | #!/bin/bash |
| 2 | |
| 3 | #TODO(b/35570956): Do with Soong instead. |
| 4 | |
| 5 | #Note: see do_makefiles_update below. |
| 6 | |
| 7 | function package_root_to_package() { |
| 8 | echo $1 | cut -f1 -d: |
| 9 | } |
| 10 | |
| 11 | function package_root_to_root() { |
| 12 | echo $1 | cut -f2 -d: |
| 13 | } |
| 14 | |
| 15 | ## |
| 16 | # Makes sure the appropriate directories are visible. |
| 17 | # Usage: check_dirs [package:root ...] |
| 18 | function check_dirs() { |
| 19 | for package_root in "$@"; do |
| 20 | dir=$(package_root_to_root $package_root) |
| 21 | if [ ! -d $dir ] ; then |
| 22 | echo "Where is $dir?"; |
| 23 | return 1; |
| 24 | fi |
| 25 | done |
| 26 | } |
| 27 | |
| 28 | ## |
| 29 | # Gets all packages in a directory. |
| 30 | # Usage: get_packages package root |
| 31 | function get_packages() { |
| 32 | local current_dir=$1 |
| 33 | local current_package=$2 |
| 34 | pushd $current_dir > /dev/null; |
| 35 | find . -type f -name \*.hal -exec dirname {} \; | sort -u | \ |
| 36 | cut -c3- | \ |
| 37 | awk -F'/' \ |
| 38 | '{printf("'$current_package'"); for(i=1;i<NF;i++){printf(".%s", $i);}; printf("@%s\n", $NF);}'; |
| 39 | popd > /dev/null; |
| 40 | } |
| 41 | |
| 42 | ## |
| 43 | # Package roots to arguments. |
| 44 | # Usage: get_root_arguments [package:root ...] |
| 45 | function get_root_arguments() { |
| 46 | for package_root in "$@"; do |
| 47 | echo "-r $package_root" |
| 48 | done |
| 49 | } |
| 50 | |
| 51 | ## |
| 52 | # Subdirectories of a directory which contain Android.bps |
| 53 | # Note, does not return Android.bp in the current directory. |
| 54 | # |
| 55 | # Usage: get_bp_dirs dir |
| 56 | function get_bp_dirs() { |
Po-Chien Hsueh | 92f3c2a | 2017-05-11 16:07:46 +0800 | [diff] [blame] | 57 | find $1/* \ |
| 58 | -mindepth 1 \ |
Steven Moreland | 8e369ba | 2017-03-20 04:20:28 -0700 | [diff] [blame] | 59 | -name "Android.bp" \ |
Po-Chien Hsueh | 92f3c2a | 2017-05-11 16:07:46 +0800 | [diff] [blame] | 60 | -printf "%H\n" \ |
Steven Moreland | 8e369ba | 2017-03-20 04:20:28 -0700 | [diff] [blame] | 61 | | sort | uniq |
| 62 | } |
| 63 | |
| 64 | ## |
| 65 | # Helps manage the package root of a HAL directory. |
| 66 | # Should be called from the android root directory. |
| 67 | # |
| 68 | # Usage: do_makefiles_update [package:root ...] |
| 69 | # Where the first package root is the current one. |
| 70 | # |
| 71 | function do_makefiles_update() { |
| 72 | local current_package=$(package_root_to_package $1) |
| 73 | local current_dir=$(package_root_to_root $1) |
| 74 | |
| 75 | echo "Updating makefiles for $current_package in $current_dir." |
| 76 | |
| 77 | check_dirs $@ || return 1 |
| 78 | |
| 79 | local packages=$(get_packages $current_dir $current_package) || return 1 |
| 80 | local root_arguments=$(get_root_arguments $@) || return 1 |
| 81 | |
| 82 | for p in $packages; do |
| 83 | echo "Updating $p"; |
Steven Moreland | 6c3c599 | 2017-03-28 14:51:50 -0700 | [diff] [blame] | 84 | hidl-gen -Lmakefile $root_arguments $p; |
Steven Moreland | 8e369ba | 2017-03-20 04:20:28 -0700 | [diff] [blame] | 85 | rc=$?; if [[ $rc != 0 ]]; then return $rc; fi |
| 86 | hidl-gen -Landroidbp $root_arguments $p; |
| 87 | rc=$?; if [[ $rc != 0 ]]; then return $rc; fi |
| 88 | done |
| 89 | |
| 90 | local android_dirs=$(get_bp_dirs $current_dir) || return 1 |
| 91 | |
| 92 | echo "Updating Android.bp files." |
| 93 | |
| 94 | for bp_dir in $android_dirs; do |
| 95 | bp="$bp_dir/Android.bp" |
| 96 | # locations of Android.bp files in specific subdirectory of frameworks/hardware/interfaces |
| 97 | android_bps=$(find $bp_dir \ |
| 98 | -name "Android.bp" \ |
| 99 | ! -path $bp_dir/Android.bp \ |
| 100 | -printf "%h\n" \ |
| 101 | | sort) |
| 102 | |
| 103 | echo "// This is an autogenerated file, do not edit." > "$bp"; |
| 104 | echo "subdirs = [" >> "$bp"; |
| 105 | for a in $android_bps; do |
| 106 | echo " \"${a#$bp_dir/}\"," >> "$bp"; |
| 107 | done |
| 108 | echo "]" >> "$bp"; |
| 109 | done |
| 110 | } |