# Enter linux source dir
cd "$LINUX_SRCOBJ_DIR"
- kversion=$(make -s kernelversion)
+ # Get the kernel version using the host toolchain, some cross-compiled arch may be broken
+ kversion=$(unset ARCH; unset CROSS_COMPILE; make -s kernelversion)
+
+ if [ "${cross_arch}" = "riscv64" ] && verlt "${kversion}" "5.12"; then
+ echo "RISC-V support was upstreamed in kernel v4.19 but kprobes support was only added in v5.12. Don't try to build it."
+ exit 0
+ fi
+
+ if [ "${cross_arch}" = "arm64" ] && verlt "${kversion}" "3.7"; then
+ echo "ARM64 support was added as of v3.7. Don't try to build it."
+ exit 0
+ fi
+
+ if [ "${cross_arch}" = "arm64" ] && verlt "${kversion}" "3.18"; then
+ echo "lttng-modules requires gcc >= 5.1 for ARM64 due to compiler bugs in gcc."
+ echo "gcc-5 support was added to the kernel as of v3.18. Don't this to build it."
+ exit 0
+ fi
if { verlt "$kversion" "4.4"; }; then
# Force gcc-4.8 for kernels before 4.4
selected_cc='gcc-4.8'
+ # Due to compiler bugs in gcc on arm64, lttng-modules disallows
+ # compilation with gcc < 5.1.
+ if [[ "${cross_arch}" == "arm64" ]] ; then
+ selected_cc='gcc-5.5'
+ export PATH="${PATH:-}:/usr/local/gcc5.5/bin"
+ export LD_LIBRARY_PATH="${LD_LIBRARY_PATH:-}:/usr/local/gcc5.5/lib"
+ fi
selected_cc_version=$(echo "${selected_cc}" | cut -d'-' -f2)
else
for cc in $(list_gccs) ; do
_KCPPFLAGS=()
_HOSTCFLAGS=()
- if [ "$selected_cc" != "gcc-4.8" ]; then
+ if { vergte "$selected_cc_version" "6"; }; then
# Older kernel Makefiles do not expect the compiler to default to PIE
_KAFLAGS+=(-fno-pie)
_KCFLAGS+=(
# Generate kernel configuration
case "$ktag" in
Ubuntu*)
- if [ "${cross_arch}" = "powerpc" ]; then
- if vergte "${kversion}" "4.10"; then
- echo "Ubuntu removed big endian powerpc configuration from kernel >= 4.10. Don't try to build it."
- exit 0
- fi
+ if [ "${cross_arch}" = "powerpc" ] && vergte "${kversion}" "4.10"; then
+ echo "Ubuntu removed big endian powerpc configuration from kernel >= 4.10. Don't try to build it."
+ exit 0
+ fi
+
+ if [ "${cross_arch}" = "riscv64" ] && verlt "${kversion}" "6.2"; then
+ echo "Ubuntu added RISC-V config to their 'regular' kernels in v6.2. Don't try to build it."
+ exit 0
fi
fakeroot debian/rules clean KW_DEFCONFIG_DIR=.
fi
fi
+ # On riscv with 5.14 the vsdo objects are required
+ if [ "${karch}" = "riscv" ] && \
+ ( { vergte "${kversion}" "5.14"; } && { verlt "${kversion}" "5.15"; } ); then
+ cp -a --parents arch/riscv/kernel/vdso/*.o "${LINUX_HDROBJ_DIR}/"
+ fi
+
# Newer kernels need objtool to build modules when CONFIG_STACK_VALIDATION=y
if [ -f tools/objtool/objtool ]; then
cp -a --parents tools/objtool/objtool "${LINUX_HDROBJ_DIR}/"
ubuntu_config="ppc64el-config.flavour.generic"
;;
+ "riscv64")
+ karch="riscv"
+ cross_compile="riscv64-linux-gnu-"
+ vanilla_config="defconfig"
+ ubuntu_config="riscv64-config.flavour.generic"
+ ;;
+
*)
echo "Unsupported cross arch $cross_arch"
exit 1
ubuntu_config="ppc64el-config.flavour.generic"
;;
+ "riscv64")
+ karch="riscv"
+ vanilla_config="allmodconfig"
+ ubuntu_config="riscv64-config.flavour.generic"
+ ;;
+
*)
echo "Unsupported arch $arch"
exit 1