X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=config%2Flustre-build-linux.m4;h=fb58fce0f6a7f42afaddb001d74cbf1354952a26;hp=ec77262b29ae5179a584c1d7f615dab2755a0d2f;hb=96786e021765b93b3d9607d8e771319dfb2bd675;hpb=25c93758d6b1136d268fe3fcc1c4979c17463c0b diff --git a/config/lustre-build-linux.m4 b/config/lustre-build-linux.m4 index ec77262..fb58fce 100644 --- a/config/lustre-build-linux.m4 +++ b/config/lustre-build-linux.m4 @@ -44,7 +44,7 @@ AC_MSG_CHECKING([for Linux release]) if test -s $LINUX_OBJ/include/$AUTOCONF_HDIR/utsrelease.h ; then LINUXRELEASEHEADER=$AUTOCONF_HDIR/utsrelease.h else - LINUXRELEASEHEADER=linux/version.h + LINUXRELEASEHEADER=$VERSION_HDIR/version.h fi LB_LINUX_TRY_MAKE([ #include <$LINUXRELEASEHEADER> @@ -65,12 +65,12 @@ LB_LINUX_TRY_MAKE([ rm -f build/conftest.i if test x$LINUXRELEASE = x ; then AC_MSG_RESULT([unknown]) - AC_MSG_ERROR([Could not determine Linux release version from linux/version.h.]) + AC_MSG_ERROR([Could not determine Linux release version from $LINUXRELEASEHEADER.]) fi AC_MSG_RESULT([$LINUXRELEASE]) AC_SUBST(LINUXRELEASE) -moduledir='/lib/modules/'$LINUXRELEASE/updates/kernel +moduledir='$(CROSS_PATH)/lib/modules/$(LINUXRELEASE)/updates/kernel' AC_SUBST(moduledir) modulefsdir='$(moduledir)/fs/$(PACKAGE)' @@ -94,22 +94,19 @@ AC_MSG_RESULT($RELEASE) AC_SUBST(RELEASE) # check is redhat/suse kernels -AC_MSG_CHECKING([that RedHat kernel]) -LB_LINUX_TRY_COMPILE([ - #include - ],[ - #ifndef RHEL_RELEASE_CODE - #error "not redhat kernel" - #endif - ],[ +AC_MSG_CHECKING([for RedHat kernel version]) + AS_IF([fgrep -q RHEL_RELEASE ${LINUX_OBJ}/include/linux/version.h], [ RHEL_KERNEL="yes" - AC_MSG_RESULT([yes]) - ],[ - AC_MSG_RESULT([no]) -]) - -LB_LINUX_CONFIG([SUSE_KERNEL],[SUSE_KERNEL="yes"],[]) - + RHEL_RELEASE=$(expr 0$(awk -F \" '/ RHEL_RELEASE / { print [$]2 }' \ + ${LINUX_OBJ}/include/linux/version.h) + 1) + KERNEL_VERSION=$(sed -e 's/\(@<:@23@:>@\.@<:@0-9@:>@*\.@<:@0-9@:>@*\).*/\1/' <<< ${LINUXRELEASE}) + RHEL_KERNEL_VERSION=${KERNEL_VERSION}-${RHEL_RELEASE} + AC_SUBST(RHEL_KERNEL_VERSION) + AC_MSG_RESULT([${RHEL_KERNEL_VERSION}]) + ], [ + AC_MSG_RESULT([not found]) + LB_LINUX_CONFIG([SUSE_KERNEL],[SUSE_KERNEL="yes"],[]) + ]) ]) # LB_ARG_REPLACE_PATH(PACKAGE, PATH) @@ -222,8 +219,12 @@ LB_CHECK_FILE([$LINUX_OBJ/include/generated/autoconf.h],[AUTOCONF_HDIR=generated [LB_CHECK_FILE([$LINUX_OBJ/include/linux/autoconf.h],[AUTOCONF_HDIR=linux], [AC_MSG_ERROR([Run make config in $LINUX.])])]) AC_SUBST(AUTOCONF_HDIR) -LB_CHECK_FILE([$LINUX_OBJ/include/linux/version.h],[], - [AC_MSG_ERROR([Run make config in $LINUX.])]) +LB_CHECK_FILE([$LINUX_OBJ/include/linux/version.h], [VERSION_HDIR=linux], + [LB_CHECK_FILE([$LINUX_OBJ/include/generated/uapi/linux/version.h], + [VERSION_HDIR=generated/uapi/linux], + [AC_MSG_ERROR([Run make config in $LINUX.])]) + ]) + AC_SUBST(VERSION_HDIR) # ----------- kconfig.h exists --------------- # kernel 3.1, $LINUX/include/linux/kconfig.h is added @@ -240,7 +241,7 @@ LB_CHECK_FILE([$LINUX_OBJ/include/linux/kconfig.h], # tarred up the tree and ran make dep etc. in it, then # version.h gets overwritten with a standard linux one. -if grep rhconfig $LINUX_OBJ/include/linux/version.h >/dev/null ; then +if grep rhconfig $LINUX_OBJ/include/$VERSION_HDIR/version.h >/dev/null ; then # This is a clean kernel-source tree, we need to # enable extensive workarounds to get this to build # modules @@ -255,6 +256,7 @@ if grep rhconfig $LINUX_OBJ/include/linux/version.h >/dev/null ; then fi # this is needed before we can build modules +LB_LINUX_CROSS LB_LINUX_VERSION # --- check that we can build modules at all @@ -285,6 +287,45 @@ AC_DEFUN([LB_LINUX_SYMVERFILE], AC_SUBST(SYMVERFILE) ]) +# +# LB_LINUX_CROSS +# +# check for cross compilation +# +AC_DEFUN([LB_LINUX_CROSS], + [AC_MSG_CHECKING([for cross compilation]) +CROSS_VARS= +CROSS_PATH= +AS_IF([test "x$cross_compiling" = xno], [AC_MSG_RESULT([no])], + [case $host_vendor in + # The K1OM architecture is an extension of the x86 architecture. + # So, the $host_arch is x86_64. + k1om) + AC_MSG_RESULT([Intel(R) Xeon Phi(TM)]) + CC_TARGET_ARCH=`$CC -v 2>&1 | grep Target: | sed -e 's/Target: //'` + if test $CC_TARGET_ARCH != x86_64-$host_vendor-linux ; then + AC_MSG_ERROR([Cross compiler not found in PATH.]) + fi + CROSS_VARS="ARCH=$host_vendor CROSS_COMPILE=x86_64-$host_vendor-linux-" + CROSS_PATH=${CROSS_PATH:=/opt/intel/mic/lustre/device-k1om} + CCAS=$CC + # need to produce special section for debuginfo extraction + LDFLAGS="${LDFLAGS} -Wl,--build-id" + EXTRA_KLDFLAGS="${EXTRA_KLDFLAGS} -Wl,--build-id" + if test x$enable_server = xyes ; then + AC_MSG_WARN([Disabling server (not supported for x86_64-$host_vendor-linux).]) + enable_server='no' + fi + ;; + *) + AC_MSG_RESULT([yes, but no changes]) + ;; + esac + ]) +AC_SUBST(CROSS_VARS) +AC_SUBST(CROSS_PATH) +]) + # these are like AC_TRY_COMPILE, but try to build modules against the # kernel, inside the build directory @@ -312,7 +353,8 @@ $2 AC_DEFUN([LB_LINUX_COMPILE_IFELSE], [m4_ifvaln([$1], [AC_LANG_CONFTEST([$1])])dnl rm -f build/conftest.o build/conftest.mod.c build/conftest.ko -AS_IF([AC_TRY_COMMAND(cp conftest.c build && make -d [$2] ${LD:+"LD=$LD"} CC="$CC" -f $PWD/build/Makefile LUSTRE_LINUX_CONFIG=$LINUX_CONFIG LINUXINCLUDE="$EXTRA_LNET_INCLUDE -I$LINUX/arch/`echo $target_cpu|sed -e 's/powerpc64/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/'`/include -I$LINUX/arch/`echo $target_cpu|sed -e 's/ppc.*/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/'`/include/generated -I$LINUX_OBJ/include -I$LINUX/include -I$LINUX_OBJ/include2 -include $CONFIG_INCLUDE" -o tmp_include_depends -o scripts -o include/config/MARKER -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $MODULE_TARGET=$PWD/build) >/dev/null && AC_TRY_COMMAND([$3])], +SUBARCH=$(echo $target_cpu | sed -e 's/powerpc64/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/') +AS_IF([AC_TRY_COMMAND(cp conftest.c build && make -d [$2] ${LD:+"LD=$LD"} CC="$CC" -f $PWD/build/Makefile LUSTRE_LINUX_CONFIG=$LINUX_CONFIG LINUXINCLUDE="$EXTRA_LNET_INCLUDE -I$LINUX/arch/$SUBARCH/include -I$LINUX/arch/$SUBARCH/include/generated -Iinclude -I$LINUX/include -Iinclude2 -I$LINUX/include/uapi -I$LINUX/include/generated -I$LINUX/arch/$SUBARCH/include/uapi -Iarch/$SUBARCH/include/generated/uapi -I$LINUX/include/uapi -Iinclude/generated/uapi -include $CONFIG_INCLUDE" -o tmp_include_depends -o scripts -o include/config/MARKER -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $CROSS_VARS $MODULE_TARGET=$PWD/build) >/dev/null && AC_TRY_COMMAND([$3])], [$4], [_AC_MSG_LOG_CONFTEST m4_ifvaln([$5],[$5])dnl]) @@ -328,7 +370,7 @@ AC_DEFUN([LB_LINUX_ARCH], [AC_MSG_CHECKING([Linux kernel architecture]) AS_IF([rm -f $PWD/build/arch make -s --no-print-directory echoarch -f $PWD/build/Makefile \ - LUSTRE_LINUX_CONFIG=$LINUX_CONFIG -C $LINUX \ + LUSTRE_LINUX_CONFIG=$LINUX_CONFIG -C $LINUX $CROSS_VARS \ ARCHFILE=$PWD/build/arch && LINUX_ARCH=`cat $PWD/build/arch`], [AC_MSG_RESULT([$LINUX_ARCH])], [AC_MSG_ERROR([Could not determine the kernel architecture.])]) @@ -473,11 +515,16 @@ else esac else if ! $compatrdma_found; then - if test -f $O2IBPATH/config.mk; then + if test -f $O2IBPATH/config.mk; then . $O2IBPATH/config.mk elif test -f $O2IBPATH/ofed_patch.mk; then . $O2IBPATH/ofed_patch.mk fi + else + case $RHEL_KERNEL_VERSION in + 2.6.32-358*) + EXTRA_LNET_INCLUDE="$EXTRA_LNET_INCLUDE -DCONFIG_COMPAT_RHEL_6_4";; + esac fi if test -n "$BACKPORT_INCLUDES"; then OFED_BACKPORT_PATH="$O2IBPATH/${BACKPORT_INCLUDES/*\/kernel_addons/kernel_addons}/"