X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=scripts%2Flttng-modules%2Fparam-build.sh;h=dbfa5eea68eb98124ecb910f7ae265f6ca2f725e;hb=51c9c62db1805a4cdd96be18df4082f1ac5d81c5;hp=86efc71d31d65b887885a3345bc67506c8d73241;hpb=1d5a0a3c0ba014a5fe9924afda61cbb3a1b72f22;p=lttng-ci.git diff --git a/scripts/lttng-modules/param-build.sh b/scripts/lttng-modules/param-build.sh index 86efc71..dbfa5ee 100644 --- a/scripts/lttng-modules/param-build.sh +++ b/scripts/lttng-modules/param-build.sh @@ -1,6 +1,6 @@ -#!/bin/bash -exu +#!/bin/bash # -# Copyright (C) 2016-2019 - Michael Jeanson +# Copyright (C) 2016-2019 Michael Jeanson # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -15,6 +15,8 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . +set -exu + # Parameters arch=${arch:-} cross_arch=${cross_arch:-} @@ -32,6 +34,7 @@ verlte() { } verlt() { + # shellcheck disable=SC2015 [ "$1" = "$2" ] && return 1 || verlte "$1" "$2" } @@ -40,13 +43,22 @@ vergte() { } vergt() { + # shellcheck disable=SC2015 [ "$1" = "$2" ] && return 1 || vergte "$1" "$2" } git_clone_modules_sources() { mkdir -p "$MODULES_GIT_DIR" - git clone --depth=1 -b "${mversion}" "${mgitrepo}" "$MODULES_GIT_DIR" + + # If the version starts with "refs/", checkout the specific git ref, otherwise treat it + # as a branch name. + if [ "${mversion:0:5}" = "refs/" ]; then + git clone --no-tags --depth=1 "${mgitrepo}" "$MODULES_GIT_DIR" + (cd "$MODULES_GIT_DIR" && git fetch origin "${mversion}" && git checkout FETCH_HEAD) + else + git clone --no-tags --depth=1 -b "${mversion}" "${mgitrepo}" "$MODULES_GIT_DIR" + fi } # Checkout a shallow kernel tree of the specified tag @@ -114,7 +126,7 @@ select_compiler() { if [ "$selected_cc" != "gcc-4.8" ]; then # Older kernel Makefiles do not expect the compiler to default to PIE KAFLAGS="-fno-pie" - KCFLAGS="-fno-pie -no-pie" + KCFLAGS="-fno-pie -no-pie -fno-stack-protector" KCPPFLAGS="-fno-pie" export KAFLAGS KCFLAGS KCPPFLAGS fi @@ -140,10 +152,20 @@ build_linux_kernel() { exit 0 fi fi + + # Disable riscv64 config generation, we don't have a toolchain on bionic + sed -i 's/riscv64 //' debian.master/etc/kernelconfig + + # Hack for kernel Ubuntu-hwe-5.8 + if [ ! -f "debian/compat" ]; then + echo "10" > "debian/compat" + fi + fakeroot debian/rules clean KW_DEFCONFIG_DIR=. fakeroot debian/rules genconfigs KW_DEFCONFIG_DIR=. cp CONFIGS/"${ubuntu_config}" .config ;; + *) # Force 32bit build on i386, default is 64bit if [ "$arch" = "i386" ]; then @@ -159,11 +181,11 @@ build_linux_kernel() { ;; esac - # silentoldconfig was renamed in 4.19 + # oldnoconfig was renamed in 4.19 if vergte "$kversion" "4.19"; then - update_conf_target="syncconfig" + update_conf_target="olddefconfig" else - update_conf_target="silentoldconfig" + update_conf_target="oldnoconfig" fi # Fix 'defined(@array)' was removed from recent perl @@ -172,7 +194,7 @@ build_linux_kernel() { fi # Fix syntax of inline assembly which is confused with C++11 raw strings on gcc >= 5 - if [ "$CC" != "gcc-4.8" ]; then + if [ "$HOSTCC" != "gcc-4.8" ]; then if [ -f "arch/x86/kvm/svm.c" ]; then sed -i 's/ R"/ R "/g; s/"R"/" R "/g' arch/x86/kvm/svm.c fi @@ -182,11 +204,25 @@ build_linux_kernel() { fi fi + # Newer binutils don't accept 3 operand 'cmp' instructions on ppc64 + # Convert them to 'cmpw' which was previously done silently + if verlt "$kversion" "4.9"; then + find arch/powerpc/ -name "*.S" -print0 | xargs -0 sed -i "s/\(cmp\)\(\s\+[a-zA-Z0-9]\+,\s*[a-zA-Z0-9]\+,\s*[a-zA-Z0-9]\+\)/cmpw\2/" + find arch/powerpc/ -name "*.S" -print0 | xargs -0 sed -i "s/\(cmpli\)\(\s\+[a-zA-Z0-9]\+,\s*[a-zA-Z0-9]\+,\s*[a-zA-Z0-9]\+\)/cmplwi\2/" + sed -i "s/\$pie \-o \"\$ofile\"/\$pie --no-dynamic-linker -o \"\$ofile\"/" arch/powerpc/boot/wrapper + fi + # Fix a typo in v2.6.36.x if [ -f "arch/x86/kernel/entry_64.S" ]; then sed -i 's/END(do_hypervisor_callback)/END(xen_do_hypervisor_callback)/' arch/x86/kernel/entry_64.S fi + # Fix compiler switch in vdso Makefile for 2.6.36 to 2.6.36.2 + if { vergte "$kversion" "2.6.36" && verlte "$kversion" "2.6.36.3"; }; then + sed -i 's/-m elf_x86_64/-m64/' arch/x86/vdso/Makefile + sed -i 's/-m elf_i386/-m32/' arch/x86/vdso/Makefile + fi + # Fix kernel < 3.0 with gcc >= 4.7 if verlt "$kversion" "3.0"; then sed -i '/linux\/compiler.h/a #include \/* For asmregparm *\/' arch/x86/include/asm/ptrace.h @@ -196,33 +232,53 @@ build_linux_kernel() { fi # GCC 4.8 - sed -i "s/CONFIG_CC_STACKPROTECTOR_STRONG=y/# CONFIG_CC_STACKPROTECTOR_STRONG is not set/g" .config + if [ "$HOSTCC" == "gcc-4.8" ]; then + scripts/config --disable CONFIG_CC_STACKPROTECTOR_STRONG + fi # Don't try to sign modules - sed -i "s/CONFIG_MODULE_SIG=y/# CONFIG_MODULE_SIG is not set/g" .config + scripts/config --disable CONFIG_MODULE_SIG # Disable kernel stack frame correctness validation, introduced in 4.6.0 and currently fails - sed -i "s/CONFIG_STACK_VALIDATION=y/# CONFIG_STACK_VALIDATION is not set/g" .config + scripts/config --disable CONFIG_STACK_VALIDATION # Cause problems with inline assembly on i386 - sed -i "s/CONFIG_DEBUG_SECTION_MISMATCH=y/# CONFIG_DEBUG_SECTION_MISMATCH is not set/g" .config + scripts/config --disable CONFIG_DEBUG_SECTION_MISMATCH # Don't build samples, they are broken on some kernel releases - sed -i "s/CONFIG_SAMPLES=y/# CONFIG_SAMPLES is not set/g" .config + scripts/config --disable CONFIG_SAMPLES + scripts/config --disable CONFIG_BUILD_DOCSRC + + # Disable kcov + scripts/config --disable CONFIG_KCOV + + # Broken on some RT kernels + scripts/config --disable CONFIG_HYPERV + + # Broken drivers + scripts/config --disable CONFIG_RAPIDIO_TSI721 + scripts/config --disable CONFIG_SGI_XP + scripts/config --disable CONFIG_MFD_WM8994 + scripts/config --disable CONFIG_DRM_RADEON + scripts/config --disable CONFIG_SND_SOC_WM5100 # IGBVF won't build with recent gcc on 2.6.38.x if { vergte "$kversion" "2.6.37" && verlt "$kversion" "2.6.38"; }; then - sed -i "s/CONFIG_IGBVF=y/# CONFIG_IGBVF is not set/g" .config + scripts/config --disable CONFIG_IGBVF fi # Set required options - { - echo "CONFIG_KPROBES=y"; - echo "CONFIG_FTRACE=y"; - echo "CONFIG_BLK_DEV_IO_TRACE=y"; - echo "CONFIG_TRACEPOINTS=y"; - echo "CONFIG_KALLSYMS_ALL=y"; - } >> .config + scripts/config --enable CONFIG_TRACEPOINTS + scripts/config --enable CONFIG_KALLSYMS + scripts/config --enable CONFIG_HIGH_RES_TIMERS + scripts/config --enable CONFIG_KPROBES + scripts/config --enable CONFIG_FTRACE + scripts/config --enable CONFIG_BLK_DEV_IO_TRACE + scripts/config --enable CONFIG_KALLSYMS_ALL + scripts/config --enable CONFIG_HAVE_SYSCALL_TRACEPOINTS + scripts/config --enable CONFIG_PERF_EVENTS + scripts/config --enable CONFIG_EVENT_TRACING + scripts/config --enable CONFIG_KRETPROBES # Debug #cat .config @@ -230,12 +286,12 @@ build_linux_kernel() { make "$update_conf_target" CC="$CC" make -j"$NPROC" CC="$CC" - krelease=$(make -s kernelrelease) + krelease=$(make -s kernelrelease CC="$CC") # Save the kernel and modules mkdir -p "$LINUX_INSTOBJ_DIR/boot" - make INSTALL_MOD_PATH="$LINUX_INSTOBJ_DIR" INSTALL_MOD_STRIP=1 modules_install - make INSTALL_PATH="$LINUX_INSTOBJ_DIR/boot" install + make INSTALL_MOD_PATH="$LINUX_INSTOBJ_DIR" INSTALL_MOD_STRIP=1 modules_install CC="$CC" + make INSTALL_MOD_PATH="$LINUX_INSTOBJ_DIR" INSTALL_PATH="$LINUX_INSTOBJ_DIR/boot" install CC="$CC" rm -f "$LINUX_INSTOBJ_DIR/lib/modules/${krelease}/source" "$LINUX_INSTOBJ_DIR/lib/modules/${krelease}/build" ln -s ../../../../sources "$LINUX_INSTOBJ_DIR/lib/modules/${krelease}/source" ln -s ../../../../sources "$LINUX_INSTOBJ_DIR/lib/modules/${krelease}/source" @@ -277,9 +333,13 @@ extract_distro_headers() { rm -f "${LINUX_HDROBJ_DIR}/scripts/*.o" rm -f "${LINUX_HDROBJ_DIR}/scripts/*/*.o" - # On powerpc this object is required to link modules + # On powerpc 32bits this object is required to link modules if [ "${karch}" = "powerpc" ]; then - cp -a --parents arch/powerpc/lib/crtsavres.[So] "${LINUX_HDROBJ_DIR}/" + if [ "x$(scripts/config -s CONFIG_PPC64)" = "xy" ] && vergte "${kversion}" "5.4"; then + : + else + cp -a --parents arch/powerpc/lib/crtsavres.[So] "${LINUX_HDROBJ_DIR}/" + fi fi # On arm64 between 4.13 and 1.15 this object is required to build with ftrace support @@ -335,9 +395,13 @@ extract_distro_headers() { # And regen the modules support files make modules_prepare CC="$CC" - # On powerpc this object is required to link modules + # On powerpc 32bits this object is required to link modules if [ "${karch}" = "powerpc" ]; then - make arch/powerpc/lib/crtsavres.o CC="$CC" + if [ "x$(scripts/config -s CONFIG_PPC64)" = "xy" ] && vergte "${kversion}" "5.4"; then + : + else + make arch/powerpc/lib/crtsavres.o CC="$CC" + fi fi # On arm64 between 4.13 and 4.15 this object is required to build with ftrace support @@ -379,11 +443,12 @@ build_modules() { # Build modules KERNELDIR="${kdir}" make -j"${NPROC}" V=1 CC="$CC" + ret=$? set -e # We expect this build to fail, if it doesn't, fail the job. - if [ "$?" -eq 0 ]; then + if [ "$ret" -eq 0 ]; then echo "This build should have failed." exit 1 fi @@ -391,8 +456,6 @@ build_modules() { # 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." > "${outdir}/BROKEN.txt.ko" - set -e - KERNELDIR="${kdir}" make clean else # Regular build @@ -443,14 +506,14 @@ if [ "x${cross_arch}" != "x" ]; then "armhf") karch="arm" cross_compile="arm-linux-gnueabihf-" - vanilla_config="allyesconfig" + vanilla_config="imx_v6_v7_defconfig" ubuntu_config="armhf-config.flavour.generic" ;; "arm64") karch="arm64" cross_compile="aarch64-linux-gnu-" - vanilla_config="allyesconfig" + vanilla_config="defconfig" ubuntu_config="arm64-config.flavour.generic" ;; @@ -524,7 +587,7 @@ elif [ "x${arch}" != "x" ]; then ;; esac else - echo "Not arch or cross_arch specified" + echo "No arch or cross_arch specified" exit 1 fi @@ -546,9 +609,15 @@ secret_key = echo123456 # Enable S3 v4 signature APIs signature_v2 = False" > "$WORKSPACE/.s3cfg" -url_hash="$(echo -n "$kgitrepo/$ktag/$arch/$cross_arch" | md5sum | awk '{ print $1 }')" +url_hash="$(echo -n "$kgitrepo" | md5sum | awk '{ print $1 }')" obj_name="linux.tar.bz2" -obj_url_prefix="$OBJ_STORE_URL/linux-build/$url_hash" + +if [ "x${cross_arch}" = "x" ]; then + obj_url_prefix="$OBJ_STORE_URL/linux-build/$url_hash/$ktag/$arch/native" +else + obj_url_prefix="$OBJ_STORE_URL/linux-build/$url_hash/$ktag/${cross_arch}" +fi + obj_url="$obj_url_prefix/$obj_name" set +e