prow-presubmit: make Prow only set --build_dir=. after v5.7 Prow tries to build Linux kernels in the source root directory. On newer kernels, the best way to do this is to set the --build_dir flag to `.`. Under the hood this sets the make variable `O=.` - on new kernels this is fine, necessary, in fact. However, in kernels v5.2 and earlier Kbuild doesn't know how to handle `O=.`. We only actually need to set the flag in v5.7 kernels and later since KUnit defaulted to building in the source root up until v5.7. Signed-off-by: Brendan Higgins <brendanhiggins@google.com> Change-Id: Ibb6ed5114014632ee7f701af83f14b69b7769050
diff --git a/kunit.sh b/kunit.sh index a081019..c02c87c 100755 --- a/kunit.sh +++ b/kunit.sh
@@ -33,6 +33,25 @@ KUNIT_VERSION_ARGS="" +KERNEL_VERSION_REGEX="([0-9]+)\.([0-9]+).*" + +if [[ $(make kernelversion) =~ $KERNEL_VERSION_REGEX ]]; then + MAJOR_VERSION="${BASH_REMATCH[1]}" + MINOR_VERSION="${BASH_REMATCH[2]}" + # --build_dir gets set to .kunit by default in v5.7, so we need to set it to + # the source root directory (.); otherwise, we can ignore it. + # In fact, we MUST omit --build_dir=. in v5.2 or earlier otherwise Kbuild will + # complain about an unclean tree: + # https://github.com/torvalds/linux/commit/25b146c5b8ceecd43c311552d325a4e403c639f2 + if [[ $MAJOR_VERSION -gt 5 || ($MAJOR_VERSION -eq 5 && $MINOR_VERSION -ge 7) ]]; then + KUNIT_VERSION_ARGS="--build_dir=." + fi + echo "Linux kernel version: v${MAJOR_VERSION}.${MINOR_VERSION}" +else + echo "WARNING: Not able to determine Linux kernel version!!!" + echo "Presubmit may report erroneous results!" +fi + # KUnit repos based on upstream have a default kunitconfig; we can check for # that to see if we are running a repo based on upstream or not. # @@ -43,7 +62,6 @@ cp ./arch/um/configs/kunit_defconfig .kunitconfig fi cp .kunitconfig .config - KUNIT_VERSION_ARGS="--build_dir=." else if [[ ! -f ./kunitconfig ]]; then cp /kunitconfig ./kunitconfig