| Index: src/scripts/build_kernel.sh
|
| diff --git a/src/scripts/build_kernel.sh b/src/scripts/build_kernel.sh
|
| index 6fd124b1497a52e8ba767128bb838dda4d1ee9a0..33accce3a45c40818e3d17580a612e998bd56c62 100755
|
| --- a/src/scripts/build_kernel.sh
|
| +++ b/src/scripts/build_kernel.sh
|
| @@ -21,17 +21,23 @@ SRC_ROOT=$(dirname $(readlink -f $(dirname "$0")))
|
| KERNEL_DIR="$SRC_ROOT/third_party/kernel"
|
| DEFAULT_KCONFIG="${KERNEL_DIR}/files/chromeos/config/chromeos-intel-menlow"
|
|
|
| +CROSS_COMPILE_FLAG=""
|
| +VERBOSE_FLAG=""
|
| +
|
| # Flags
|
| DEFAULT_BUILD_ROOT=${BUILD_ROOT:-"${SRC_ROOT}/build"}
|
| DEFINE_string config "${DEFAULT_KCONFIG}" \
|
| "The kernel configuration file to use."
|
| DEFINE_integer revision 002 \
|
| "The package revision to use"
|
| -DEFINE_string output_root "${DEFAULT_BUILD_ROOT}/x86/local_packages" \
|
| +DEFINE_string output_root "" \
|
| "Directory in which to place the resulting .deb package"
|
| DEFINE_string build_root "$DEFAULT_BUILD_ROOT" \
|
| "Root of build output"
|
| -FLAGS_HELP="Usage: $0 [flags]"
|
| +DEFINE_string cross_compile "" \
|
| + "Prefix for cross compile build tools"
|
| +DEFINE_boolean verbose $FLAGS_FALSE "Print debugging information in addtion to normal processing."
|
| +FLAGS_HELP="Usage: $0 [flags]"
|
|
|
| # Parse command line
|
| FLAGS "$@" || exit 1
|
| @@ -40,10 +46,6 @@ eval set -- "${FLAGS_ARGV}"
|
| # Die on any errors.
|
| set -e
|
|
|
| -# TODO: We detect the ARCH below. We can sed the FLAGS_output_root to replace
|
| -# an ARCH placeholder with the proper architecture rather than assuming x86.
|
| -mkdir -p "$FLAGS_output_root"
|
| -
|
| # Get kernel package configuration from repo.
|
| # TODO: Find a workaround for needing sudo for this. Maybe create a symlink
|
| # to /tmp/kernel-pkg.conf when setting up the chroot env?
|
| @@ -52,23 +54,33 @@ sudo cp "$KERNEL_DIR"/package/kernel-pkg.conf /etc/kernel-pkg.conf
|
| # Parse kernel config file for target architecture information. This is needed
|
| # to determine the full package name and also to setup the environment for
|
| # kernel build scripts which use "uname -m" to autodetect architecture.
|
| -KCONFIG="$FLAGS_config"
|
| +KCONFIG=`readlink -f "$FLAGS_config"`
|
| if [ ! -f "$KCONFIG" ]; then
|
| KCONFIG="$KERNEL_DIR"/files/chromeos/config/"$KCONFIG"
|
| fi
|
| -if [ -n $(grep 'CONFIG_X86=y' "$KCONFIG") ]
|
| +if [ $(grep 'CONFIG_X86=y' "$KCONFIG") ]
|
| then
|
| ARCH="i386"
|
| -elif [ -n $(grep 'CONFIG_X86_64=y' "$KCONFIG") ]
|
| +elif [ $(grep 'CONFIG_X86_64=y' "$KCONFIG") ]
|
| then
|
| ARCH="x86_64"
|
| -elif [ -n $(grep 'CONFIG_ARM=y' "$KCONFIG") ]
|
| +elif [ $(grep 'CONFIG_ARM=y' "$KCONFIG") ]
|
| then
|
| - ARCH="arm"
|
| + ARCH="armel"
|
| + KPKG_ARCH=arm
|
| else
|
| exit 1
|
| fi
|
|
|
| +if [ ! $FLAGS_output_root ]
|
| +then
|
| + FLAGS_output_root="${DEFAULT_BUILD_ROOT}/${ARCH}/local_packages"
|
| +fi
|
| +
|
| +# TODO: We detect the ARCH below. We can sed the FLAGS_output_root to replace
|
| +# an ARCH placeholder with the proper architecture rather than assuming x86.
|
| +mkdir -p "$FLAGS_output_root"
|
| +
|
| # Parse the config file for a line with "version" in it (in the header)
|
| # and remove any leading text before the major number of the kernel version
|
| FULLVERSION=$(sed -e '/version/ !d' -e 's/^[^0-9]*//' $KCONFIG)
|
| @@ -129,12 +141,38 @@ else
|
| CONCURRENCY_LEVEL=$(($(cat /proc/cpuinfo | grep "processor" | wc -l) * 2))
|
| fi
|
|
|
| +# Setup the cross-compilation environment, if necessary, using the cross_compile
|
| +# Flag from the command line
|
| +if [ $FLAGS_cross_compile ]
|
| +then
|
| + CROSS_COMPILE_FLAG="--cross-compile $FLAGS_cross_compile"
|
| +fi
|
| +
|
| +if [ $FLAGS_verbose -eq $FLAGS_TRUE ]
|
| +then
|
| + VERBOSE_FLAG="--verbose"
|
| +fi
|
| +
|
| # Build the kernel and make package. "setarch" is used so that scripts which
|
| # detect architecture (like the "oldconfig" rule in kernel Makefile) don't get
|
| # confused when cross-compiling.
|
| make-kpkg clean
|
| +
|
| +# Setarch does not support arm, so if we are compiling for arm we need to
|
| +# make sure that uname -m will return the appropriate architeture.
|
| +if [ ! -n "$(setarch $ARCH ls)" ]
|
| +then
|
| + alias uname="echo $ARCH"
|
| + SETARCH=""
|
| +else
|
| + SETARCH="setarch $ARCH"
|
| +fi
|
| +
|
| MAKEFLAGS="CONCURRENCY_LEVEL=$CONCURRENCY_LEVEL" \
|
| - setarch $ARCH make-kpkg \
|
| + $SETARCH \
|
| + make-kpkg \
|
| + $VERBOSE_FLAG \
|
| + $CROSS_COMPILE_FLAG \
|
| --append-to-version="-$CHROMEOS_TAG" --revision="$FLAGS_revision" \
|
| --arch="$ARCH" \
|
| --rootcmd fakeroot \
|
|
|