@@ -356,54 +356,48 @@ EXPECTED_puzzle = success in 2005 trials
356356EXPECTED_fcalc = Performed 12 tests, 0 failures, 100% success rate.
357357EXPECTED_pi = 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086
358358
359+ LOG_FILTER =sed -E '/^[0-9]{2}:[0-9]{2}:[0-9]{2} /d'
360+
361+ define exec
362+ $(eval OUTPUT_FILE := $(shell mktemp) )
363+ $(eval _ := $(shell LC_ALL=C $(BIN ) $(1 ) $(2 ) > $(OUTPUT_FILE ) ) )
364+ $(eval RC := $(.SHELLSTATUS ) )
365+ endef
366+
367+ # $(1): rv32emu's extra CLI parameter
368+ # $(2): ELF executable
369+ # $(3): ELF executable name
370+ # $(4): extra command in the pipeline
371+ # $(5): expected output
372+ define check-test
373+ $(call exec, $(1 ) , $(2 ) )
374+ $(Q )$(PRINTF ) "Running $(3 ) ... "; \
375+ if [ 0 -eq $(RC ) ] && [ "$(strip $(shell cat $(OUTPUT_FILE ) | $(LOG_FILTER ) | $(4 ) ) ) " = "$(strip $(5 ) ) " ]; then \
376+ $(call notice, [OK]) ; \
377+ else \
378+ $(PRINTF ) "Failed.\n"; \
379+ exit 1; \
380+ fi; \
381+ $(RM ) $(OUTPUT_FILE )
382+ endef
383+
359384check-hello : $(BIN )
360- $(Q )$(PRINTF ) " Running hello.elf ... " ; \
361- if [ " $( shell LC_ALL=C $( BIN) $( OUT) /hello.elf | uniq) " = " $( strip $( EXPECTED_hello) ) inferior exit code 0" ]; then \
362- $(call notice, [OK]) ; \
363- else \
364- $(PRINTF ) " Failed.\n" ; \
365- exit 1; \
366- fi ;
385+ $(call check-test, , $(OUT ) /hello.elf, hello.elf, uniq, $(EXPECTED_hello ) )
367386
368387check : $(BIN ) check-hello artifact
369- $(Q )$(foreach e,$(CHECK_ELF_FILES ) ,\
370- $(PRINTF ) " Running $( e) ... " ; \
371- if [ " $( shell LC_ALL=C $( BIN) $( OUT) /riscv32/$( e) | uniq) " = " $( strip $( EXPECTED_$( e) ) ) inferior exit code 0" ]; then \
372- $(call notice, [OK]) ; \
373- else \
374- $(PRINTF ) " Failed.\n" ; \
375- exit 1; \
376- fi ; \
377- )
378-
379- EXPECTED_aes_sha1 = 1242a6757c8aef23e50b5264f5941a2f4b4a347e -
388+ $(Q )$(foreach e, $(CHECK_ELF_FILES ) , $(call check-test, , $(OUT ) /riscv32/$(e ) , $(e ) , uniq, $(EXPECTED_$(e ) ) ) )
389+
390+ EXPECTED_aes_sha1 = 89169ec034bec1c6bb2c556b26728a736d350ca3 -
380391misalign : $(BIN ) artifact
381- $(Q )$(PRINTF ) " Running uaes ... " ;
382- $(Q ) if [ " $( shell LC_ALL=C $( BIN) -m $( OUT) /riscv32/uaes | $( SHA1SUM) ) " = " $( EXPECTED_aes_sha1) " ]; then \
383- $(call notice, [OK]) ; \
384- else \
385- $(PRINTF ) " Failed.\n" ; \
386- fi
392+ $(call check-test, -m, $(OUT ) /riscv32/uaes, uaes.elf, $(SHA1SUM ) , $(EXPECTED_aes_sha1 ) )
387393
388394EXPECTED_misalign = MISALIGNED INSTRUCTION FETCH TEST PASSED!
389395misalign-in-blk-emu : $(BIN )
390- $(Q )$(PRINTF ) " Running misalign.elf ... " ; \
391- if [ " $( shell LC_ALL=C $( BIN) tests/system/alignment/misalign.elf | tail -n 2) " = " $( strip $( EXPECTED_misalign) ) inferior exit code 0" ]; then \
392- $(call notice, [OK]) ; \
393- else \
394- $(PRINTF ) " Failed.\n" ; \
395- exit 1; \
396- fi ;
396+ $(call check-test, , tests/system/alignment/misalign.elf, misalign.elf, tail -n 1, $(EXPECTED_misalign ) )
397397
398398EXPECTED_mmu = STORE PAGE FAULT TEST PASSED!
399399mmu-test : $(BIN )
400- $(Q )$(PRINTF ) " Running vm.elf ... " ; \
401- if [ " $( shell LC_ALL=C $( BIN) tests/system/mmu/vm.elf | tail -n 2) " = " $( strip $( EXPECTED_mmu) ) inferior exit code 0" ]; then \
402- $(call notice, [OK]) ; \
403- else \
404- $(PRINTF ) " Failed.\n" ; \
405- exit 1; \
406- fi ;
400+ $(call check-test, , tests/system/mmu/vm.elf, vm.elf, tail -n 1, $(EXPECTED_mmu ) )
407401
408402# Non-trivial demonstration programs
409403ifeq ($(call has, SDL) , 1)
0 commit comments