X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=scripts%2Flttng-modules%2Fparam-build.sh;h=81389bd3b278421c178a068b769f0d7220753315;hb=1490b049e5e289235463b2eb3968abf3fc88d651;hp=dbfa5eea68eb98124ecb910f7ae265f6ca2f725e;hpb=51c9c62db1805a4cdd96be18df4082f1ac5d81c5;p=lttng-ci.git diff --git a/scripts/lttng-modules/param-build.sh b/scripts/lttng-modules/param-build.sh index dbfa5ee..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:-} +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-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 @@ -387,7 +412,9 @@ extract_distro_headers() { touch -r "${LINUX_HDROBJ_DIR}/.config" "${LINUX_HDROBJ_DIR}/include/generated/autoconf.h" # Copy .config to include/config/auto.conf so "make prepare" is unnecessary. - cp "${LINUX_HDROBJ_DIR}/.config" "${LINUX_HDROBJ_DIR}/include/config/auto.conf" + if [ ! -f "${LINUX_HDROBJ_DIR}/include/config/auto.conf" ]; then + cp "${LINUX_HDROBJ_DIR}/.config" "${LINUX_HDROBJ_DIR}/include/config/auto.conf" + fi # Finally clean the object files from the full source tree make clean @@ -431,6 +458,10 @@ build_modules() { kversion=$(make -C "$LINUX_HDROBJ_DIR" -s kernelversion) + # Try to catch some compatibility problems by turning some + # warnings into errors. + #export KCFLAGS="$KCFLAGS -Wall -Werror" + # Enter lttng-modules source dir cd "${MODULES_GIT_DIR}" @@ -547,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" ;; @@ -613,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 ;;