@@ -11,13 +11,19 @@ set -euo pipefail
1111
1212RUN_MODE=" @RUN_MODE@"
1313SOC_VERSION=" @SOC_VERSION@"
14- GOLDEN_MODE=" ${GOLDEN_MODE:- npu} " # sim|npu|skip
14+ GOLDEN_MODE=" ${GOLDEN_MODE:- npu} " # sim|npu|npu_consistency| skip
1515BUILD_DIR=" ${BUILD_DIR:- build} "
1616
1717ROOT_DIR=" $( cd " $( dirname " ${BASH_SOURCE[0]} " ) " && pwd) "
1818
1919cd " ${ROOT_DIR} "
20- python3 " ${ROOT_DIR} /golden.py"
20+
21+ CUSTOM_GOLDEN=0
22+ CUSTOM_COMPARE=0
23+ if [[ -f " ${ROOT_DIR} /validation_meta.env" ]]; then
24+ # shellcheck disable=SC1091
25+ source " ${ROOT_DIR} /validation_meta.env"
26+ fi
2127
2228# Best-effort resolve PTO_ISA_ROOT for generated CMakeLists.txt.
2329if [[ -z " ${PTO_ISA_ROOT:- } " ]]; then
@@ -110,10 +116,40 @@ copy_outputs_as_golden() {
110116 done
111117}
112118
119+ ensure_golden_outputs_present () {
120+ local missing=0
121+ if [[ -f " ${ROOT_DIR} /outputs.txt" ]]; then
122+ while IFS= read -r name; do
123+ [[ -n " ${name} " ]] || continue
124+ if [[ ! -f " ${ROOT_DIR} /golden_${name} .bin" ]]; then
125+ echo " [ERROR] Missing golden output: ${ROOT_DIR} /golden_${name} .bin" >&2
126+ missing=1
127+ fi
128+ done < " ${ROOT_DIR} /outputs.txt"
129+ if [[ ${missing} -ne 0 ]]; then
130+ echo " [ERROR] GOLDEN_MODE=npu expects golden.py/custom assets to prepare golden_*.bin" >&2
131+ echo " [ERROR] Use GOLDEN_MODE=npu_consistency for run-to-run NPU consistency checks" >&2
132+ return 1
133+ fi
134+ return 0
135+ fi
136+
137+ if compgen -G " ${ROOT_DIR} /golden_*.bin" > /dev/null; then
138+ return 0
139+ fi
140+
141+ echo " [ERROR] No golden_*.bin found for GOLDEN_MODE=npu" >&2
142+ echo " [ERROR] Use GOLDEN_MODE=npu_consistency for run-to-run NPU consistency checks" >&2
143+ return 1
144+ }
145+
113146case " ${GOLDEN_MODE} " in
114147 sim)
148+ python3 " ${ROOT_DIR} /golden.py"
115149 LD_LIBRARY_PATH=" ${LD_LIBRARY_PATH_SIM} " " ${ROOT_DIR} /${BUILD_DIR} /@EXECUTABLE@_sim"
116- copy_outputs_as_golden
150+ if [[ " ${CUSTOM_GOLDEN} " != " 1" ]]; then
151+ copy_outputs_as_golden
152+ fi
117153 if [[ " ${RUN_MODE} " == " npu" ]]; then
118154 LD_LIBRARY_PATH=" ${LD_LIBRARY_PATH_NPU} " " ${ROOT_DIR} /${BUILD_DIR} /@EXECUTABLE@"
119155 fi
@@ -125,7 +161,23 @@ case "${GOLDEN_MODE}" in
125161 exit 2
126162 fi
127163 python3 " ${ROOT_DIR} /golden.py"
164+ ensure_golden_outputs_present
165+ if [[ " ${CUSTOM_GOLDEN} " == " 1" ]]; then
166+ echo " [INFO] Using custom golden for @EXECUTABLE@"
167+ fi
128168 LD_LIBRARY_PATH=" ${LD_LIBRARY_PATH_NPU} " " ${ROOT_DIR} /${BUILD_DIR} /@EXECUTABLE@"
169+ COMPARE_STRICT=1 python3 " ${ROOT_DIR} /compare.py"
170+ ;;
171+ npu_consistency)
172+ if [[ " ${RUN_MODE} " != " npu" ]]; then
173+ echo " [ERROR] GOLDEN_MODE=npu_consistency requires RUN_MODE=npu" >&2
174+ exit 2
175+ fi
176+ python3 " ${ROOT_DIR} /golden.py"
177+ LD_LIBRARY_PATH=" ${LD_LIBRARY_PATH_NPU} " " ${ROOT_DIR} /${BUILD_DIR} /@EXECUTABLE@"
178+ if [[ " ${CUSTOM_GOLDEN} " == " 1" ]]; then
179+ echo " [INFO] Ignoring custom golden for @EXECUTABLE@; using first NPU run as determinism baseline"
180+ fi
129181 copy_outputs_as_golden
130182 python3 " ${ROOT_DIR} /golden.py"
131183 LD_LIBRARY_PATH=" ${LD_LIBRARY_PATH_NPU} " " ${ROOT_DIR} /${BUILD_DIR} /@EXECUTABLE@"
@@ -139,7 +191,7 @@ case "${GOLDEN_MODE}" in
139191 echo " [WARN] compare skipped (GOLDEN_MODE=skip)"
140192 ;;
141193 * )
142- echo " [ERROR] Unknown GOLDEN_MODE=${GOLDEN_MODE} (expected: sim|npu|skip)" >&2
194+ echo " [ERROR] Unknown GOLDEN_MODE=${GOLDEN_MODE} (expected: sim|npu|npu_consistency| skip)" >&2
143195 exit 2
144196 ;;
145197esac
0 commit comments