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
fakeroot debian/rules genconfigs KW_DEFCONFIG_DIR=.
cp CONFIGS/"${ubuntu_config}" .config
;;
+
*)
# Force 32bit build on i386, default is 64bit
if [ "$arch" = "i386" ]; then
;;
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
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
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 <linux\/linkage.h> \/* For asmregparm *\/' arch/x86/include/asm/ptrace.h
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
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_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"
# 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
# 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
"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"
;;
# 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"
+obj_url_prefix="$OBJ_STORE_URL/linux-build/$url_hash/$ktag/$arch/${cross_arch:-native}"
obj_url="$obj_url_prefix/$obj_name"
set +e