make_args=()
DEBUG=${DEBUG:-}
+FAIL_ON_WARNINGS="${FAIL_ON_WARNINGS:-}"
+if [[ "${FAIL_ON_WARNINGS}" == "false" ]] ; then
+ FAIL_ON_WARNINGS=''
+fi
# Derive arch from label if it isn't set
if [ -z "${arch:-}" ] ; then
git_clone_modules_sources() {
mkdir -p "$MODULES_GIT_DIR"
- # If the version starts with "refs/", checkout the specific git ref, otherwise treat it
- # as a branch name.
- if [ "${mversion:0:5}" = "refs/" ]; then
+ # If the version starts with "refs/" or looks like a commit hash,
+ # checkout the specific git ref, otherwise treat it as a branch name.
+ pattern="^[0-9a-f]{40}$"
+ if [ "${mversion:0:5}" = "refs/" ] || [[ "${mversion}" =~ $pattern ]]; then
git clone --no-tags --depth=1 "${mgitrepo}" "$MODULES_GIT_DIR"
(cd "$MODULES_GIT_DIR" && git fetch origin "${mversion}" && git checkout FETCH_HEAD)
else
# Checkout a shallow kernel tree of the specified tag
git_clone_linux_sources() {
mkdir -p "$LINUX_GIT_DIR"
- git clone --depth=1 -b "${ktag}" --reference "$LINUX_GIT_REF_REPO_DIR" "${kgitrepo}" "$LINUX_GIT_DIR"
+ case "${distroversion:-}" in
+ el*)
+ git clone -b "${ktag}" "${kgitrepo}" src/linux-rpm
+
+ # Get the source files
+ pushd src/linux-rpm
+ "${WORKSPACE}/src/getsrc/getsrc/getsrc.sh"
+ tar -x -C "${LINUX_GIT_DIR}" --strip-components=1 -f SOURCES/linux-*.tar.xz
+ popd
+
+ # Pretend we're a repo like the default expects
+ pushd "${LINUX_GIT_DIR}"
+ git init .
+ git config user.name 'Jenkins'
+ git config user.email 'jenkins@efficios.com'
+ git add .
+ git commit -a -m 'Initial commit'
+ git tag "${ktag}"
+ echo "${LINUX_GIT_REF_REPO_DIR}" > .git/objects/info/alternates
+ popd
+ ;;
+
+ *)
+ git clone --depth=1 -b "${ktag}" --reference-if-able "$LINUX_GIT_REF_REPO_DIR" "${kgitrepo}" "$LINUX_GIT_DIR"
+ ;;
+ esac
}
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
+ *el*)
+ # Copy the EL kernel configuration
+ el_arch="${cross_arch:-$arch}"
+ case "${el_arch}" in
+ amd64)
+ el_arch=x86_64
+ ;;
+ arm64)
+ el_arch=aarch64
+ ;;
+ ppc64el)
+ el_arch=ppc64le
+ ;;
+ *)
+ ;;
+ esac
+ ls "${WORKSPACE}/src/linux-rpm/SOURCES/"
+ if [ -f "${WORKSPACE}/src/linux-rpm/SOURCES/kernel-${el_arch}.config" ] ; then
+ cp "${WORKSPACE}/src/linux-rpm/SOURCES/kernel-${el_arch}.config" .config
+ elif [ -f "${WORKSPACE}/src/linux-rpm/SOURCES/kernel-${el_arch}-rhel.config" ] ; then
+ cp "${WORKSPACE}/src/linux-rpm/SOURCES/kernel-${el_arch}-rhel.config" .config
+ fi
+
+ # Eg.
+ # mm/mempolicy.c: In function ‘mpol_parse_str’:
+ # mm/mempolicy.c:2980:26: error: writing 1 byte into a region of size 0 [-Werror=stringop-overflow=]
+ export KCFLAGS="${KCFLAGS} -Wno-error -Wno-all -Wno-error=stringop-overflow -Wno-error=address-of-packed-member"
+ ;;
+
Ubuntu*)
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
- 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
# 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
;;
scripts/config --disable CONFIG_KVM_BOOK3S_64_HV
fi
+ if [ -f "init/Kconfig.suse" ] ; then
+ # Get values from git tag, eg. 'rpm-5.14.21-150400.24.108'
+ # Note: the "150400" type of SUSE major version is only present on tags
+ # from 2022 and newer (about half-way through SLE15SP3).
+ # This will not work as expected on earlier tags.
+ SLES_RELEASE="$(echo "${ktag}" | cut -d '-' -f 3 | cut -d'.' -f 1)"
+ scripts/config --set-val CONFIG_SUSE_VERSION $((10#"$(echo "${SLES_RELEASE}" | head -c 2)"))
+ scripts/config --set-val CONFIG_SUSE_PATCHLEVEL $((10#"$(echo "${SLES_RELEASE}" | head -c 4 | tail -c 2)"))
+
+ # Disable the renesas clk driver that has build issues,
+ # eg. drivers/clk/renesas/renesas-rzg2l-cpg.c:185:17: error: ‘clk’ undeclared (first use in this function)
+ scripts/config --disable CONFIG_CLK_RENESAS
+
+ # From drives/spi/spi-atmel.c
+ # ./include/linux/gpio/consumer.h:141:49: note: expected ‘struct gpio_desc *’ but argument is of type 'int'
+ scripts/config --disable CONFIG_SPI_ATMEL
+ scripts/config --disable CONFIG_SPI_AT91_USART
+ scripts/config --disable CONFIG_SPI_ATMEL_QUADSPI
+
+ # drivers/net/wireless/mediatek/mt76/mt7915/testmode.c: In function ‘mt7915_tm_set_wmm_qid’:
+ # drivers/net/wireless/mediatek/mt76/mt7915/testmode.c:176:30: error: ‘struct mt7915_vif’ has no member named ‘mt76’
+ scripts/config --disable CONFIG_WLAN_VENDOR_MEDIATEK
+
+ # drivers/net/wireless/microchip/wilc1000/cfg80211.c: In function ‘wilc_wfi_cfg_parse_ch_attr’:
+ # drivers/net/wireless/microchip/wilc1000/cfg80211.c:970:17: error: ‘for’ loop initial declarations are only allowed in C99 or C11 mode
+ scripts/config --disable CONFIG_WLAN_VENDOR_MICROCHIP
+
+ # fs/f2fs/file.c: In function ‘punch_hole’:
+ # fs/f2fs/file.c:1093:49: error: ‘mapping’ undeclared (first use in this function)
+ scripts/config --disable CONFIG_F2FS_FS
+ fi
+
# oldnoconfig was renamed in 4.19
if vergte "$kversion" "4.19"; then
update_conf_target="olddefconfig"
if [ "$(scripts/config --state CONFIG_DEBUG_INFO_BTF)" == "y" ] &&
{ vergte "${pahole_version}" "1.24"; } &&
- { vergte "${kversion}" "5.10"; } && { verlt "${kversion}" "6.0"; } ;then
+ (
+ ( { vergte "${kversion}" "5.10"; } && { verlt "${kversion}" "6.0"; } ) || [[ "${ktag}" =~ .el8 ]]
+ ) ; then
# Some kernels Eg. Ubuntu-hwe-5.13-5.13.0-52.59_20.04.1
# fail with the following error:
# BTFIDS vmlinux
else
# shellcheck disable=SC2016
sed -i 's/ -J ${extra_paholeopt} / -J ${extra_paholeopt} --skip_encoding_btf_enum64 /' scripts/link-vmlinux.sh
+ # Some older versions of RHEL don't have '${extra_paholeopt}'
+ sed -i 's/${PAHOLE} -J ${1}/${PAHOLE} -J --skip_encoding_btf_enum64 ${1}/' scripts/link-vmlinux.sh
fi
fi
scripts/config --disable CONFIG_MICREL_PHY
- # IGBVF won't build with recent gcc on 2.6.38.x
+ # IGBVF won't build with recent gcc on 2.6.38.2
if { vergte "$kversion" "2.6.37" && verlt "$kversion" "2.6.38"; }; then
scripts/config --disable CONFIG_IGBVF
fi
scripts/config --enable CONFIG_EVENT_TRACING
scripts/config --enable CONFIG_KRETPROBES
+ # Starting in linux 6.9-rc1, TRIM_UNUSED_SYMS seems to be true
+ # for out build configurations. In earlier versions the default
+ # was set depending on the value of `COMPILE_TEST`.
+ # See upstream commit d2d5cba5d92c4ed23caa86228a1bc31b07e90fe9.
+ scripts/config --disable CONFIG_TRIM_UNUSED_KSYMS
+
if [ -n "${DEBUG}" ] ; then
cat .config
fi
echo "#define UTS_UBUNTU_RELEASE_ABI $ABINUM" >> include/generated/utsrelease.h
echo "#define UTS_UBUNTU_RELEASE_ABI $ABINUM" >> "${LINUX_HDROBJ_DIR}/include/generated/utsrelease.h"
;;
+ rpm-*)
+ # Update the definition of UTS_RELEASE to match something akin to '5.14.21-150400.24.108-default'
+ if [ -f "init/Kconfig.suse" ] ; then
+ SLESVERSION="$(echo "${ktag}" | cut -d'-' -f 3)-default"
+ sed -E -i "s%^(#define UTS_RELEASE \"[\.a-z0-9]+)(\")%\1-${SLESVERSION}\2%g" include/generated/utsrelease.h
+ sed -E -i "s%^(#define UTS_RELEASE \"[\.a-z0-9]+)(\")%\1-${SLESVERSION}\2%g" "${LINUX_HDROBJ_DIR}/include/generated/utsrelease.h"
+ fi
+ ;;
esac
}
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}"
+ # Try to catch some compatibility problems by turning some
+ # warnings into errors, but only on -rc kernels.
+ pattern="rc[0-9]+$"
+ if [[ "${kversion}" =~ ${pattern} ]] || [[ -n "${FAIL_ON_WARNINGS:-}" ]] ; then
+ export KCFLAGS="${KCFLAGS} -Wall -Werror"
+ # Without the verbose build, the warnings aren't visible.
+ export V=1
+ fi
+
# kernels 3.10 to 3.10.13 and 3.11 to 3.11.2 introduce a deadlock in the
# timekeeping subsystem. We want those build to fail.
if { vergte "$kversion" "3.10" && verlte "$kversion" "3.10.13"; } || \