diff options
Diffstat (limited to 'configs')
-rwxr-xr-x | configs/build_configs.sh | 60 | ||||
-rw-r--r-- | configs/config_generation | 36 | ||||
-rwxr-xr-x | configs/process_configs.sh | 136 |
3 files changed, 207 insertions, 25 deletions
diff --git a/configs/build_configs.sh b/configs/build_configs.sh index 140511f19..f345e2af7 100755 --- a/configs/build_configs.sh +++ b/configs/build_configs.sh @@ -4,13 +4,33 @@ # and debug to form the necessary $PACKAGE_NAME<version>-<arch>-<variant>.config # files for building RHEL kernels, based on the contents of a control file -PACKAGE_NAME=kernel # defines the package name used +PACKAGE_NAME="${1:-kernel}" # defines the package name used +KVERREL="${2:-}" +SUBARCH="${3:-}" # defines a specific arch for use with rh-configs-arch-prep target +SCRIPT="$(readlink -f $0)" +OUTPUT_DIR="$PWD" +SCRIPT_DIR="$(dirname $SCRIPT)" + +# to handle this script being a symlink +cd $SCRIPT_DIR set errexit set nounset control_file="config_generation" +cleanup() +{ + rm -f config-* +} + +die() +{ + echo "$1" + cleanup + exit 1 +} + function combine_config_layer() { dir=$1 @@ -29,14 +49,27 @@ function merge_configs() archvar=$1 arch=$(echo "$archvar" | cut -f1 -d"-") configs=$2 - name=$PACKAGE_NAME-$archvar.config + name=$OUTPUT_DIR/$PACKAGE_NAME-$archvar.config echo -n "Building $name ... " touch config-merging config-merged + + # apply base first + for config in $(echo $configs | sed -e 's/:/ /g') + do + perl merge.pl config-base-$config config-merging > config-merged + if [ ! $? -eq 0 ]; then + die "Failed to merge base" + fi + mv config-merged config-merging + done for config in $(echo $configs | sed -e 's/:/ /g') do + # not all override files exist + test -e config-$config || continue + perl merge.pl config-$config config-merging > config-merged if [ ! $? -eq 0 ]; then - exit + die "Failed to merge configs" fi mv config-merged config-merging done @@ -60,10 +93,12 @@ function merge_configs() echo "done" } -glist=$(find baseconfig -type d) -dlist=$(find debugconfig -type d) +glist=$(find base-generic -type d) +dlist=$(find base-debug -type d) +gllist=$(test -d generic && find generic -type d) +dllist=$(test -d debug && find debug -type d) -for d in $glist $dlist +for d in $glist $dlist $gllist $dllist do combine_config_layer $d done @@ -86,4 +121,15 @@ do fi done < $control_file -rm -f config-* +# A passed in kernel version implies copy to final location +# otherwise defer to another script +if test -n "$KVERREL" +then + for i in kernel-*.config + do + NEW="$(echo $i | sed "s/$PACKAGE_NAME-$SUBARCH/$PACKAGE_NAME-$KVERREL-$SUBARCH/")" + mv $i $NEW + done +fi + +cleanup diff --git a/configs/config_generation b/configs/config_generation index 64ae444f4..b88a5ea94 100644 --- a/configs/config_generation +++ b/configs/config_generation @@ -4,33 +4,33 @@ # config options, lowest priority to highest # x86_64 -x86_64=baseconfig:baseconfig-x86:baseconfig-x86-x86_64 -x86_64-debug=baseconfig:baseconfig-x86:baseconfig-x86-x86_64:debugconfig:debugconfig-x86:debugconfig-x86-x86_64 +x86_64=generic:generic-x86:generic-x86-x86_64 +x86_64-debug=generic:generic-x86:generic-x86-x86_64:debug:debug-x86:debug-x86-x86_64 # i686 -i686=baseconfig:baseconfig-x86:baseconfig-x86-i686 -i686-debug=baseconfig:baseconfig-x86:baseconfig-x86-i686:debugconfig:debugconfig-x86 -i686-PAE=baseconfig:baseconfig-x86:baseconfig-x86-i686PAE -i686-PAEdebug=baseconfig:baseconfig-x86:baseconfig-x86-i686PAE:debugconfig:debugconfig-x86 +i686=generic:generic-x86:generic-x86-i686 +i686-debug=generic:generic-x86:generic-x86-i686:debug:debug-x86 +i686-PAE=generic:generic-x86:generic-x86-i686PAE +i686-PAEdebug=generic:generic-x86:generic-x86-i686PAE:debug:debug-x86 # ppc64 -ppc64=baseconfig:baseconfig-powerpc:baseconfig-powerpc-powerpc64 -ppc64-debug=baseconfig:baseconfig-powerpc:baseconfig-powerpc-powerpc64:debugconfig +ppc64=generic:generic-powerpc:generic-powerpc-powerpc64 +ppc64-debug=generic:generic-powerpc:generic-powerpc-powerpc64:debug # ppc64le -ppc64le=baseconfig:baseconfig-powerpc:baseconfig-powerpc-powerpc64le -ppc64le-debug=baseconfig:baseconfig-powerpc:baseconfig-powerpc-powerpc64le:debugconfig +ppc64le=generic:generic-powerpc:generic-powerpc-powerpc64le +ppc64le-debug=generic:generic-powerpc:generic-powerpc-powerpc64le:debug # s390x -s390x=baseconfig:baseconfig-s390x -s390x-debug=baseconfig:baseconfig-s390x:debugconfig +s390x=generic:generic-s390x +s390x-debug=generic:generic-s390x:debug # aarch64 -aarch64=baseconfig:baseconfig-arm:baseconfig-arm-arm64 -aarch64-debug=baseconfig:baseconfig-arm:baseconfig-arm-arm64:debugconfig:debugconfig-arm +aarch64=generic:generic-arm:generic-arm-aarch64 +aarch64-debug=generic:generic-arm:generic-arm-aarch64:debug:debug-arm # arm -armv7hl=baseconfig:baseconfig-arm:baseconfig-arm-armv7:baseconfig-arm-armv7-armv7 -armv7hl-debug=baseconfig:baseconfig-arm:baseconfig-arm-armv7:baseconfig-arm-armv7-armv7:debugconfig:debugconfig-arm -armv7hl-lpae=baseconfig:baseconfig-arm:baseconfig-arm-armv7:baseconfig-arm-armv7-lpae -armv7hl-lpae-debug=baseconfig:baseconfig-arm:baseconfig-arm-armv7:baseconfig-arm-armv7-lpae:debugconfig:debugconfig-arm +armv7hl=generic:generic-arm:generic-arm-armv7:generic-arm-armv7-armv7 +armv7hl-debug=generic:generic-arm:generic-arm-armv7:generic-arm-armv7-armv7:debug:debug-arm +armv7hl-lpae=generic:generic-arm:generic-arm-armv7:generic-arm-armv7-lpae +armv7hl-lpae-debug=generic:generic-arm:generic-arm-armv7:generic-arm-armv7-lpae:debug:debug-arm diff --git a/configs/process_configs.sh b/configs/process_configs.sh new file mode 100755 index 000000000..4de45d65a --- /dev/null +++ b/configs/process_configs.sh @@ -0,0 +1,136 @@ +#!/bin/bash +# +# This script takes the merged config files and processes them through oldconfig +# and listnewconfig + + +die() +{ + echo "$1" + exit 1 +} + +# stupid function to find top of tree to do kernel make configs +switch_to_toplevel() +{ + path="$(pwd)" + while test -n "$path" + do + test -d $path/firmware && \ + test -e $path/MAINTAINERS && \ + test -d $path/drivers && \ + break + + path="$(dirname $path)" + done + + test -n "$path" || die "Can't find toplevel" + echo "$path" +} + +checkoptions() +{ + /usr/bin/awk ' + + /is not set/ { + split ($0, a, "#"); + split(a[2], b); + if (NR==FNR) { + configs[b[1]]="is not set"; + } else { + if (configs[b[1]] != "" && configs[b[1]] != "is not set") + print "Found # "b[1] " is not set, after generation, had " b[1] " " configs[b[1]] " in Source tree"; + } + } + + /=/ { + split ($0, a, "="); + if (NR==FNR) { + configs[a[1]]=a[2]; + } else { + if (configs[a[1]] != "" && configs[a[1]] != a[2]) + print "Found "a[1]"="configs[a[1]]" after generation, had " a[1]"="a[2]" in Source tree"; + } + } + ' $1 $2 > .mismatches + + if test -s .mismatches + then + echo "Error: Mismatches found in configuration files" + cat .mismatches + exit 1 + fi +} + +function process_configs() +{ + # assume we are in $source_tree/configs, need to get to top level + pushd $(switch_to_toplevel) + + for cfg in $SCRIPT_DIR/${PACKAGE_NAME}${KVERREL}${SUBARCH}*.config + do + arch=$(head -1 $cfg | cut -b 3-) + cfgtmp="${cfg}.tmp" + cfgorig="${cfg}.orig" + cat $cfg > $cfgorig + + echo -n "Processing $cfg ... " + + # an empty grep is good but leaves a return value, so use # 'true' to bypass + make ARCH=$arch KCONFIG_CONFIG=$cfg listnewconfig | grep -E 'CONFIG_' > .newoptions || true + if test -n "$NEWOPTIONS" && test -s .newoptions + then + echo "Found unset config items, please set them to an appropriate value" + cat .newoptions + rm .newoptions + exit 1 + fi + rm .newoptions + + make ARCH=$arch KCONFIG_CONFIG=$cfg oldnoconfig > /dev/null || exit 1 + echo "# $arch" > ${cfgtmp} + cat "${cfg}" >> ${cfgtmp} + if test -n "$CHECKOPTIONS" + then + checkoptions $cfgtmp $cfgorig + fi + mv ${cfgtmp} ${cfg} + rm ${cfgorig} + echo "done" + done + rm "$SCRIPT_DIR"/*.config.old + popd > /dev/null + + echo "Processed config files are in $SCRIPT_DIR" +} + +NEWOPTIONS="" +CHECKOPTIONS="" + +while [[ $# -gt 0 ]] +do + key="$1" + case $key in + -n) + NEWOPTIONS="x" + ;; + -c) + CHECKOPTIONS="x" + ;; + *) + break;; + esac + shift +done + +PACKAGE_NAME="${1:-kernel}" # defines the package name used +KVERREL="$(test -n "$2" && echo "-$2" || echo "")" +SUBARCH="$(test -n "$3" && echo "-$3" || echo "")" +SCRIPT="$(readlink -f $0)" +OUTPUT_DIR="$PWD" +SCRIPT_DIR="$(dirname $SCRIPT)" + +# to handle this script being a symlink +cd $SCRIPT_DIR + +process_configs |