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. |
Steven Moreland | edc2212 | 2017-05-11 16:15:39 -0700 | [diff] [blame] | 17 | # Usage: check_dirs root_or_cwd [package:root ...] |
Steven Moreland | 8e369ba | 2017-03-20 04:20:28 -0700 | [diff] [blame] | 18 | function check_dirs() { |
Steven Moreland | edc2212 | 2017-05-11 16:15:39 -0700 | [diff] [blame] | 19 | local root_or_cwd=$1 |
| 20 | shift 1 |
| 21 | |
Steven Moreland | 8e369ba | 2017-03-20 04:20:28 -0700 | [diff] [blame] | 22 | for package_root in "$@"; do |
Steven Moreland | fa52dad | 2019-02-11 21:07:36 -0800 | [diff] [blame] | 23 | dir=$(package_root_to_root $package_root) |
| 24 | if [ ! -d $root_or_cwd$dir ] ; then |
| 25 | echo "Where is $dir?"; |
| 26 | return 1; |
| 27 | fi |
Steven Moreland | 8e369ba | 2017-03-20 04:20:28 -0700 | [diff] [blame] | 28 | done |
| 29 | } |
| 30 | |
| 31 | ## |
| 32 | # Gets all packages in a directory. |
| 33 | # Usage: get_packages package root |
| 34 | function get_packages() { |
| 35 | local current_dir=$1 |
| 36 | local current_package=$2 |
| 37 | pushd $current_dir > /dev/null; |
| 38 | find . -type f -name \*.hal -exec dirname {} \; | sort -u | \ |
| 39 | cut -c3- | \ |
| 40 | awk -F'/' \ |
| 41 | '{printf("'$current_package'"); for(i=1;i<NF;i++){printf(".%s", $i);}; printf("@%s\n", $NF);}'; |
| 42 | popd > /dev/null; |
| 43 | } |
| 44 | |
| 45 | ## |
| 46 | # Package roots to arguments. |
| 47 | # Usage: get_root_arguments [package:root ...] |
| 48 | function get_root_arguments() { |
| 49 | for package_root in "$@"; do |
Steven Moreland | fa52dad | 2019-02-11 21:07:36 -0800 | [diff] [blame] | 50 | printf "%s" "-r$package_root " |
Steven Moreland | 8e369ba | 2017-03-20 04:20:28 -0700 | [diff] [blame] | 51 | done |
| 52 | } |
| 53 | |
| 54 | ## |
Jiyong Park | 3728325 | 2017-08-29 14:11:48 +0900 | [diff] [blame] | 55 | # Returns directory path for a package |
| 56 | # Usage: get_package_dir package_root_dir package_prefix package |
| 57 | function get_package_dir() { |
| 58 | local package_dir=`echo $3 | cut -f1 -d@ | sed "s/$2\.//" | sed "s/\./\//g"` |
| 59 | local package_version=`echo $3 | cut -f2 -d@` |
| 60 | echo $1/$package_dir/$package_version |
| 61 | } |
| 62 | |
| 63 | ## |
Steven Moreland | fa52dad | 2019-02-11 21:07:36 -0800 | [diff] [blame] | 64 | # Returns the number of processors to run on, on this machine |
| 65 | function get_num_processors() { |
| 66 | if command -v nproc >/dev/null 2>&1; then |
| 67 | PROCS=$(nproc --all 2>/dev/null) && echo $PROCS && return 0 |
| 68 | elif command -v sysctl >/dev/null 2>&1; then |
| 69 | PROCS=$(sysctl -n hw.logicalcpu 2>/dev/null) && echo $PROCS && return 0 |
| 70 | fi |
| 71 | |
| 72 | echo 1 |
| 73 | } |
| 74 | |
| 75 | ## |
Steven Moreland | 8e369ba | 2017-03-20 04:20:28 -0700 | [diff] [blame] | 76 | # Helps manage the package root of a HAL directory. |
| 77 | # Should be called from the android root directory. |
| 78 | # |
Steven Moreland | 89a9ebb | 2017-12-04 10:18:00 -0800 | [diff] [blame] | 79 | # Usage: do_makefiles_update [-O owner-name] [package:root ...] |
Steven Moreland | 8e369ba | 2017-03-20 04:20:28 -0700 | [diff] [blame] | 80 | # Where the first package root is the current one. |
| 81 | # |
| 82 | function do_makefiles_update() { |
Steven Moreland | 222a6ad | 2018-11-30 09:56:22 -0800 | [diff] [blame] | 83 | if ! command -v hidl-gen 1>/dev/null; then |
Steven Moreland | fa52dad | 2019-02-11 21:07:36 -0800 | [diff] [blame] | 84 | echo "Cannot find hidl-gen, try lunching or making it ('m hidl-gen')?" |
| 85 | exit 1 |
Steven Moreland | 222a6ad | 2018-11-30 09:56:22 -0800 | [diff] [blame] | 86 | fi |
| 87 | |
Steven Moreland | 89a9ebb | 2017-12-04 10:18:00 -0800 | [diff] [blame] | 88 | local owner= |
| 89 | if [[ "$1" = "-O" ]]; then |
Steven Moreland | fa52dad | 2019-02-11 21:07:36 -0800 | [diff] [blame] | 90 | owner="$2" |
| 91 | shift 2 |
Steven Moreland | 89a9ebb | 2017-12-04 10:18:00 -0800 | [diff] [blame] | 92 | fi |
| 93 | |
Steven Moreland | edc2212 | 2017-05-11 16:15:39 -0700 | [diff] [blame] | 94 | local root_or_cwd=${ANDROID_BUILD_TOP%%/}${ANDROID_BUILD_TOP:+/} |
| 95 | |
Steven Moreland | 8e369ba | 2017-03-20 04:20:28 -0700 | [diff] [blame] | 96 | local current_package=$(package_root_to_package $1) |
Steven Moreland | edc2212 | 2017-05-11 16:15:39 -0700 | [diff] [blame] | 97 | local current_dir=$root_or_cwd$(package_root_to_root $1) |
Steven Moreland | 8e369ba | 2017-03-20 04:20:28 -0700 | [diff] [blame] | 98 | |
| 99 | echo "Updating makefiles for $current_package in $current_dir." |
| 100 | |
Steven Moreland | edc2212 | 2017-05-11 16:15:39 -0700 | [diff] [blame] | 101 | check_dirs "$root_or_cwd" $@ || return 1 |
Steven Moreland | 8e369ba | 2017-03-20 04:20:28 -0700 | [diff] [blame] | 102 | |
| 103 | local packages=$(get_packages $current_dir $current_package) || return 1 |
| 104 | local root_arguments=$(get_root_arguments $@) || return 1 |
| 105 | |
Steven Moreland | fa52dad | 2019-02-11 21:07:36 -0800 | [diff] [blame] | 106 | function __update_internal() { |
| 107 | local owner="$1" |
| 108 | local root_arguments="$2" |
| 109 | local package="$3" |
| 110 | echo "Updating $package" |
| 111 | hidl-gen -O "$owner" -Landroidbp $root_arguments $package || { |
| 112 | echo "Command failed: hidl-gen -O \"$owner\" -Landroidbp $root_arguments $package"; |
| 113 | return 1; |
| 114 | } |
| 115 | } |
| 116 | export -f __update_internal |
| 117 | |
| 118 | echo "$packages" |\ |
| 119 | xargs -P $(get_num_processors) -I {} \ |
| 120 | bash -c "__update_internal \"$owner\" \"$root_arguments\" \"{}\"" || return 1 |
Steven Moreland | 8e369ba | 2017-03-20 04:20:28 -0700 | [diff] [blame] | 121 | } |