Files
foc/l4/mk/runux.mk
2013-01-11 17:00:47 +01:00

195 lines
5.2 KiB
Makefile

# -*- 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