#!/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