@@ -4,33 +4,93 @@ set -eoux pipefail
44
55cd " $( 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
1875fi
76+
77+ DESIGN_CONFIG=${DESIGN_PATH%/ } /designs/$PLATFORM /$DESIGN_NAME /$CONFIG_MK
1978LOG_FILE=${WORK_HOME} /logs/$PLATFORM /$DESIGN_NAME .log
2079mkdir -p " ${WORK_HOME} /logs/$PLATFORM "
2180
22- __make=" make DESIGN_CONFIG=$DESIGN_CONFIG "
81+ __make=( make " DESIGN_CONFIG=$DESIGN_CONFIG " )
2382if [ -n " ${FLOW_VARIANT+x} " ]; then
24- __make+=" FLOW_VARIANT=$FLOW_VARIANT "
83+ __make+=( " FLOW_VARIANT=$FLOW_VARIANT " )
2584fi
2685
2786mkdir -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
3190set +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
41101fi
42102
43- if [ -z " ${PRIVATE_DIR+x} " ]; then
44- PRIVATE_DIR=" ../../private_tool_scripts"
45- fi
46-
47103if [ -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 + $? ))
50106fi
51107
52108if [ -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
65121fi
68124set -e
69125
70126if [ -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 "
72128fi
73129
74130# Find make targets
75131set +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 + $? ))
81137fi
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 + $? ))
86142fi
87143set -x
0 commit comments