运行 使用 shell 脚本和 make 实用程序的回归
Running a regression with shell script and make utility
我想 运行 使用 shell 脚本进行回归,该脚本应通过 make
命令启动每个测试。以下是我的脚本的简单版本:
#!/bin/sh
testlist="testlist.txt"
while read line;
do
test_name=$(echo $line | awk '{print }')
program_path=$(echo $line | awk '{print }')
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
正如 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
我想 运行 使用 shell 脚本进行回归,该脚本应通过 make
命令启动每个测试。以下是我的脚本的简单版本:
#!/bin/sh
testlist="testlist.txt"
while read line;
do
test_name=$(echo $line | awk '{print }')
program_path=$(echo $line | awk '{print }')
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
正如 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