• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/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.
17# Usage: check_dirs [package:root ...]
18function 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
31function 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 ...]
45function 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
56function get_bp_dirs() {
57  find $1/*                          \
58    -mindepth 1                      \
59    -name "Android.bp"               \
60    -printf "%H\n"                   \
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#
71function 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";
84    hidl-gen -Lmakefile $root_arguments $p;
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}
111