Я бы хотел, чтобы переменная Makefile содержала список тестов, но запускала каждый тест с другим флагом и имела возможность запускать все тесты или выборочно один из командной строки. Вот что у меня есть, и я не уверен, как добавить больше тестов, но не могу создать отдельные переменные для каждого теста. В приведенном ниже примере я могу сказать make all или make run_tests TESTS = block_test_A для запуска всех тестов или конкретного теста. Это работает, но если бы мне пришлось добавить еще 10 тестов, я бы хотел изменить только строку TESTS и добавить их туда вместо добавления TEST4, TEST5 и так далее. Есть ли умный способ сделать цикл, который может анализировать список тестов в TESTS и создавать переменные. Я попробовал пару вариантов, но не смог заставить его работать. sim_design - это не показанная цель, которая будет выполнять компиляцию / sim, используя значения в переменных Makefile SIM_FLAGS и SIM_LOG. Благодарю.
TESTS := block_test_A block_test_B block_test_C
TEST1 := $(word 1, $(TESTS))
$(TEST1) : SIM_FLAGS:= "$(SIM_FLAGS) -top $(TEST1)"
$(TEST1) : SIM_LOG:= "logs/$(TEST1).log"
TEST2 := $(word 2, $(TESTS))
$(TEST2) : SIM_FLAGS:= "$(SIM_FLAGS) -top $(TEST2)"
$(TEST2) : SIM_LOG:= "logs/$(TEST2).log"
TEST3 := $(word 3, $(TESTS))
$(TEST3) : SIM_FLAGS:= "$(SIM_FLAGS) -top $(TEST3)"
$(TEST3) : SIM_LOG:= "logs/$(TEST3).log"
$(TESTS):
$(shell mkdir -p logs)
@(echo Running TEST $@ with SIM_FLAGS=$(SIM_FLAGS) SIM_LOG=$(SIM_LOG))
$(MAKE) sim_design SIM_FLAGS=$(SIM_FLAGS) SIM_LOG=$(SIM_LOG)
run_tests: $(TESTS)
all:
@(echo Running Regression on $(DESIGN_TOP) with following list of tests $(TESTS))
@(echo To run a single test generating a dump use: make run_tests TESTS=\"valid_test_name\" REGRESS=0)
$(MAKE) run_tests REGRESS=1