blob: c4415359c38a169fbd3448404256c2585714511f [file] [log] [blame]
#!/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>.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 <Enter> 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 <arch>.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