Something went wrong on our end
makefile.regression 4.23 KiB
#-----------------------------------------------------------------------------
# NanoSoC Regression Makefile
# A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
#
# Contributors
#
# David Mapstone (d.a.mapstone@soton.ac.uk)
#
# Copyright (C) 2021-3, SoC Labs (www.soclabs.org)
#-----------------------------------------------------------------------------
# How many tests to Run In Parallel in a Regression
PARALLEL_TESTS = 4
# Regression Simulation Timeout
TIMEOUT = 20m
# Create a Directory to Run a Regression in
$(eval REGRESSION_NAME =$(shell date +%Y_%m_%d_%H_%M_%S))
$(eval REGRESSION_DIR = $(SIM_TOP_DIR)/regression_$(REGRESSION_NAME))
# Create List of Make Targets
TEST_LIST_MTI = $(shell cat $(TEST_LIST_FILE) | while read line || [ -n "$$line" ]; do if ! grep -Fxq "$$line" $(EXCLUDE_LIST_FLIE); then echo mti_$$line; fi; done)
TEST_LIST_XM = $(shell cat $(TEST_LIST_FILE) | while read line || [ -n "$$line" ]; do if ! grep -Fxq "$$line" $(EXCLUDE_LIST_FLIE); then echo xm_$$line; fi; done)
TEST_LIST_VCS = $(shell cat $(TEST_LIST_FILE) | while read line || [ -n "$$line" ]; do if ! grep -Fxq "$$line" $(EXCLUDE_LIST_FLIE); then echo vcs_$$line; fi; done)
# Create Make templates for Make Targets
define mti_template
.PHONY: mti_$(1)
mti_$(1):
@echo Starting Test $(1)
@$$(MAKE) regression_test_mti TESTNAME=$(1) >> /dev/null 2>&1
@if cat $$(REGRESSION)/$(1).log | grep " TEST PASSED "; then echo "$(1): PASSED" >> $$(REGRESSION)/RESULTS.log; elif cat $$(REGRESSION)/$(1).log | grep " TEST SKIPPED "; then echo "$(1): SKIPPED"; else echo "$(1): FAILED" >> $$(REGRESSION)/RESULTS.log; fi > /dev/null
@echo Finished Test $(1)
endef
define xm_template
.PHONY: xm_$(1)
xm_$(1):
@echo Starting Test $(1)
@$$(MAKE) regression_test_xm TESTNAME=$(1) >> /dev/null 2>&1
@if cat $$(REGRESSION)/$(1).log | grep " TEST PASSED "; then echo "$(1): PASSED" >> $$(REGRESSION)/RESULTS.log; elif cat $$(REGRESSION)/$(1).log | grep " TEST SKIPPED "; then echo "$(1): SKIPPED"; else echo "$(1): FAILED" >> $$(REGRESSION)/RESULTS.log; fi > /dev/null
@echo Finished Test $(1)
endef
define vcs_template
.PHONY: vcs_$(1)
vcs_$(1):
@echo Starting Test $(1)
@$$(MAKE) regression_test_vcs TESTNAME=$(1) >> /dev/null 2>&1
@if cat $$(REGRESSION)/$(1).log | grep -i " TEST PASSED "; then echo "$(1): PASSED" >> $$(REGRESSION)/RESULTS.log; elif cat $$(REGRESSION)/$(1).log | grep -i " TEST SKIPPED "; then echo "$(1): SKIPPED"; else echo "$(1): FAILED" >> $$(REGRESSION)/RESULTS.log; fi > /dev/null
@echo Finished Test $(1)
endef
# Generate Targets from Templates using Test List
$(foreach TESTNAME,$(TEST_LIST), $(eval $(call mti_template,$(TESTNAME))))
$(foreach TESTNAME,$(TEST_LIST), $(eval $(call xm_template,$(TESTNAME))))
$(foreach TESTNAME,$(TEST_LIST), $(eval $(call vcs_template,$(TESTNAME))))
# Make Simulate Targets with Timeouts and Error Handling
regression_test_mti:
@timeout $(TIMEOUT) $(MAKE) run_mti TESTNAME=$(TESTNAME) > $(REGRESSION)/$(TESTNAME).log || true
regression_test_xm:
@timeout $(TIMEOUT) $(MAKE) run_xm TESTNAME=$(TESTNAME) > $(REGRESSION)/$(TESTNAME).log || true
regression_test_vcs:
@timeout $(TIMEOUT) $(MAKE) run_vxs TESTNAME=$(TESTNAME) > $(REGRESSION)/$(TESTNAME).log || true
# Target to Display Regression Results on Command Line
regression_results:
@echo --------------------------------------------
@echo Results:
@echo --------------------------------------------
@python $(SOCLABS_SOCTOOLS_FLOW_DIR)/tools/regression_result.py $(REGRESSION)/RESULTS.log
# Regression Simulator Redirect
regression: regression_$(SIMULATOR)
# Create a Target for Running Simulation Regressions
regression_$(SIMULATOR): compile_$(SIMULATOR) bootrom debugtester
@mkdir -p $(REGRESSION_DIR)
@echo
@echo
@echo
@echo
@echo --------------------------------------------
@echo Running Regression: $(REGRESSION_NAME)
@echo --------------------------------------------
@echo Simulator: $(SIMULATOR)
@echo --------------------------------------------
@$(MAKE) -j$(PARALLEL_TESTS) all_tests_$(SIMULATOR) REGRESSION=$(REGRESSION_DIR)
@$(MAKE) -j1 regression_results REGRESSION=$(REGRESSION_DIR)
# Create Targets with dependencies for all tests for simulator
all_tests_mti : $(TEST_LIST_MTI)
all_tests_vcs : $(TEST_LIST_VCS)
all_tests_xm : $(TEST_LIST_XM)