You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
3.5 KiB
126 lines
3.5 KiB
#!/bin/bash |
|
|
|
#TODO(b/35570956): Do with Soong instead. |
|
|
|
#Note: see do_makefiles_update below. |
|
|
|
function package_root_to_package() { |
|
echo $1 | cut -f1 -d: |
|
} |
|
|
|
function package_root_to_root() { |
|
echo $1 | cut -f2 -d: |
|
} |
|
|
|
## |
|
# Makes sure the appropriate directories are visible. |
|
# Usage: check_dirs root_or_cwd [package:root ...] |
|
function check_dirs() { |
|
local root_or_cwd=$1 |
|
shift 1 |
|
|
|
for package_root in "$@"; do |
|
dir=$(package_root_to_root $package_root) |
|
if [ ! -d $root_or_cwd$dir ] ; then |
|
echo "Where is $dir?"; |
|
return 1; |
|
fi |
|
done |
|
} |
|
|
|
## |
|
# Gets all packages in a directory. |
|
# Usage: get_packages package root |
|
function get_packages() { |
|
local current_dir=$1 |
|
local current_package=$2 |
|
pushd $current_dir > /dev/null; |
|
find . -type f -name \*.hal -exec dirname {} \; | sort -u | \ |
|
cut -c3- | \ |
|
awk -F'/' \ |
|
'{printf("'$current_package'"); for(i=1;i<NF;i++){printf(".%s", $i);}; printf("@%s\n", $NF);}'; |
|
popd > /dev/null; |
|
} |
|
|
|
## |
|
# Package roots to arguments. |
|
# Usage: get_root_arguments [package:root ...] |
|
function get_root_arguments() { |
|
for package_root in "$@"; do |
|
echo "-r $package_root" |
|
done |
|
} |
|
|
|
## |
|
# Subdirectories of a directory which contain Android.bps |
|
# Note, does not return Android.bp in the current directory. |
|
# |
|
# Usage: get_bp_dirs dir |
|
function get_bp_dirs() { |
|
find $1/* \ |
|
-mindepth 1 \ |
|
-name "Android.bp" \ |
|
-printf "%H\n" \ |
|
| sort | uniq |
|
} |
|
|
|
## |
|
# Returns directory path for a package |
|
# Usage: get_package_dir package_root_dir package_prefix package |
|
function get_package_dir() { |
|
local package_dir=`echo $3 | cut -f1 -d@ | sed "s/$2\.//" | sed "s/\./\//g"` |
|
local package_version=`echo $3 | cut -f2 -d@` |
|
echo $1/$package_dir/$package_version |
|
} |
|
|
|
## |
|
# Helps manage the package root of a HAL directory. |
|
# Should be called from the android root directory. |
|
# |
|
# Usage: do_makefiles_update [package:root ...] |
|
# Where the first package root is the current one. |
|
# |
|
function do_makefiles_update() { |
|
local root_or_cwd=${ANDROID_BUILD_TOP%%/}${ANDROID_BUILD_TOP:+/} |
|
|
|
local current_package=$(package_root_to_package $1) |
|
local current_dir=$root_or_cwd$(package_root_to_root $1) |
|
|
|
echo "Updating makefiles for $current_package in $current_dir." |
|
|
|
check_dirs "$root_or_cwd" $@ || return 1 |
|
|
|
local packages=$(get_packages $current_dir $current_package) || return 1 |
|
local root_arguments=$(get_root_arguments $@) || return 1 |
|
|
|
for p in $packages; do |
|
echo "Updating $p"; |
|
local additional_options= |
|
if [[ -f $(get_package_dir $current_dir $current_package $p)/.hidl_for_test ]]; then additional_options="-t"; fi |
|
hidl-gen -Lmakefile $root_arguments $p; |
|
rc=$?; if [[ $rc != 0 ]]; then return $rc; fi |
|
hidl-gen -Landroidbp $root_arguments $additional_options $p; |
|
rc=$?; if [[ $rc != 0 ]]; then return $rc; fi |
|
done |
|
|
|
local android_dirs=$(get_bp_dirs $current_dir) || return 1 |
|
|
|
echo "Updating Android.bp files." |
|
|
|
for bp_dir in $android_dirs; do |
|
bp="$bp_dir/Android.bp" |
|
# locations of Android.bp files in specific subdirectory of frameworks/hardware/interfaces |
|
android_bps=$(find $bp_dir \ |
|
-name "Android.bp" \ |
|
! -path $bp_dir/Android.bp \ |
|
-printf "%h\n" \ |
|
| sort) |
|
|
|
echo "// This is an autogenerated file, do not edit." > "$bp"; |
|
echo "subdirs = [" >> "$bp"; |
|
for a in $android_bps; do |
|
echo " \"${a#$bp_dir/}\"," >> "$bp"; |
|
done |
|
echo "]" >> "$bp"; |
|
done |
|
}
|
|
|