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.
122 lines
3.1 KiB
122 lines
3.1 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
|
|
printf "%s" "-r$package_root "
|
|
done
|
|
}
|
|
|
|
##
|
|
# 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
|
|
}
|
|
|
|
##
|
|
# Returns the number of processors to run on, on this machine
|
|
function get_num_processors() {
|
|
if command -v nproc >/dev/null 2>&1; then
|
|
PROCS=$(nproc --all 2>/dev/null) && echo $PROCS && return 0
|
|
elif command -v sysctl >/dev/null 2>&1; then
|
|
PROCS=$(sysctl -n hw.logicalcpu 2>/dev/null) && echo $PROCS && return 0
|
|
fi
|
|
|
|
echo 1
|
|
}
|
|
|
|
##
|
|
# Helps manage the package root of a HAL directory.
|
|
# Should be called from the android root directory.
|
|
#
|
|
# Usage: do_makefiles_update [-O owner-name] [package:root ...]
|
|
# Where the first package root is the current one.
|
|
#
|
|
function do_makefiles_update() {
|
|
if ! command -v hidl-gen 1>/dev/null; then
|
|
echo "Cannot find hidl-gen, try lunching or making it ('m hidl-gen')?"
|
|
exit 1
|
|
fi
|
|
|
|
local owner=
|
|
if [[ "$1" = "-O" ]]; then
|
|
owner="$2"
|
|
shift 2
|
|
fi
|
|
|
|
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
|
|
|
|
function __update_internal() {
|
|
local owner="$1"
|
|
local root_arguments="$2"
|
|
local package="$3"
|
|
echo "Updating $package"
|
|
hidl-gen -O "$owner" -Landroidbp $root_arguments $package || {
|
|
echo "Command failed: hidl-gen -O \"$owner\" -Landroidbp $root_arguments $package";
|
|
return 1;
|
|
}
|
|
}
|
|
export -f __update_internal
|
|
|
|
echo "$packages" |\
|
|
xargs -P $(get_num_processors) -I {} \
|
|
bash -c "__update_internal \"$owner\" \"$root_arguments\" \"{}\"" || return 1
|
|
}
|