Использование Makefile для выборочного моделирования теста - PullRequest
0 голосов
/ 18 января 2019

Я бы хотел, чтобы переменная 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

1 Ответ

0 голосов
/ 18 января 2019

Похоже, именно для этого были созданы автоматические переменные ...?

Что не так с этим:

TESTS := block_test_A block_test_B block_test_C

SIM_FLAGS += -top $@
SIM_LOG = logs/$@.log

$(TESTS):
        @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)"

Другие вещи:

  • Вы никогда не захотите использовать функцию make shell внутри рецепта.
  • Я не вижу смысла вкладывать echo в подоболочку с (...)
...