X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=scripts%2Flttng-modules%2Fbuild.sh;h=a301c918a85c1c82828f4ff9bf0c55ae847225c1;hb=7ddb479f014b458ef992d55d71a57322bcc19c7f;hp=4f356b9b71d245239b47de17a12e8a202dea4d91;hpb=f12f1d66b108047330ad7f7d6e611be3645925b4;p=lttng-ci.git diff --git a/scripts/lttng-modules/build.sh b/scripts/lttng-modules/build.sh index 4f356b9..a301c91 100755 --- a/scripts/lttng-modules/build.sh +++ b/scripts/lttng-modules/build.sh @@ -16,12 +16,30 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . +# Kernel version compare functions +verlte() { + [ "$1" = "`printf '%s\n%s' $1 $2 | sort -V | head -n1`" ] +} + +verlt() { + [ "$1" = "$2" ] && return 1 || verlte $1 $2 +} + +vergte() { + [ "$1" = "`printf '%s\n%s' $1 $2 | sort -V | tail -n1`" ] +} + +vergt() { + [ "$1" = "$2" ] && return 1 || vergte $1 $2 +} + + # Use all CPU cores NPROC=$(nproc) -SRCDIR="${WORKSPACE}/lttng-modules" +SRCDIR="${WORKSPACE}/src/lttng-modules" BUILDDIR="${WORKSPACE}/build" -LNXSRCDIR="${WORKSPACE}/linux" +LNXSRCDIR="${WORKSPACE}/src/linux" LNXBINDIR="${WORKSPACE}/deps/linux/build" # Create build directory @@ -31,13 +49,41 @@ mkdir -p "${BUILDDIR}" # Enter source dir cd "${SRCDIR}" -# Fix linux Makefile +# Fix path to linux src in builddir Makefile sed -i "s#MAKEARGS := -C .*#MAKEARGS := -C ${LNXSRCDIR}#" "${LNXBINDIR}"/Makefile -# Build modules -make -j${NPROC} -C "${LNXBINDIR}" M="$(pwd)" +# Get kernel version from source tree +cd "${LNXBINDIR}" +KVERSION=$(make kernelversion) +cd - + +# kernels 3.10 to 3.10.13 and 3.11 to 3.11.2 introduce a deadlock in the +# timekeeping subsystem. We want those build to fail. +if { vergte "$KVERSION" "3.10" && verlte "$KVERSION" "3.10.13"; } || \ + { vergte "$KVERSION" "3.11" && verlte "$KVERSION" "3.11.2"; }; then + + set +e + + # Build modules + KERNELDIR="${LNXBINDIR}" make -j${NPROC} V=1 CONFIG_LTTNG=m + + # We expect this build to fail, if it doesn't, fail the job. + if [ "$?" -eq 0 ]; then + exit 1 + fi + + # We have to publish at least one file or the build will fail + echo "This kernel is broken, there is a deadlock in the timekeeping subsystem." > "${BUILDDIR}/BROKEN.txt" + + set -e + +else # Regular build + + # Build modules + KERNELDIR="${LNXBINDIR}" make -j${NPROC} V=1 CONFIG_LTTNG=m -# Install modules to build dir -make INSTALL_MOD_PATH="${BUILDDIR}" -C "${LNXBINDIR}" M="$(pwd)" modules_install + # Install modules to build dir + KERNELDIR="${LNXBINDIR}" make INSTALL_MOD_PATH="${BUILDDIR}" modules_install +fi # EOF