#!/bin/bash
RETVAL=0
ARCHES="arm64 arm x86"
if [ -z "$ANDROID_BUILD_TOP" ]; then
echo "ANDROID_BUILD_TOP not set, exiting"
exit 1
fi
AFRAGS="$ANDROID_BUILD_TOP/kernel/configs"
KERNEL_VERSIONS=`ls -d $AFRAGS/android-* | xargs -n 1 basename`
check_fragment()
{
ERRORS=0
while read line; do
grep -q "$line" .config
if [ $? -ne 0 ]
then
echo "Error, $line not found in merged config."
ERRORS=1
fi
done < <(grep -v -E "^# " $1)
if [ $ERRORS -ne 0 ]
then
echo "Errors encountered while checking $1"
RETVAL=1
else
echo "Fragment $1 is okay"
fi
echo ""
}
check_arches()
{
for arch in $ARCHES; do
rm .config
make ARCH=$arch allnoconfig
FRAGMENTS="$AFRAGS/$version/android-base.config \
$AFRAGS/$version/android-recommended.config"
if [ -f $AFRAGS/$version/android-base-$arch.config ]; then
FRAGMENTS="$FRAGMENTS $AFRAGS/$version/android-base-$arch.config"
fi
if [ -f $AFRAGS/$version/android-recommended-$arch.config ]; then
FRAGMENTS="$FRAGMENTS $AFRAGS/$version/android-recommended-$arch.config"
fi
ARCH=$arch scripts/kconfig/merge_config.sh .config $FRAGMENTS &> /dev/null
for f in $FRAGMENTS; do
check_fragment $f
done
done
}
check_configs()
{
for version in $KERNEL_VERSIONS; do
echo "Changing to $KERNEL_PATH"
cd $KERNEL_PATH
git checkout $version
check_arches
done
}
show_help()
{
cat << EOF
Usage: ${0##*/} [-h] [-a arches] [-v versions] -k path-to-kernel
Check that the kernel config fragments are consistent with the Kconfig files
in the given kernel versions. This requires an android common kernel repo to
be checked out and made available to this script via the -k option or the
KERNEL_PATH environment variable. Note this script does not verify the
configs in the conditional XML fragments.
-h display this help and exit
-a arches quote-enclosed whitespace separated list of
architectures to check, valid architectures are
arm64, arm, and x86
-k kernel path to android common kernel repo
-v versions quote-enclosed whitespace separated list of
kernel versions to check (android-x.y)
EOF
}
OPTIND=1
while getopts "h?a:v:k:" opt; do
case "$opt" in
h|\?)
show_help
exit 0
;;
a)
ARCHES="$OPTARG"
;;
v)
KERNEL_VERSIONS="$OPTARG"
;;
k)
KERNEL_PATH="${OPTARG/#\~/$HOME}"
;;
esac
done
check_configs