Запуск регрессии с помощью скрипта оболочки и утилиты make - PullRequest
0 голосов
/ 13 февраля 2020

Я хочу запустить регрессию с помощью сценария оболочки, который должен запускать каждый тест с помощью команды make. Ниже приведена простая версия моего сценария:

#!/bin/sh                                                                                                                                                                                                                                                                       

testlist="testlist.txt"
while read line;
do
    test_name=$(echo $line | awk '{print $1}')
    program_path=$(echo $line | awk '{print $2}')
    make sim TEST_NAME=$test_name PROGRAM_PATH=$program_path
done < "$testlist"

Проблема с приведенным выше сценарием заключается в том, что когда команда make запускает программу, сценарий переходит на следующую итерацию, не ожидая завершения этой программы в предыдущей итерации и продолжает читать следующую строку из файла.

Есть ли какая-либо опция в утилите make, чтобы убедиться, что она ожидает завершения программы? Может быть, я упускаю что-то еще.

Это связанная часть Makefile:

sim:
    vsim -i -novopt \
    -L $(QUESTA_HOME)/uvm-1.1d \
    -L questa_mvc_lib \
    -do "add wave top/AL_0/*;log -r /*" \
    -G/path=$(PROGRAM_PATH) \
    +UVM_TESTNAME=$(TEST_NAME) +UVM_VERBOSITY=UVM_MEDIUM -sv_seed random

1 Ответ

1 голос
/ 14 февраля 2020

Как отметил OP в комментарии, он заметил, что vsim разветвляется на несколько других процессов, которые все еще работают после завершения vsim. Поэтому ему нужно дождаться завершения других процессов.
Я эмулировал вашу команду vsim с помощью сценария, который разветвляет некоторые спящие процессы:

#!/bin/bash
forksome() {
   sleep 3&
   sleep 2&
   sleep 5&
}

echo "Forking some sleep"
forksome

Я сделал Makefile, который показывает вашу проблему после make normal.
Когда вы знаете, какие процессы разветвлены, вы можете найти решение, как я продемонстрировал с помощью make new.

normal: sim
        ps -f

new: sim mywait
        ps -f

sim:
        ./vsim

mywait:
        echo "Waiting for process(es):"
        while pgrep sleep; do sleep 1; done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...