}
verlt() {
+ # shellcheck disable=SC2015
[ "$1" = "$2" ] && return 1 || verlte "$1" "$2"
}
}
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
exit 0
fi
fi
+
+ # Disable riscv64 config generation, we don't have a toolchain on bionic
+ sed -i 's/riscv64 //' debian.master/etc/kernelconfig
+
fakeroot debian/rules clean KW_DEFCONFIG_DIR=.
fakeroot debian/rules genconfigs KW_DEFCONFIG_DIR=.
cp CONFIGS/"${ubuntu_config}" .config
;;
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
- sed -i "s/CONFIG_BUILD_DOCSRC=y/# CONFIG_BUILD_DOCSRC is not set/g" .config
+ scripts/config --disable CONFIG_SAMPLES
+ scripts/config --disable CONFIG_BUILD_DOCSRC
# Disable kcov
- sed -i "s/CONFIG_KCOV=y/# CONFIG_KCOV is not set/g" .config
+ scripts/config --disable CONFIG_KCOV
# Broken on some RT kernels
- sed -i "s/CONFIG_HYPERV=y/# CONFIG_HYPERV is not set/g" .config
+ scripts/config --disable CONFIG_HYPERV
# Broken drivers
- sed -i "s/CONFIG_RAPIDIO_TSI721=y/# CONFIG_RAPIDIO_TSI721 is not set/g" .config
- sed -i "s/CONFIG_SGI_XP=y/# CONFIG_SGI_XP is not set/g" .config
- sed -i "s/CONFIG_MFD_WM8994=y/# CONFIG_MFD_WM8994 is not set/g" .config
- sed -i "s/CONFIG_DRM_RADEON=y/# CONFIG_DRM_RADEON is not set/g" .config
- sed -i "s/CONFIG_SND_SOC_WM5100=y/# CONFIG_SND_SOC_WM5100 is not set/g" .config
+ 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
- sed -i 's/# CONFIG_KPROBES is not set/CONFIG_KPROBES=y/g' .config
- sed -i 's/# CONFIG_FTRACE is not set/CONFIG_FTRACE=y/g' .config
- sed -i 's/# CONFIG_BLK_DEV_IO_TRACE is not set/CONFIG_BLK_DEV_IO_TRACE=y/g' .config
- sed -i 's/# CONFIG_KALLSYMS_ALL is not set/CONFIG_KALLSYMS_ALL=y/g' .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
# 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"
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
# 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
"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"
;;
;;
esac
else
- echo "Not arch or cross_arch specified"
+ echo "No arch or cross_arch specified"
exit 1
fi
url_hash="$(echo -n "$kgitrepo" | md5sum | awk '{ print $1 }')"
obj_name="linux.tar.bz2"
-obj_url_prefix="$OBJ_STORE_URL/linux-build/$url_hash/$ktag/$arch/${cross_arch:-native}"
+
+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