lmake
来自「lustre 1.6.5 source code」· 代码 · 共 886 行 · 第 1/2 页
TXT
886 行
#!/bin/sh# option variablesDESTDIR=KERNELDIR=TARGET=# Not sure what to put here# TARGET_ARCH=$(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)TARGET_ARCH=TARGET_CONFIG=JOBS=1CONFIGURE_FLAGS=TMPDIR=${TMPDIR:-"/var/tmp"}# commands to runBUILD_LUSTRE=0BUILD_KERNEL=0DEPEND_KERNEL=0INSTALL_LUSTRE=0INSTALL_KERNEL=0SAVE_HEADERS=0UNPACK_KERNEL=0# provided by target fileKERNEL=SERIES=CONFIG=VERSION=EXTRA_VERSION=BASE_ARCHS=BIGMEM_ARCHS=BOOT_ARCHS=JENSEN_ARCHS=SMP_ARCHS=BIGSMP_ARCHS=PSERIES64_ARCHS=UP_ARCHS=RHBUILD=0SUSEBUILD=0# flat-out globalsTOPDIR=TARGET_FILE=KERNEL_FILE=SERIES_FILE=CONFIG_FILE=RPMBUILD=canon(){ pushd $1 >/dev/null echo $PWD popd >/dev/null}TOPDIR="${0%%${0##*/}}"if [ "${TOPDIR}" ] ; then TOPDIR=$(canon "${TOPDIR}/..")else TOPDIR=$(canon "..")filbuild_topdir(){ retdir=$TOPDIR while [ ! -d $retdir/BUILD ] ; do retdir=$(canon "$retdir/..") if [ "$retdir" = "/" ] ; then break; fi done echo "$retdir"}cleanup(){ true}fatal(){ cleanup [ "$2" ] && echo [ "$2" ] && echo "${0##*/}: $2" exit $1}list_targets(){ echo -n "Available targets:" for target in $TOPDIR/lustre/kernel_patches/targets/*.target ; do target_file=${target##*/} echo -n " ${target_file%%.target}" done echo}usage(){ cat <<EOFUsage: ${0##*/} [OPTION]... [-- <lustre configure options>]Options: --build same as --build-kernel --build-lustre --unpack-kernel --build-lustre configure and compile lustre. Requires that --build-kernel was already run. --build-kernel configure and compile a kernel. Implies --depend-kernel. Requires that --unpack-kernel was already run. --depend-kernel) Prepares a kernel tree for building (similar to make mrproper oldconfig dep). Requires that --unpack-kernel was already run. --destdir=DESTDIR Root directory to install into (like DESTDIR with auto*). --extraversion=EXTRAVERSION Overrides the target kernel\'s EXTRAVERSION text. -h, --help Display this message. --install same as --install-kernel --install-lustre --install-lustre run make install in the Lustre tree. --install-kernel install the kernel image and modules. -j jobs This works just like the -j option to make, and is passed to make when building. --kerneldir=KERNELDIR Directory containing linux source tarballs. --target=TARGET Name of the configuration to use. The available targets are listed below. --target-arch=ARCH Specifies an architecture to use when choosing a kernel config file. Default is i386. --target-config=CONFIG Specifies a special option (such as smp, bigsmp, bigmem, or BOOT) to use when choosing a kernel config file. This also modifies the kernel version and modules directory. --unpack-kernel Untars and patches the kernel source. The order that commands (--build-lustre, --unpack-kernel) are specified on the command line is ignored; ${0##*/} will always execute them in the correct order (unpack, then build, then install etc.).EOF list_targets fatal "$1" "$2"}check_options(){ (( $BUILD_LUSTRE || $BUILD_KERNEL || $DEPEND_KERNEL || \ $INSTALL_LUSTRE || $INSTALL_KERNEL || $SAVE_HEADERS || \ $UNPACK_KERNEL )) || \ fatal 1 "No commands specified." if (( $UNPACK_KERNEL )) ; then [ "$KERNELDIR" ] || \ fatal 1 "A kernel directory must be specified with --kerneldir." [ -d "$KERNELDIR" ] || \ fatal 1 "$KERNELDIR is not a directory." fi if (( $INSTALL_LUSTRE || $INSTALL_KERNEL || $SAVE_HEADERS )) ; then [ -z "$DESTDIR" -o -d "$DESTDIR" ] || \ fatal 1 "$DESTDIR is not a directory." fi [ "$TARGET" ] || usage 1 "A target must be specified with --target." TARGET_FILE="$TOPDIR/lustre/kernel_patches/targets/$TARGET.target" [ -r "$TARGET_FILE" ] || \ fatal 1 "Target '$TARGET' was not found. Try --list-targets." if [ -z "$JOBS" -o "$JOBS" -lt "1" ] ; then JOBS=1 fi RPMBUILD=$(which rpmbuild 2>/dev/null | head -1) if [ ! "$RPMBUILD" -o "$RPMBUILD" == "" ]; then RPMBUILD=$(which rpm 2>/dev/null | head -1) if [ ! "$RPMBUILD" -o "$RPMBUILD" == "" ]; then usage 1 "Could not find binary for making rpms (tried rpmbuild and rpm)." fi fi}get_lustre_version(){ for series in $SERIES ; do SERIES_FILE="$TOPDIR/lustre/kernel_patches/series/$series" lustre_patch=$(grep lustre_version "$SERIES_FILE" 2>/dev/null) [ "$lustre_patch" ] && break done [ "$lustre_patch" ] || \ fatal 1 "Could not determine Lustre version from $SERIES series." awk '/^\+#define LUSTRE_KERNEL_VERSION /{ print $3 }' \ "$TOPDIR/lustre/kernel_patches/patches/$lustre_patch" 2>/dev/null}load_target(){ EXTRA_VERSION_save="$EXTRA_VERSION" . "$TARGET_FILE" [ "$KERNEL" ] || fatal 1 "Target $TARGET did not specify a kernel."# Suse 2.6 has our patches in already# [ "$SERIES" ] || fatal 1 "Target $TARGET did not specify a patch series."# [ "$CONFIG" ] || fatal 1 "Target $TARGET did not specify a kernel config." [ "$VERSION" ] || fatal 1 "Target $TARGET did not specify the kernel version." if [ "$KERNELDIR" ] ; then KERNEL_FILE="$KERNELDIR/$KERNEL" [ -r "$KERNELDIR/$KERNEL" ] || \ fatal 1 "Target $TARGET's kernel file $KERNEL not found in kernel directory $KERNELDIR." fi if [ "$SERIES" ] ; then for series in $SERIES ; do SERIES_FILE="$TOPDIR/lustre/kernel_patches/series/$series" [ -r "$SERIES_FILE" ] || \ fatal 1 "Target $TARGET's series $SERIES missing from $TOPDIR/lustre/kernel_patches/series." done fi TARGET_ARCH=${TARGET_ARCH:-$BASE_ARCHS} CONFIG_TARGET="$TARGET-${TARGET_ARCH}${TARGET_CONFIG:+-$TARGET_CONFIG}" CONFIG_FILE="$TOPDIR/lustre/kernel_patches/kernel_configs/kernel-$VERSION-$CONFIG_TARGET.config" [ -r "$CONFIG_FILE" ] || fatal 1 "Target $TARGET's config file $CONFIG_FILE missing from $TOPDIR/lustre/kernel_patches/configs." if [ "$EXTRA_VERSION_save" ] ; then EXTRA_VERSION="$EXTRA_VERSION_save" else EXTRA_VERSION="${EXTRA_VERSION}_lustre.$(get_lustre_version)" fi}# do these after load_target(), which maybe export CCsetup_ccache_distcc(){ # distcc can't handle ".incbin" if [ "$TARGET" == "2.6-suse" -o "$TARGET" == "2.6-rhel4" ]; then if [ "$TARGET_ARCH" == "x86_64" ]; then unset DISTCC fi fi CC=${CC:-gcc} if [ "$CCACHE" ]; then CC="$CCACHE $CC" [ "$DISTCC" ] && export CCACHE_PREFIX="$DISTCC" else [ "$DISTCC" ] && CC="$DISTCC $CC" fi}tarflags(){ case "$1" in '') fatal 1 "tarflags(): File name argument missing." ;; *.tar.gz | *.tgz) echo 'zxf' ;; *.tar.bz2) echo 'jxf' ;; *.tar) echo 'xf' ;; *) fatal 1 "tarflags(): Unrecognized tar extension in file: $1" ;; esac}untar(){ echo "Untarring ${1##*/}..." tar $(tarflags $1) $1}extract_kernel(){ (( $UNPACK_KERNEL )) || return 0 pushd "$TOPDIR" >/dev/null if [ -d linux ] ; then [ -L linux ] && rm -rf $(readlink linux) rm -rf linux fi untar "$KERNEL_FILE" [ -d linux ] || ln -sf linux* linux popd >/dev/null}patch_kernel(){ (( $UNPACK_KERNEL )) || return 0 [ "$SERIES" ] || return 0 pushd "$TOPDIR/linux" >/dev/null for series in $SERIES ; do echo -n "Applying series $series:" SERIES_FILE="$TOPDIR/lustre/kernel_patches/series/$series" for patch in $(<"$SERIES_FILE") ; do PATCH_FILE="$TOPDIR/lustre/kernel_patches/patches/$patch" [ -r "$PATCH_FILE" ] || \ fatal 1 "Patch file not found: $patch" echo -n " $patch" patch -s -p1 < "$PATCH_FILE" || fatal 1 "Error applying patch $patch." done echo done popd >/dev/null}set_make(){ MAKE="make -s" if [ "$CC" ] ; then MAKE_CC="CC=$CC" fi if [ "$ARCH" ] ; then MAKE_ARCH="$MAKE ARCH=$ARCH" else case $TARGET_ARCH in i?86) ;; *) MAKE_ARCH="$MAKE ARCH=$TARGET_ARCH" ;; esac fi MAKE_J="$MAKE -j $JOBS"}timed_run() { SLEEP_TIME=$1 shift set -o monitor #bash -c "$@" & ("$@") & child_pid=$! (sleep $SLEEP_TIME kill -TERM -$child_pid 2>/dev/null sleep 5 kill -KILL -$child_pid 2>/dev/null echo "$1 was killed due to timeout") & dog_pid=$! wait $child_pid # status will be set to 143 if the process had to be killed due to timeout status=${PIPESTATUS[0]} kill -KILL -$dog_pid return $status}depend_kernel(){ (( $DEPEND_KERNEL )) || return 0 # we need to override $CC at make time, since there is no # configure set_make pushd "$TOPDIR/linux" >/dev/null echo "Overriding EXTRAVERSION in kernel..." local extra_version="${EXTRA_VERSION_DELIMITER}${EXTRA_VERSION}" if [ -n "${TARGET_CONFIG}" ]; then extra_version="${extra_version}${TARGET_DELIMITER}${TARGET_CONFIG}" fi perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = ${extra_version}/" Makefile echo "Making depend in $PWD..." $MAKE "$MAKE_CC" mrproper || fatal 1 "Error running make mrproper" rm -f rpm-release # remove localversion-* files to avoid kernel release string # srewing up by the top-level Makefile rm -f localversion-* cp "$CONFIG_FILE" .config local UPDATE_OLDCONFIG= for oc in oldconfig_nonint silentoldconfig oldconfig ; do if grep -q "$oc" Makefile ; then timed_run 300 $MAKE "$MAKE_CC" $oc || UPDATE_OLDCONFIG=1 break fi done if [ "$UPDATE_OLDCONFIG" ] ; then # use the expect script to "make oldconfig" and answer the questions for # new items conservatively. QA will get notified on anything newly added # for them to review and adjust accordingly. local logfile=$(mktemp /tmp/XXXXXX) #timed_run 300 $TOPDIR/build/update_oldconfig $logfile #local RC=${PIPESTATUS[0]} #local RC=$(strace -f -o update_oldconfig.strace bash -c "$TOPDIR/build/update_oldconfig $logfile; echo \$?") $TOPDIR/build/update_oldconfig $logfile local RC=${PIPESTATUS[0]} #$TOPDIR/build/update_oldconfig $logfile #local RC=${PIPESTATUS[0]} if [ $RC -eq 143 ]; then fatal 1 "update_oldconfig timed out" elif [ $RC -ne 0 ]; then # dump the log cat $logfile rm -f $logfile if [ -f update_oldconfig.strace ]; then cat update_oldconfig.strace rm -f update_oldconfig.strace fi fatal 1 "update_oldconfig failed: $RC. See log above." fi fi rm -f $logfile # now notify if resulting .config is different than $CONFIG_FILE local tmpfile=$(mktemp /tmp/XXXXXX)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?