aboutsummaryrefslogtreecommitdiffstats
path: root/roms/skiboot/libflash/test/Makefile.check
diff options
context:
space:
mode:
authorAngelos Mouzakitis <a.mouzakitis@virtualopensystems.com>2023-10-10 14:33:42 +0000
committerAngelos Mouzakitis <a.mouzakitis@virtualopensystems.com>2023-10-10 14:33:42 +0000
commitaf1a266670d040d2f4083ff309d732d648afba2a (patch)
tree2fc46203448ddcc6f81546d379abfaeb323575e9 /roms/skiboot/libflash/test/Makefile.check
parente02cda008591317b1625707ff8e115a4841aa889 (diff)
Add submodule dependency filesHEADmaster
Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec
Diffstat (limited to 'roms/skiboot/libflash/test/Makefile.check')
-rw-r--r--roms/skiboot/libflash/test/Makefile.check167
1 files changed, 167 insertions, 0 deletions
diff --git a/roms/skiboot/libflash/test/Makefile.check b/roms/skiboot/libflash/test/Makefile.check
new file mode 100644
index 000000000..4dbd7ee75
--- /dev/null
+++ b/roms/skiboot/libflash/test/Makefile.check
@@ -0,0 +1,167 @@
+# -*-Makefile-*-
+libflash_test_test_ipmi_hiomap_SOURCES = \
+ libflash/test/test-ipmi-hiomap.c \
+ libflash/test/stubs.c \
+ libflash/ipmi-hiomap.c
+
+libflash_test_test_blocklevel_SOURCES = \
+ libflash/test/test-blocklevel.c \
+ libflash/test/stubs.c
+
+libflash_test_test_flash_SOURCES = \
+ libflash/test/test-flash.c \
+ libflash/test/stubs.c \
+ libflash/test/mbox-server.c
+
+libflash_test_test_ecc_SOURCES = \
+ libflash/test/test-ecc.c \
+ libflash/test/stubs.c \
+ libflash/test/mbox-server.c
+
+libflash_test_test_mbox_SOURCES = \
+ libflash/test/test-mbox.c \
+ libflash/test/stubs.c \
+ libflash/test/mbox-server.c
+
+check_PROGRAMS = \
+ libflash/test/test-ipmi-hiomap \
+ libflash/test/test-blocklevel \
+ libflash/test/test-flash \
+ libflash/test/test-ecc \
+ libflash/test/test-mbox
+
+TEST_FLAGS = -D__TEST__ -MMD -MP
+
+.PHONY: libflash-check libflash-coverage
+libflash-check: $(check_PROGRAMS:%=%-check)
+libflash-coverage: $(check_PROGRAMS:%=%-gcov-run)
+clean: libflash-test-clean
+check: libflash-check
+coverage: libflash-coverage
+strict-check: TEST_FLAGS += -D__STRICT_TEST__
+strict-check: check
+
+LCOV_EXCLUDE += $(check_PROGRAMS:%=%.c)
+
+$(check_PROGRAMS:%=%-check) : %-check : %
+ $(call QTEST, RUN-TEST , $(VALGRIND) $<, $<)
+
+# Transform a prerequisite into something approximating a variable name. This
+# is used to map check_PROGRAMS prerequisits to the corresponding _SOURCES
+# variable.
+#
+# For example:
+#
+# $(call prereq2var,libflash/test/test-mbox)
+#
+# Will output:
+#
+# 'libflash_test_test_mbox'
+#
+prereq2var = $(subst /,_,$(subst -,_,$(1)))
+
+# Generate prerequisites from a target based on the target's corresponding
+# _SOURCES variable.
+#
+# For example, with:
+#
+# libflash_test_test_mbox_SOURCES = \
+# libflash/test/test-mbox.c \
+# libflash/test/stubs.c \
+# libflash/test/mbox-server.c
+# HOST_TRIPLE = x86_64-linux-gnu
+#
+# A call to target2prereq where the target is libflash/test/test-mbox:
+#
+# $(call target2prereq,$@,$(HOST_TRIPLE)/)
+#
+# Will output:
+#
+# x86_64-linux-gnu/libflash/test/test-mbox.o
+# x86_64-linux-gnu/libflash/test/stubs.o
+# x86_64-linux-gnu/libflash/test/mbox-server.o
+target2prereq = $(patsubst %.c,%.o,$(addprefix $(2),$($(call prereq2var,$(1))_SOURCES)))
+
+# Generate path stems for all applications in check_PROGRAMS. This is usef
+#
+# For example, with:
+#
+# libflash_test_test_mbox_SOURCES = \
+# libflash/test/test-mbox.c \
+# libflash/test/stubs.c \
+# libflash/test/mbox-server.c
+# libflash_test_test_ecc_SOURCES = \
+# libflash/test/test-ecc.c \
+# libflash/test/stubs.c \
+# libflash/test/mbox-server.c
+# check_PROGRAMS = libflash/test/test-mbox libflash/test/test-ecc
+# HOST_TRIPLE = x86_64-linux-gnu
+#
+# A call to:
+#
+# $(call objstem,$(check_PROGRAMS),$(HOST_TRIPLE)/)
+#
+# Will output:
+#
+# x86_64-linux-gnu/libflash/test/test-mbox
+# x86_64-linux-gnu/libflash/test/stubs
+# x86_64-linux-gnu/libflash/test/mbox-server
+# x86_64-linux-gnu/libflash/test/test-ecc
+# x86_64-linux-gnu/libflash/test/stubs
+# x86_64-linux-gnu/libflash/test/mbox-server
+objstem = $(patsubst %.c,%,$(addprefix $(2),$(foreach bin,$(1),$($(call prereq2var,$(bin))_SOURCES))))
+
+# Record the host platform triple to separate test vs production objects.
+HOST_TRIPLE = $(shell $(HOSTCC) -dumpmachine)
+
+# Mirror the skiboot directory structure under a directory named after the host
+# triple in the skiboot root directory, and place the built objects in this
+# mirrored structure.
+$(HOST_TRIPLE)/%.o : %.c
+ @mkdir -p $(dir $@)
+ $(call Q, HOSTCC ,$(HOSTCC) $(HOSTCFLAGS) $(TEST_FLAGS) -Wno-suggest-attribute=const -g -c -o $@ $<, $@)
+
+# Use GNU make metaprogramming dynamically define targets and prequisites for
+# binaries listed in check_PROGRAMS.
+#
+# Secondary expansion[1] allows us to use the target automatic variable ($@) in
+# the prequisite list. Knowing the target we can map to the corresponding
+# _SOURCES variable to learn what to build and link. Finally, make sure the
+# artifacts are output under the $(HOST_TRIPLE) directory to separate them from
+# objects intended for skiboot proper.
+#
+# [1] https://www.gnu.org/software/make/manual/html_node/Secondary-Expansion.html#Secondary-Expansion
+.SECONDEXPANSION:
+$(check_PROGRAMS) : $$(call target2prereq,$$@,$(HOST_TRIPLE)/)
+ $(call Q, HOSTCC , $(HOSTCC) $(HOSTCFLAGS) $(TEST_FLAGS) -Wno-suggest-attribute=const -O0 -g -o $@ $^, $@)
+
+.PHONY: libflash-test-clean
+libflash-test-clean: OBJ_STEMS = $(call objstem,$(check_PROGRAMS),$(HOST_TRIPLE)/)
+libflash-test-clean: libflash-test-gcov-clean
+ $(RM) $(check_PROGRAMS)
+ $(RM) $(OBJ_STEMS:%=%.o)
+ $(RM) $(OBJ_STEMS:%=%.d)
+
+# gcov support: Build objects under $(HOST_TRIPLE)/gcov/
+$(check_PROGRAMS:%=%-gcov-run) : %-run: %
+ $(call QTEST, TEST-COVERAGE ,$< , $<)
+
+$(HOST_TRIPLE)/gcov/%.o : %.c
+ @mkdir -p $(dir $@)
+ $(call Q, HOSTCC ,$(HOSTCC) $(HOSTCFLAGS) $(HOSTGCOVCFLAGS) $(TEST_FLAGS) -Wno-suggest-attribute=const -g -c -o $@ $<, $@)
+
+.SECONDEXPANSION:
+$(check_PROGRAMS:%=%-gcov) : $$(call target2prereq,$$(patsubst %-gcov,%,$$@),$(HOST_TRIPLE)/gcov/)
+ $(call Q, HOSTCC , $(HOSTCC) $(HOSTCFLAGS) $(HOSTGCOVCFLAGS) $(TEST_FLAGS) -Wno-suggest-attribute=const -O0 -g -o $@ $^, $@)
+
+.PHONY: libflash-test-gcov-clean
+libflash-test-gcov-clean: GCOV_OBJ_STEMS = $(call objstem,$(check_PROGRAMS),$(HOST_TRIPLE)/gcov/)
+libflash-test-gcov-clean:
+ $(RM) $(check_PROGRAMS:%=%-gcov)
+ $(RM) $(GCOV_OBJ_STEMS:%=%.o)
+ $(RM) $(GCOV_OBJ_STEMS:%=%.d)
+ $(RM) $(GCOV_OBJ_STEMS:%=%.gcda)
+ $(RM) $(GCOV_OBJ_STEMS:%=%.gcno)
+
+-include $(patsubst %,%.d,$(call objstem,$(check_PROGRAMS),$(HOST_TRIPLE)/))
+-include $(patsubst %,%.d,$(call objstem,$(check_PROGRAMS),$(HOST_TRIPLE)/gcov/))