ansible: Required kernel headers for SLES
[lttng-ci.git] / scripts / lttng-modules / param-build.sh
index 1535b3e5485ba9d4b68d8f6bcece1217e1b3c1f6..2b29e78e8159a07b97c68871fff857b4e51393cb 100644 (file)
@@ -151,9 +151,27 @@ select_compiler() {
         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
@@ -200,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+=(
@@ -304,7 +322,10 @@ build_linux_kernel() {
           exit 0
         fi
 
-        fakeroot debian/rules clean KW_DEFCONFIG_DIR=.
+        FAKEROOT_ARGS=(
+            'KW_DEFCONFIG_DIR=.'
+        )
+        fakeroot debian/rules clean "${FAKEROOT_ARGS[@]}"
 
         # Hack for kernel Ubuntu-hwe-5.8
         # The debian/control file is produced by the clean target above, so this
@@ -318,7 +339,19 @@ build_linux_kernel() {
         # Ubuntu annotations.
         # In any case, the configuration will be updated with any missing values
         # later in our build script.
-        fakeroot debian/rules genconfigs KW_DEFCONFIG_DIR=. do_skip_checks=true
+        FAKEROOT_ARGS+=('do_skip_checks=true')
+
+        # Some Ubuntu tags default the toolchain using `gcc?=gcc-XX` in
+        # `debian/rules.d/0-common-vars.mk`. This may fail if the gcc version
+        # used as a default isn't available.
+        # For example, Ubuntu-6.8.0-7.7 sets `gcc?=gcc-13`, and that version
+        # of gcc isn't available on the deb12-amd64 ci-nodes.
+        # Work has also already been done in `select_compiler` to make our
+        # own decision of which compiler to use. As a result of both cases,
+        # our compiler choice should be passed into genconfigs.
+        FAKEROOT_ARGS+=("gcc=${selected_cc}")
+
+        fakeroot debian/rules genconfigs "${FAKEROOT_ARGS[@]}"
         cp CONFIGS/"${ubuntu_config}" .config
         ;;
 
This page took 0.04307 seconds and 4 git commands to generate.