Commit 9d235a55 authored by Jiri Benc's avatar Jiri Benc Committed by Shuah Khan
Browse files

selftests: allow detection of build failures



Commit 5f70bde2 ("selftests: fix build behaviour on targets' failures")
added a logic to track failure of builds of individual targets. However, it
does exactly the opposite of what a distro kernel needs: we create a RPM
package with a selected set of selftests and we need the build to fail if
build of any of the targets fail.

Both use cases are valid. A distribution kernel is in control of what is
included in the kernel and what is being built; any error needs to be
flagged and acted upon. A CI system that tries to build as many tests as
possible on the best effort basis is not really interested in a failure here
and there.

Support both use cases by introducing a FORCE_TARGETS variable. It is
switched off by default to make life for CI systems easier, distributions
can easily switch it on while building their packages.

Reported-by: default avatarYauheni Kaliuta <yauheni.kaliuta@redhat.com>
Signed-off-by: default avatarJiri Benc <jbenc@redhat.com>
Reviewed-by: default avatarCristian Marussi <cristian.marussi@arm.com>
Tested-by: default avatarCristian Marussi <cristian.marussi@arm.com>
Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
parent b32694cd
Loading
Loading
Loading
Loading
+10 −2
Original line number Original line Diff line number Diff line
@@ -77,6 +77,12 @@ ifneq ($(SKIP_TARGETS),)
	override TARGETS := $(TMP)
	override TARGETS := $(TMP)
endif
endif


# User can set FORCE_TARGETS to 1 to require all targets to be successfully
# built; make will fail if any of the targets cannot be built. If
# FORCE_TARGETS is not set (the default), make will succeed if at least one
# of the targets gets built.
FORCE_TARGETS ?=

# Clear LDFLAGS and MAKEFLAGS if called from main
# Clear LDFLAGS and MAKEFLAGS if called from main
# Makefile to avoid test build failures when test
# Makefile to avoid test build failures when test
# Makefile doesn't have explicit build rules.
# Makefile doesn't have explicit build rules.
@@ -151,7 +157,8 @@ all: khdr
	for TARGET in $(TARGETS); do				\
	for TARGET in $(TARGETS); do				\
		BUILD_TARGET=$$BUILD/$$TARGET;			\
		BUILD_TARGET=$$BUILD/$$TARGET;			\
		mkdir $$BUILD_TARGET  -p;			\
		mkdir $$BUILD_TARGET  -p;			\
		$(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET;	\
		$(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET	\
				$(if $(FORCE_TARGETS),|| exit);	\
		ret=$$((ret * $$?));				\
		ret=$$((ret * $$?));				\
	done; exit $$ret;
	done; exit $$ret;


@@ -205,7 +212,8 @@ ifdef INSTALL_PATH
	@ret=1;	\
	@ret=1;	\
	for TARGET in $(TARGETS); do \
	for TARGET in $(TARGETS); do \
		BUILD_TARGET=$$BUILD/$$TARGET;	\
		BUILD_TARGET=$$BUILD/$$TARGET;	\
		$(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET INSTALL_PATH=$(INSTALL_PATH)/$$TARGET install; \
		$(MAKE) OUTPUT=$$BUILD_TARGET -C $$TARGET INSTALL_PATH=$(INSTALL_PATH)/$$TARGET install \
				$(if $(FORCE_TARGETS),|| exit);	\
		ret=$$((ret * $$?));		\
		ret=$$((ret * $$?));		\
	done; exit $$ret;
	done; exit $$ret;