# Helper makefile which downloads (if required) and runs the GCC test suite (DejaGnu)
#
# Note: Before run please make sure to have your toolchain available in your path.
#
# Copyright 2010 DoréDevelopment
# 
# Author: Martin Lund <mgl@doredevelopment.dk>
#
# This program is free software; you can redistribute  it and/or modify it
# under  the terms of  the GNU General  Public License as published by the
# Free Software Foundation;  either version 2 of the  License, or (at your
# option) any later version.
#

# Internal configuration
TARGET:=@@DG_TARGET@@
TOPDIR:=$(shell pwd)
LOGDIR:=$(TOPDIR)/tmp

# Include default configuration
include default.cfg

# Add toolchain to path
PATH:=$(shell cd ../../bin && pwd):$(PATH)

# Select test set
ifeq ($(DG_TOOLNAME),gcc)
	DG_TESTS:=$(DG_C_TESTS)
endif
ifeq ($(DG_TOOLNAME),g++)
	DG_TESTS:=$(DG_CPP_TESTS)
endif

# Check that we have 'runtest' installed
RUNTEST=$(shell which runtest)
ifeq ($(RUNTEST),)
        $(error "DejaGnu 'runtest' not found - please install (eg. apt-get install dejagnu)")
endif

# Targets 
all: test

$(LOGDIR):
	@mkdir -p $@

$(LOGDIR)/site.exp: $(TOPDIR)/default.cfg $(LOGDIR)
	@{ echo 'lappend boards_dir "$(LOGDIR)"'; \
	   echo 'set target_alias $(TARGET)';     } > $@

$(LOGDIR)/board.exp: $(TOPDIR)/default.cfg $(LOGDIR)
	@{ echo 'load_generic_config "unix"';                    \
	   echo 'process_multilib_options ""';                   \
	   echo 'set_board_info bmk,use_alarm 1';                \
	   echo 'set_board_info rsh_prog ssh';                   \
	   echo 'set_board_info rcp_prog scp';                   \
	   echo 'set_board_info hostname $(DG_TARGET_HOSTNAME)'; \
	   echo 'set_board_info username $(DG_TARGET_USERNAME)'; } > $@

# As Martin puts it:
#  > The thing is that when you run 50k+ test cases the odds are that at
#  > least one will fail and thus runtest basically always return an error
#  > despite the fact that the test session has executed successfully.
# So just ignore any error reported by runtest
test: $(LOGDIR)/board.exp $(LOGDIR)/site.exp $(LOGDIR)
	@runtest --tool $(DG_TOOLNAME)          \
	         --srcdir $(TOPDIR)/testsuite   \
	         --objdir $(LOGDIR)             \
	         --outdir $(LOGDIR)             \
	         --all                          \
	         --target $(TARGET)             \
	         --target_board board           \
	         $(DG_TESTS)                    \
	         GXX_UNDER_TEST=$(TARGET)-g++   || true
	@printf "Result files available in '%s'\n" "$(LOGDIR)"

clean:
	rm -rf $(LOGDIR)

.PHONY: config test clean
