summaryrefslogtreecommitdiff
path: root/libdde-linux26/mk/runux.mk
diff options
context:
space:
mode:
Diffstat (limited to 'libdde-linux26/mk/runux.mk')
-rw-r--r--libdde-linux26/mk/runux.mk194
1 files changed, 194 insertions, 0 deletions
diff --git a/libdde-linux26/mk/runux.mk b/libdde-linux26/mk/runux.mk
new file mode 100644
index 00000000..c19a30ac
--- /dev/null
+++ b/libdde-linux26/mk/runux.mk
@@ -0,0 +1,194 @@
+# -*- Makefile -*-
+#
+# DROPS (Dresden Realtime OPerating System) Component
+#
+# Makefile-Template to run tests with Fiasco-UX
+#
+# install.inc is used, see there for further documentation
+
+ifeq ($(origin _L4DIR_MK_RUNUX_MK),undefined)
+_L4DIR_MK_RUNUX_MK=y
+
+ROLE = runux.mk
+.general.d: $(L4DIR)/mk/runux.mk
+
+# set a mode, so binary.inc is satisfied
+MODE ?= l4env
+
+# include all Makeconf.locals, define common rules/variables
+include $(L4DIR)/mk/Makeconf
+include $(L4DIR)/mk/binary.inc
+
+# if we have a system set, build
+ifneq ($(SYSTEM),)
+
+##
+# !WARNING!
+#
+# This is a preliminary test to allow l4check to run Fiasco-UX tests for
+# multiple SYSTEMS. This currently only works for x86.
+ifneq ($(ARCH),x86)
+$(error "$(ROLE) currently does not support $(ARCH).")
+endif
+
+# now check if the current API has a FIASCOUX variable set and if so use it
+# XXX could be overloaded by $(OSYSTEM) == $(ARCH)-$(L4API) or $(SYSTEM)
+ifneq ($(FIASCOUX_$(L4API)),)
+FIASCOUX = $(FIASCOUX_$(L4API))
+else
+$(warning "Using generic(?) Fiasco UX "$(FIASCOUX)" to test $(L4API).")
+endif
+
+# the testapplication
+# test if variables are set
+ifeq ($(TEST_SERVER),)
+DO_TARGET := no_ptest
+else
+DO_TARGET := ptest
+endif
+# TEST_CLIENT might be empty. Testing server stand-alone
+ifneq ($(TEST_CLIENT),)
+TEST_CLIENT_PARAM = $(addprefix -c ,$(TEST_CLIENT))
+endif
+ifneq ($(BASE_SERVERS),)
+$(warning $(BASE_SERVERS))
+BASESERVERS = $(foreach server, $(BASE_SERVERS), -b $(server) $(BASE_SERVERS_PARAM_$(server)))
+endif
+
+# expected output and what to do on mismatch
+EXPECTED_OUT ?= expected.txt
+TIMEOUT ?= 10
+DEBUG_PERL ?= 0
+TMP_OUT ?= tmp_out.txt
+
+# specify files to delete when doing 'make clean'
+DEL_ON_CLEAN = $(TMP_OUT) core
+
+ifneq ($(DEBUG_PERL),0)
+DEBUG_PERL_ = -v
+else
+DEBUG_PERL_ =
+endif
+
+ifneq ($(MEMORY),)
+MEMORY_ = -m $(MEMORY)
+endif
+
+ifneq ($(FIASCOUX_PARAM),)
+FIASCOUX_PARAM_ = -p $(FIASCOUX_PARAM)
+endif
+
+# allow failure of test
+#
+# If EXPECT_FAIL is set, the test if the output matches must fail, otherwise
+# ptest will return an error.
+ifeq ($(EXPECT_FAIL),1)
+EXPECT_FAIL_ = --expectfail
+else
+EXPECT_FAIL_ =
+endif
+
+# do keep ALL output
+#
+# if FILTER_KEEP_ALL is set, the Fiasco UX output is only filtered for escape
+# sequences. All other output is printed into temporary file
+ifeq ($(FILTER_KEEP_ALL),1)
+FILTER_KEEP_ = --filterlevel=0
+else
+FILTER_KEEP_ =
+endif
+
+# no framebuffer device
+#
+# If NO_FBUF_DEV is set, Fiasco UX will not open an X window to display
+# graphical output. This is useful for testing graphical applications.
+ifeq ($(NO_FBUF_DEV),1)
+NO_FBUF_DEV_ = --nofb
+else
+NO_FBUF_DEV_ =
+endif
+
+# enable symbols and lines per default
+USE_SYMBOLS ?= y
+USE_LINES ?= y
+
+ifeq ($(USE_SYMBOLS),y)
+USE_SYMBOLS_ = --symbols
+else
+USE_SYMBOLS_ =
+endif
+ifeq ($(USE_LINES),y)
+USE_LINES_ = --lines
+else
+USE_LINES_ =
+endif
+
+all:: $(DO_TARGET)
+
+# install.inc eventually defines rules for every target
+include $(L4DIR)/mk/install.inc
+
+no_ptest:
+ @echo "No test defined, skipping"
+
+ptest:: $(EXPECTED_OUT) $(BID_OBJ_Makefile).inc
+ $(VERBOSE)echo "Running Fiasco UX to test $(TEST_SERVER)"
+ $(VERBOSE)EXPECTED_OUT=$(EXPECTED_OUT) PKGNAME=$(PKGNAME) \
+ L4DIR=$(L4DIR) OBJ_BASE=$(OBJ_BASE) TMP_OUT=$(TMP_OUT) \
+ COMPARE_CMD=$(COMPARE_CMD) \
+ $(L4DIR)/mk/ptest -s $(TEST_SERVER) $(TEST_CLIENT_PARAM) \
+ -f $(FIASCOUX) $(FIASCOUX_PARAM_) -t $(TIMEOUT) \
+ -O OBJ-$(SYSTEM) \
+ $(BASESERVERS) $(DEBUG_PERL_) $(MEMORY_) $(EXPECT_FAIL_) \
+ $(FILTER_KEEP_) $(NO_FBUF_DEV_) $(USE_SYMBOLS_) $(USE_LINES_)
+
+genexp:: $(EXPECTED_OUT) $(BID_OBJ_Makefile).inc
+
+$(EXPECTED_OUT):
+ $(VERBOSE)echo "Running Fiasco UX to generate expected output"
+ $(VERBOSE)EXPECTED_OUT=$(EXPECTED_OUT) PKGNAME=$(PKGNAME) \
+ L4DIR=$(L4DIR) OBJ_BASE=$(OBJ_BASE) TMP_OUT=$(TMP_OUT) \
+ COMPARE=$(COMPARE_CMD) \
+ $(L4DIR)/mk/ptest -s $(TEST_SERVER) $(TEST_CLIENT_PARAM) \
+ -f $(FIASCOUX) $(FIASCOUX_PARAM_) -t $(TIMEOUT) \
+ -O OBJ-$(SYSTEM) \
+ $(BASESERVERS) $(DEBUG_PERL_) $(MEMORY_) $(EXPECT_FAIL_) \
+ $(FILTER_KEEP_) $(NO_FBUF_DEV_) $(USE_SYMBOLS_) $(USE_LINES_) \
+ --generate
+ $(VERBOSE)touch .expect-autogenerated
+
+plainrun:: $(BID_OBJ_Makefile).inc
+ $(VERBOSE)echo "Starting Fiasco UX"
+ $(VERBOSE)EXPECTED_OUT=$(EXPECTED_OUT) PKGNAME=$(PKGNAME) \
+ L4DIR=$(L4DIR) OBJ_BASE=$(OBJ_BASE) TMP_OUT=$(TMP_OUT) \
+ COMPARE_CMD=$(COMPARE_CMD) \
+ $(L4DIR)/mk/ptest -s $(TEST_SERVER) $(TEST_CLIENT_PARAM) \
+ -f $(FIASCOUX) $(FIASCOUX_PARAM_) -t $(TIMEOUT) \
+ -O OBJ-$(SYSTEM) \
+ $(BASESERVERS) $(DEBUG_PERL_) $(MEMORY_) $(FILTER_KEEP_) \
+ $(NO_FBUF_DEV_) $(USE_SYMBOLS_) $(USE_LINES_) --plainrun
+
+endif # system defined
+
+ptest genexp plainrun:: $(foreach arch,$(TARGET_SYSTEMS),\
+ $(OBJ_DIR)/OBJ-$(arch)/$(BID_OBJ_Makefile))
+ $(if $(TARGET_SYSTEMS), $(VERBOSE)set -e ; \
+ for d in $(TARGET_SYSTEMS) ; do \
+ PWD=$(OBJ_DIR)/OBJ-$$d $(MAKE) -C $(OBJ_DIR)/OBJ-$$d -f $(BID_OBJ_Makefile) \
+ $@ ; done )
+
+.PHONY: all ptest genexp plainrun clean cleanall help no_ptest
+-include $(DEPSVAR)
+
+help::
+ @echo "Specify a target:"
+ @echo "all - run test"
+ @echo "test - run test"
+ @echo "genexp - generate file with expected output"
+ @echo "plainrun - just run binaries (no filter, no comparison)"
+ @echo "clean - delete generated intermediate files"
+ @echo "cleanall - delete all generated files (include genexp target)"
+ @echo "help - this help"
+ @echo
+
+endif # _L4DIR_MK_RUNUX_MK undefined