X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=scripts%2Flttng-modules%2Fparam-build.sh;h=81389bd3b278421c178a068b769f0d7220753315;hb=1490b049e5e289235463b2eb3968abf3fc88d651;hp=902ee72db2871ca22df78256f6d4944f6fe63e01;hpb=780f6285f0c5ee0028893b00b25b6a5778e7c5a2;p=lttng-ci.git diff --git a/scripts/lttng-modules/param-build.sh b/scripts/lttng-modules/param-build.sh index 902ee72..81389bd 100644 --- a/scripts/lttng-modules/param-build.sh +++ b/scripts/lttng-modules/param-build.sh @@ -18,14 +18,23 @@ set -exu # Parameters -arch=${arch:-amd64} +platforms=${platforms:-} +# Derive arch from label if it isn't set +if [ -z "${arch:-}" ] ; then + # Labels may be platform specific, eg. jammy-amd64, deb12-armhf + regex='[[:alnum:]]+-([[:alnum:]]+)' + if [[ "${platforms}" =~ ${regex} ]] ; then + arch="${BASH_REMATCH[1]}" + else + arch="${platforms:-}" + fi +fi cross_arch=${cross_arch:-} ktag=${ktag:-} kgitrepo=${kgitrepo:-} mversion=${mversion:-} mgitrepo=${mgitrepo:-} - ## FUNCTIONS ## # Kernel version compare functions @@ -94,6 +103,16 @@ tar_archive_obj() { cd - } +list_gccs() { + local gccs + gccs=() + IFS=: read -r -a path_array <<< "$PATH" + while read -r gcc ; do + gccs+=("$gcc") + done < <(find "${path_array[@]}" -maxdepth 1 -regex '.*/gcc-[0-9\.]+$' -printf '%f\n' | sort -t- -k2 -V -r) + echo "${gccs[@]}" +} + # Find the most recent GCC version supported by the kernel sources select_compiler() { local selected_cc @@ -104,7 +123,7 @@ select_compiler() { set +e - for cc in gcc-8 gcc-5 gcc-4.8; do + for cc in $(list_gccs) ; do if "${CROSS_COMPILE:-}${cc}" -I include/ -D__LINUX_COMPILER_H -D__LINUX_COMPILER_TYPES_H -E include/linux/compiler-gcc.h; then selected_cc="$cc" break @@ -156,13 +175,21 @@ build_linux_kernel() { # 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=. + # Hack for kernel Ubuntu-hwe-5.8 - if [ ! -f "debian/compat" ]; then + # The debian/control file is produced by the clean target above, so this + # check needs to happen afterwards. + if [ ! -f "debian/compat" ] && ! grep -q debhelper-compat debian/control; then echo "10" > "debian/compat" fi - fakeroot debian/rules clean KW_DEFCONFIG_DIR=. - fakeroot debian/rules genconfigs KW_DEFCONFIG_DIR=. + # genconfigs check can fail in certain cases, eg. when a more recent + # compiler exposes kernel configuration flags which aren't set in the + # 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 cp CONFIGS/"${ubuntu_config}" .config ;; @@ -172,11 +199,6 @@ build_linux_kernel() { export ARCH="i386" fi - # allyesconfig is mostly broken for kernels of the 2.6 series - if verlt "$kversion" "3.0"; then - vanilla_config="defconfig" - fi - make "${vanilla_config}" ;; esac @@ -267,6 +289,9 @@ build_linux_kernel() { scripts/config --disable CONFIG_IGBVF fi + # Don't fail the build on warnings + scripts/config --disable CONFIG_WERROR + # Set required options scripts/config --enable CONFIG_TRACEPOINTS scripts/config --enable CONFIG_KALLSYMS @@ -280,9 +305,6 @@ build_linux_kernel() { scripts/config --enable CONFIG_EVENT_TRACING scripts/config --enable CONFIG_KRETPROBES - # FIXME: disable objtool on vmlinux, it OOMs on allyesconfig - sed -i 's/objtool_link vmlinux.o//' scripts/link-vmlinux.sh || true - # Debug #cat .config @@ -556,37 +578,37 @@ elif [ "x${arch}" != "x" ]; then case "$arch" in "i386") karch="x86" - vanilla_config="allyesconfig" + vanilla_config="allmodconfig" ubuntu_config="i386-config.flavour.generic" ;; "amd64") karch="x86" - vanilla_config="allyesconfig" + vanilla_config="allmodconfig" ubuntu_config="amd64-config.flavour.generic" ;; "armhf") karch="arm" - vanilla_config="allyesconfig" + vanilla_config="allmodconfig" ubuntu_config="armhf-config.flavour.generic" ;; "arm64") karch="arm64" - vanilla_config="allyesconfig" + vanilla_config="allmodconfig" ubuntu_config="arm64-config.flavour.generic" ;; "powerpc") karch="powerpc" - vanilla_config="allyesconfig" + vanilla_config="allmodconfig" ubuntu_config="powerpc-config.flavour.powerpc-smp" ;; "ppc64el") karch="powerpc" - vanilla_config="allyesconfig" + vanilla_config="allmodconfig" ubuntu_config="ppc64el-config.flavour.generic" ;; @@ -622,20 +644,24 @@ url_hash="$(echo -n "$kgitrepo" | md5sum | awk '{ print $1 }')" obj_name="linux.tar.bz2" if [ "x${cross_arch}" = "x" ]; then - obj_url_prefix="$OBJ_STORE_URL/linux-build/$url_hash/$ktag/$arch/native" + obj_url_prefix="$OBJ_STORE_URL/linux-build/$url_hash/$ktag/platform-${platforms}/$arch/native" else - obj_url_prefix="$OBJ_STORE_URL/linux-build/$url_hash/$ktag/${cross_arch}" + obj_url_prefix="$OBJ_STORE_URL/linux-build/$url_hash/$ktag/platform-${platforms}/${cross_arch}" fi obj_url="$obj_url_prefix/$obj_name" set +e -s3cmd -c "$WORKSPACE/.s3cfg" get "$obj_url" +# In s3cmd 2.3, the return code of get when an object does not exist (64) +# is different than in 2.2 (12). The return codes of 's3cmd info' are +# consistent between 2.2 and 2.3. +s3cmd -c "$WORKSPACE/.s3cfg" info "$obj_url" ret=$? set -e case "$ret" in "0") + s3cmd -c "$WORKSPACE/.s3cfg" get "$obj_url" extract_archive_obj ;;