Skip to content

Commit b062a54

Browse files
authored
Merge pull request #4209 from The-OpenROAD-Project-staging/ext-plat
ci: refactor test_helper.sh
2 parents e91f812 + 0d64e52 commit b062a54

1 file changed

Lines changed: 86 additions & 30 deletions

File tree

flow/test/test_helper.sh

Lines changed: 86 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -4,33 +4,93 @@ set -eoux pipefail
44

55
cd "$(dirname "$(readlink -f "$0")")/../"
66

7-
# Setting args (and setting default values for testing)
8-
DESIGN_NAME=${1:-gcd}
9-
PLATFORM=${2:-nangate45}
10-
CONFIG_MK=${3:-config.mk}
11-
if [ $# -ge 4 ]; then
12-
FLOW_VARIANT=$4
13-
fi
14-
TARGET=${5:-'finish metadata'}
15-
DESIGN_CONFIG=./designs/$PLATFORM/$DESIGN_NAME/$CONFIG_MK
16-
if [ -z "${WORK_HOME+x}" ]; then
17-
WORK_HOME=.
7+
usage() {
8+
cat <<'EOF'
9+
Usage:
10+
test_helper.sh [options]
11+
test_helper.sh <design> <platform> [config_mk] [variant] [target] (legacy positional)
12+
13+
Options:
14+
--design NAME Design name (default: gcd)
15+
--platform NAME Platform (default: nangate45)
16+
--config FILE Design config file name (default: config.mk)
17+
--design-path DIR Root path containing 'designs/' (default: ./)
18+
--variant NAME Flow variant (default: unset)
19+
--target STR Make target(s), space-separated (default: 'finish metadata')
20+
--work-home DIR Work home (default: .)
21+
--private-dir DIR Private tool scripts dir (default: ../../private_tool_scripts)
22+
--save-to-db Save metrics to DB (requires private.mk)
23+
--run-calibre Run Calibre DRC (requires utils.mk)
24+
--check-drc-db Check DRC DB (use with --run-calibre + --save-to-db)
25+
--make-issue Run final_report_issue at end
26+
-h, --help Show this help
27+
28+
Environment variables override defaults; flags override env. Flags also accept
29+
values via the corresponding env var (e.g., DESIGN_NAME, PLATFORM, CONFIG_MK,
30+
FLOW_VARIANT, TARGET, WORK_HOME, PRIVATE_DIR, DESIGN_PATH, SAVE_TO_DB,
31+
RUN_CALIBRE, CHECK_DRC_DB, MAKE_ISSUE).
32+
EOF
33+
}
34+
35+
DESIGN_NAME="${DESIGN_NAME:-gcd}"
36+
PLATFORM="${PLATFORM:-nangate45}"
37+
CONFIG_MK="${CONFIG_MK:-config.mk}"
38+
TARGET="${TARGET:-finish metadata}"
39+
WORK_HOME="${WORK_HOME:-.}"
40+
PRIVATE_DIR="${PRIVATE_DIR:-../../private_tool_scripts}"
41+
DESIGN_PATH="${DESIGN_PATH:-./}"
42+
43+
if [ $# -gt 0 ]; then
44+
if [ "${1#-}" = "$1" ]; then
45+
# Legacy positional: <design> <platform> [config_mk] [variant] [target]
46+
DESIGN_NAME=${1:-$DESIGN_NAME}
47+
PLATFORM=${2:-$PLATFORM}
48+
CONFIG_MK=${3:-$CONFIG_MK}
49+
if [ $# -ge 4 ] && [ -n "$4" ]; then
50+
FLOW_VARIANT=$4
51+
fi
52+
if [ $# -ge 5 ] && [ -n "$5" ]; then
53+
TARGET=$5
54+
fi
55+
else
56+
while [ $# -gt 0 ]; do
57+
case "$1" in
58+
--design) DESIGN_NAME=$2; shift 2 ;;
59+
--platform) PLATFORM=$2; shift 2 ;;
60+
--config) CONFIG_MK=$2; shift 2 ;;
61+
--design-path) DESIGN_PATH=$2; shift 2 ;;
62+
--variant) FLOW_VARIANT=$2; shift 2 ;;
63+
--target) TARGET=$2; shift 2 ;;
64+
--work-home) WORK_HOME=$2; shift 2 ;;
65+
--private-dir) PRIVATE_DIR=$2; shift 2 ;;
66+
--save-to-db) SAVE_TO_DB=1; shift ;;
67+
--run-calibre) RUN_CALIBRE=1; shift ;;
68+
--check-drc-db) CHECK_DRC_DB=1; shift ;;
69+
--make-issue) MAKE_ISSUE=1; shift ;;
70+
-h|--help) usage; exit 0 ;;
71+
*) echo "Unknown option: $1" >&2; usage >&2; exit 2 ;;
72+
esac
73+
done
74+
fi
1875
fi
76+
77+
DESIGN_CONFIG=${DESIGN_PATH%/}/designs/$PLATFORM/$DESIGN_NAME/$CONFIG_MK
1978
LOG_FILE=${WORK_HOME}/logs/$PLATFORM/$DESIGN_NAME.log
2079
mkdir -p "${WORK_HOME}/logs/$PLATFORM"
2180

22-
__make="make DESIGN_CONFIG=$DESIGN_CONFIG"
81+
__make=(make "DESIGN_CONFIG=$DESIGN_CONFIG")
2382
if [ -n "${FLOW_VARIANT+x}" ]; then
24-
__make+=" FLOW_VARIANT=$FLOW_VARIANT"
83+
__make+=("FLOW_VARIANT=$FLOW_VARIANT")
2584
fi
2685

2786
mkdir -p "$(dirname "$LOG_FILE")"
28-
$__make clean_all clean_metadata 2>&1 | tee "$LOG_FILE"
87+
"${__make[@]}" clean_all clean_metadata 2>&1 | tee "$LOG_FILE"
2988

3089
# turn off abort on error so we can always capture the result
3190
set +e
3291

33-
eval $__make "${TARGET}" 2>&1 | tee -a "$LOG_FILE"
92+
read -r -a TARGET_ARR <<< "$TARGET"
93+
"${__make[@]}" "${TARGET_ARR[@]}" 2>&1 | tee -a "$LOG_FILE"
3494

3595
# Save the return code to return as the overall status after we package
3696
# the results
@@ -40,26 +100,22 @@ if [ "${TARGET}" != "finish metadata" ]; then
40100
exit $ret
41101
fi
42102

43-
if [ -z "${PRIVATE_DIR+x}" ]; then
44-
PRIVATE_DIR="../../private_tool_scripts"
45-
fi
46-
47103
if [ -f "$PRIVATE_DIR/openRoad/private.mk" ] && [ -n "${SAVE_TO_DB+x}" ]; then
48-
$__make save_to_metrics_db
104+
"${__make[@]}" save_to_metrics_db
49105
ret=$(( ret + $? ))
50106
fi
51107

52108
if [ -f "$PRIVATE_DIR/util/utils.mk" ] && [ -n "${RUN_CALIBRE+x}" ]; then
53-
$__make calibre_drc
109+
"${__make[@]}" calibre_drc
54110
ret=$(( ret + $? ))
55-
$__make convert_calibre
111+
"${__make[@]}" convert_calibre
56112
ret=$(( ret + $? ))
57113
if [ -n "${SAVE_TO_DB+x}" ]; then
58-
$__make save_to_drc_db
114+
"${__make[@]}" save_to_drc_db
59115
ret=$(( ret + $? ))
60116
fi
61117
if [ -n "${CHECK_DRC_DB+x}" ]; then
62-
$__make check_drc_db
118+
"${__make[@]}" check_drc_db
63119
ret=$(( ret + $? ))
64120
fi
65121
fi
@@ -68,20 +124,20 @@ fi
68124
set -e
69125

70126
if [ -n "${MAKE_ISSUE+x}" ]; then
71-
$__make final_report_issue 2>&1 | tee -a "$LOG_FILE"
127+
"${__make[@]}" final_report_issue 2>&1 | tee -a "$LOG_FILE"
72128
fi
73129

74130
# Find make targets
75131
set +x # These rules are noisy
76-
TARGETS=$($__make -np | grep -e '^[^ ]*:')
77-
if [ $ret -eq 0 ] && grep -q 'simulate:' <(echo $TARGETS); then
132+
TARGETS=$("${__make[@]}" -np | grep -e '^[^ ]*:')
133+
if [ $ret -eq 0 ] && grep -q 'simulate:' <(echo "$TARGETS"); then
78134
echo "Start simulate"
79-
$__make simulate 2>&1 | tee -a "$LOG_FILE"
135+
"${__make[@]}" simulate 2>&1 | tee -a "$LOG_FILE"
80136
ret=$(( ret + $? ))
81137
fi
82-
if [ $ret -eq 0 ] && grep -q 'power:' <(echo $TARGETS); then
138+
if [ $ret -eq 0 ] && grep -q 'power:' <(echo "$TARGETS"); then
83139
echo "Start power"
84-
$__make power 2>&1 | tee -a "$LOG_FILE"
140+
"${__make[@]}" power 2>&1 | tee -a "$LOG_FILE"
85141
ret=$(( ret + $? ))
86142
fi
87143
set -x

0 commit comments

Comments
 (0)