#!/bin/bash # Script to merge all configs and run 'make silentoldconfig' on it to wade out bad juju. # Then split the configs into distro-commmon and flavour-specific parts # We have to be in the top level kernel source directory if [ ! -f MAINTAINERS ] || [ ! -f Makefile ]; then echo "This does not appear to be the kernel source directory." 1>&2 exit 1 fi mode=${1:?"Usage: $0 [oldconfig|editconfig]"} case "$mode" in oldconfig) ;; # All is good editconfig) ;; # All is good genconfig) ;; # All is good *) echo "$0 called with invalid mode" 1>&2 exit 1 ;; esac kerneldir="`pwd`" confdir="$kerneldir/chromeos/config" archs="x86_64 i386 armel" bindir="`pwd`/chromeos/scripts" base_conf="$confdir/base.config" tmpdir=`mktemp -d` if [ "$mode" = "genconfig" ]; then keep=1 mode="oldconfig" test -d CONFIGS || mkdir CONFIGS fi test -d build || mkdir build for arch in $archs; do # Map debian archs to kernel archs case "$arch" in amd64) kernarch="x86_64" ;; lpia) kernarch="x86" ;; sparc) kernarch="sparc64" ;; armel) kernarch="arm" ;; *) kernarch="$arch" ;; esac echo "" echo "***************************************" echo "* Processing $arch ($kernarch) ... " archconfdir=$confdir/$arch flavourconfigs=$(cd $archconfdir && ls *.flavour.config) # Merge configs # We merge base.config + common.config + .flavour.config for config in $flavourconfigs; do fullconf="$tmpdir/$arch-$config-full" cp $base_conf "$fullconf" cat $archconfdir/common.config >> "$fullconf" cat $archconfdir/$config >> "$fullconf" done for config in $flavourconfigs; do fullconf="$tmpdir/$arch-$config-full" mv "$fullconf" build/.config # Call oldconfig or menuconfig case "$mode" in oldconfig) # Weed out incorrect config parameters echo "* Run silentoldconfig on $arch/$config ..." make O=`pwd`/build ARCH=$kernarch silentoldconfig ;; editconfig) # Interactively edit config parameters echo "* $arch/$config: press to edit, S to skip" read -s -n 1 if [ $REPLY = 's' -o $REPLY = 'S' ]; then echo "* Skip: running silentoldconfig" make O=`pwd`/build ARCH=$kernarch silentoldconfig else echo "* Running menuconfig" make O=`pwd`/build ARCH=$kernarch menuconfig fi ;; *) # Bad! exit 1 ;; esac cat build/.config > $archconfdir/$config if [ "$keep" = "1" ]; then mv build/.config CONFIGS/$arch-$config fi done echo "Running splitconfig for $arch" echo # Can we make this more robust by avoiding $tmpdir completely? # This approach was used for now because I didn't want to change # splitconfig (cd $archconfdir; rm common.config; $bindir/splitconfig; \ mv common.config $tmpdir/$arch.config) done # Now run splitconfig on all the .common.config copied to # $tmpdir (cd $tmpdir; $bindir/splitconfig) mv $tmpdir/common.config $base_conf for arch in $archs; do mv $tmpdir/$arch.config $confdir/$arch/common.config done rm -rf $tmpdir