blob: 0d1676ba958379ba4e09cb410fd54fc829100a8b [file] [log] [blame]
Steven Moreland8e369ba2017-03-20 04:20:28 -07001#!/bin/bash
2
3#TODO(b/35570956): Do with Soong instead.
4
5#Note: see do_makefiles_update below.
6
7function package_root_to_package() {
8 echo $1 | cut -f1 -d:
9}
10
11function package_root_to_root() {
12 echo $1 | cut -f2 -d:
13}
14
15##
16# Makes sure the appropriate directories are visible.
Steven Morelandedc22122017-05-11 16:15:39 -070017# Usage: check_dirs root_or_cwd [package:root ...]
Steven Moreland8e369ba2017-03-20 04:20:28 -070018function check_dirs() {
Steven Morelandedc22122017-05-11 16:15:39 -070019 local root_or_cwd=$1
20 shift 1
21
Steven Moreland8e369ba2017-03-20 04:20:28 -070022 for package_root in "$@"; do
Steven Morelandfa52dad2019-02-11 21:07:36 -080023 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 Moreland8e369ba2017-03-20 04:20:28 -070028 done
29}
30
31##
32# Gets all packages in a directory.
33# Usage: get_packages package root
34function 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 ...]
48function get_root_arguments() {
49 for package_root in "$@"; do
Steven Morelandfa52dad2019-02-11 21:07:36 -080050 printf "%s" "-r$package_root "
Steven Moreland8e369ba2017-03-20 04:20:28 -070051 done
52}
53
54##
Jiyong Park37283252017-08-29 14:11:48 +090055# Returns directory path for a package
56# Usage: get_package_dir package_root_dir package_prefix package
57function 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 Morelandfa52dad2019-02-11 21:07:36 -080064# Returns the number of processors to run on, on this machine
65function 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 Moreland8e369ba2017-03-20 04:20:28 -070076# Helps manage the package root of a HAL directory.
77# Should be called from the android root directory.
78#
Steven Moreland89a9ebb2017-12-04 10:18:00 -080079# Usage: do_makefiles_update [-O owner-name] [package:root ...]
Steven Moreland8e369ba2017-03-20 04:20:28 -070080# Where the first package root is the current one.
81#
82function do_makefiles_update() {
Steven Moreland222a6ad2018-11-30 09:56:22 -080083 if ! command -v hidl-gen 1>/dev/null; then
Steven Morelandfa52dad2019-02-11 21:07:36 -080084 echo "Cannot find hidl-gen, try lunching or making it ('m hidl-gen')?"
85 exit 1
Steven Moreland222a6ad2018-11-30 09:56:22 -080086 fi
87
Steven Moreland89a9ebb2017-12-04 10:18:00 -080088 local owner=
89 if [[ "$1" = "-O" ]]; then
Steven Morelandfa52dad2019-02-11 21:07:36 -080090 owner="$2"
91 shift 2
Steven Moreland89a9ebb2017-12-04 10:18:00 -080092 fi
93
Steven Morelandedc22122017-05-11 16:15:39 -070094 local root_or_cwd=${ANDROID_BUILD_TOP%%/}${ANDROID_BUILD_TOP:+/}
95
Steven Moreland8e369ba2017-03-20 04:20:28 -070096 local current_package=$(package_root_to_package $1)
Steven Morelandedc22122017-05-11 16:15:39 -070097 local current_dir=$root_or_cwd$(package_root_to_root $1)
Steven Moreland8e369ba2017-03-20 04:20:28 -070098
99 echo "Updating makefiles for $current_package in $current_dir."
100
Steven Morelandedc22122017-05-11 16:15:39 -0700101 check_dirs "$root_or_cwd" $@ || return 1
Steven Moreland8e369ba2017-03-20 04:20:28 -0700102
103 local packages=$(get_packages $current_dir $current_package) || return 1
104 local root_arguments=$(get_root_arguments $@) || return 1
105
Steven Morelandfa52dad2019-02-11 21:07:36 -0800106 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 Moreland8e369ba2017-03-20 04:20:28 -0700121}