| #!/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" |
| family='chromeos' |
| bindir="`pwd`/chromeos/scripts" |
| common_conf="$confdir/config.common.$family" |
| 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 config.flavour.*[^~]) |
| |
| # Merge configs |
| # We merge config.common.ubuntu + config.common.<arch> + |
| # config.flavour.<flavour> |
| |
| for config in $flavourconfigs; do |
| fullconf="$tmpdir/$arch-$config-full" |
| case $config in |
| *) |
| : >"$fullconf" |
| if [ -f $common_conf ]; then |
| cat $common_conf >> "$fullconf" |
| fi |
| if [ -f $archconfdir/config.common.$arch ]; then |
| cat $archconfdir/config.common.$arch >> "$fullconf" |
| fi |
| cat "$archconfdir/$config" >>"$fullconf" |
| ;; |
| esac |
| done |
| |
| for config in $flavourconfigs; do |
| if [ -f $archconfdir/$config ]; then |
| fullconf="$tmpdir/$arch-$config-full" |
| cat "$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 " * Run menuconfig on $arch/$config... Press a key." |
| read |
| make O=`pwd`/build ARCH=$kernarch menuconfig ;; |
| *) # Bad! |
| exit 1 ;; |
| esac |
| cat build/.config > $archconfdir/$config |
| if [ "$keep" = "1" ]; then |
| cat build/.config > CONFIGS/$arch-$config |
| fi |
| else |
| echo "!! Config not found $archconfdir/$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 config.common.$arch; $bindir/splitconfig; \ |
| mv config.common config.common.$arch; \ |
| cp config.common.$arch $tmpdir) |
| done |
| |
| rm -f $common_conf |
| |
| # Now run splitconfig on all the config.common.<arch> copied to |
| # $tmpdir |
| (cd $tmpdir; $bindir/splitconfig) |
| ( |
| cd $confdir; |
| rm -f *-full |
| grep -v 'is UNMERGABLE' <$tmpdir/config.common >$common_conf |
| for arch in $archs; do |
| grep -v 'is UNMERGABLE' <$tmpdir/config.common.$arch \ |
| >$arch/config.common.$arch |
| done |
| ) |