ansible: Install gcc5 on Debian 12 CI nodes
[lttng-ci.git] / scripts / lttng-modules / param-build.sh
index 5d12ca50c5cb45d80322783e6749cbffee479368..07324e7c1c0165b12530e6f13fe4f320795c4f47 100644 (file)
@@ -143,11 +143,35 @@ select_compiler() {
     # 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
@@ -194,7 +218,7 @@ export_kbuild_flags() {
     _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+=(
@@ -288,11 +312,14 @@ build_linux_kernel() {
     # 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=.
@@ -770,6 +797,12 @@ extract_distro_headers() {
         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}/"
@@ -959,6 +992,13 @@ if [ "x${cross_arch}" != "x" ]; then
             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
@@ -1009,6 +1049,12 @@ elif [ "x${arch}" != "x" ]; then
             ubuntu_config="ppc64el-config.flavour.generic"
             ;;
 
+        "riscv64")
+            karch="riscv"
+            vanilla_config="allmodconfig"
+            ubuntu_config="riscv64-config.flavour.generic"
+            ;;
+
         *)
             echo "Unsupported arch $arch"
             exit 1
This page took 0.023563 seconds and 4 git commands to generate.