blob: d5ee07f6ccefc819acdca8537a572a60740ab6d8 [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
23 dir=$(package_root_to_root $package_root)
Steven Morelandedc22122017-05-11 16:15:39 -070024 if [ ! -d $root_or_cwd$dir ] ; then
Steven Moreland8e369ba2017-03-20 04:20:28 -070025 echo "Where is $dir?";
26 return 1;
27 fi
28 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
50 echo "-r $package_root"
51 done
52}
53
54##
55# Subdirectories of a directory which contain Android.bps
56# Note, does not return Android.bp in the current directory.
57#
58# Usage: get_bp_dirs dir
59function get_bp_dirs() {
Po-Chien Hsueh92f3c2a2017-05-11 16:07:46 +080060 find $1/* \
61 -mindepth 1 \
Steven Moreland8e369ba2017-03-20 04:20:28 -070062 -name "Android.bp" \
Po-Chien Hsueh92f3c2a2017-05-11 16:07:46 +080063 -printf "%H\n" \
Steven Moreland8e369ba2017-03-20 04:20:28 -070064 | sort | uniq
65}
66
67##
68# Helps manage the package root of a HAL directory.
69# Should be called from the android root directory.
70#
71# Usage: do_makefiles_update [package:root ...]
72# Where the first package root is the current one.
73#
74function do_makefiles_update() {
Steven Morelandedc22122017-05-11 16:15:39 -070075 local root_or_cwd=${ANDROID_BUILD_TOP%%/}${ANDROID_BUILD_TOP:+/}
76
Steven Moreland8e369ba2017-03-20 04:20:28 -070077 local current_package=$(package_root_to_package $1)
Steven Morelandedc22122017-05-11 16:15:39 -070078 local current_dir=$root_or_cwd$(package_root_to_root $1)
Steven Moreland8e369ba2017-03-20 04:20:28 -070079
80 echo "Updating makefiles for $current_package in $current_dir."
81
Steven Morelandedc22122017-05-11 16:15:39 -070082 check_dirs "$root_or_cwd" $@ || return 1
Steven Moreland8e369ba2017-03-20 04:20:28 -070083
84 local packages=$(get_packages $current_dir $current_package) || return 1
85 local root_arguments=$(get_root_arguments $@) || return 1
86
87 for p in $packages; do
88 echo "Updating $p";
Steven Moreland6c3c5992017-03-28 14:51:50 -070089 hidl-gen -Lmakefile $root_arguments $p;
Steven Moreland8e369ba2017-03-20 04:20:28 -070090 rc=$?; if [[ $rc != 0 ]]; then return $rc; fi
91 hidl-gen -Landroidbp $root_arguments $p;
92 rc=$?; if [[ $rc != 0 ]]; then return $rc; fi
93 done
94
95 local android_dirs=$(get_bp_dirs $current_dir) || return 1
96
97 echo "Updating Android.bp files."
98
99 for bp_dir in $android_dirs; do
100 bp="$bp_dir/Android.bp"
101 # locations of Android.bp files in specific subdirectory of frameworks/hardware/interfaces
102 android_bps=$(find $bp_dir \
103 -name "Android.bp" \
104 ! -path $bp_dir/Android.bp \
105 -printf "%h\n" \
106 | sort)
107
108 echo "// This is an autogenerated file, do not edit." > "$bp";
109 echo "subdirs = [" >> "$bp";
110 for a in $android_bps; do
111 echo " \"${a#$bp_dir/}\"," >> "$bp";
112 done
113 echo "]" >> "$bp";
114 done
115}