blob: 4ac6c179b6b44f9be78d30fba6ceff462792fcc0 [file] [log] [blame]
#!/bin/bash
if test -n "$KBUILD_DIR"
then
DIR="$KBUILD_DIR"
else
DIR="$(dirname $0)"
fi
. $DIR/../run-fstests/util/arch-funcs
KCONFIG_DIR=$DIR/kernel-configs
KBUILD=$DIR/kbuild
TYPE=config
DO_GENERIC=
set_default_arch
while [ "$1" != "" ];
do
case "$1" in
--perf)
TYPE=perf-config
;;
--blktests)
DO_BLKTESTS=yes
;;
--i386)
ARCH=i386
;;
--arm64)
ARCH=arm64
;;
--arch)
shift
ARCH=$1
;;
--dept)
DO_DEPT=yes
;;
--kasan)
DO_KASAN=yes
;;
--kcsan)
DO_KCSAN=yes
;;
--lockdep)
DO_LOCKDEP=yes
;;
--no-action)
NO_ACTION="echo"
;;
--ubsan)
DO_UBSAN=yes
;;
--full-debug-info|--debug-info)
DO_FULL_DEBUG_INFO=yes
;;
--extra-debug|debug)
DO_DEBUG=yes
;;
--get-config-fn)
DO_GET_CONFIG_FN=yes
;;
--generic)
DO_GENERIC=yes
;;
--help|help)
echo "Usage: install-kconfig [--i386] [--perf] [--blktests]" \
"[--extra-debug]"
echo " [--kasan] [--kcsan] [--ubsan] [--lockdep]" \
"[--full-debug-info]"
echo " [--get-config-fn] [--no-action]"
exit 0
;;
*)
echo "unknown option: $1"
exit 1
;;
esac
shift
done
set_canonicalized_arch "$ARCH"
set_cross_compile
if test ! -f MAINTAINERS -o ! -f Makefile ; then
echo "Not at top-level of kernel sources"
exit 1
fi
BLD_DIR=$($KBUILD --get-build-dir --arch $KERN_ARCH)
mkdir -p "$BLD_DIR"
# echo "Build directory is $BLD_DIR"
KVER=$(make kernelversion)
if test -z "$KVER" ; then
echo "Unable to determine kernel version"
exit 1
fi
VERSION=$(echo $KVER | awk -F. '{print $1}')
SUBVERSION=$(echo $KVER | awk -F. '{print $2}' | sed -e 's/-.*//')
# echo "Kernel version is $KVER - $VERSION $SUBVERSION"
CONFIG_FN=''
while test -z "$CONFIG_FN" ; do
fn="$KCONFIG_DIR/$KERN_ARCH-$TYPE-$VERSION.$SUBVERSION"
if test -n "$DO_GENERIC" -o ! -f "$fn" ; then
fn="$KCONFIG_DIR/$TYPE-$VERSION.$SUBVERSION"
fi
if test -f "$fn" ; then
CONFIG_FN=$fn
break
fi
if test $SUBVERSION -eq 0 ; then
VERSION=$(($VERSION - 1))
SUBVERSION=20
else
SUBVERSION=$(($SUBVERSION - 1))
fi
if test $VERSION = 2 ; then
echo "Can't find configuration file?" 1>&2
exit 1
fi
done
if test -n "$DO_GET_CONFIG_FN" ; then
echo "$CONFIG_FN"
exit 0
fi
FILES=("$CONFIG_FN")
if test -f "$KCONFIG_DIR/$KERN_ARCH-config" ; then
FILES+=("$KCONFIG_DIR/$KERN_ARCH-config")
fi
if test -n "$DO_BLKTESTS" ; then
FILES+=("$KCONFIG_DIR/blktests-configs")
fi
if test -n "$DO_DEBUG" ; then
FILES+=("$KCONFIG_DIR/extra-debug-configs")
fi
if test -n "$DO_FULL_DEBUG_INFO" ; then
FILES+=("$KCONFIG_DIR/full-debug-info-configs")
fi
if test -n "$DO_DEPT" ; then
FILES+=("$KCONFIG_DIR/dept-configs")
fi
if test -n "$DO_KASAN" ; then
FILES+=("$KCONFIG_DIR/kasan-configs")
fi
if test -n "$DO_KCSAN" ; then
FILES+=("$KCONFIG_DIR/kcsan-configs")
fi
if test -n "$DO_LOCKDEP" ; then
FILES+=("$KCONFIG_DIR/lockdep-configs")
fi
if test -n "$DO_UBSAN" ; then
FILES+=("$KCONFIG_DIR/ubsan-configs")
fi
if test -f "$BLD_DIR/.config" ; then
$NO_ACTION mv "$BLD_DIR/.config" "$BLD_DIR/.config.bak"
fi
if test -z "$NO_ACTION" ; then
cat "${FILES[@]}" > "$BLD_DIR/.config"
else
echo cat "${FILES[@]}" \> "$BLD_DIR/.config"
fi
tags=$(awk '/^# TAG: / {printf("-%s", $3)}' "$BLD_DIR/.config")
if test -n "$tags" ; then
base=$(awk -F\" '/CONFIG_LOCALVERSION/{print $2}' "$BLD_DIR/.config")
echo CONFIG_LOCALVERSION=\"${base}${tags}\" >> "$BLD_DIR/.config"
fi
ARGS=("ARCH=$KERN_ARCH")
if test "$BLD_DIR" != "." ; then
ARGS+=("O=$BLD_DIR")
fi
if grep -q CONFIG_CC_IS_CLANG=y "$BLD_DIR/.config" 2>/dev/null ; then
ARGS+=("CC=clang")
fi
if test -n "$CROSS_COMPILE" ; then
ARGS+=("CROSS_COMPILE=$CROSS_COMPILE")
fi
$NO_ACTION make "${ARGS[@]}" olddefconfig
exit 0