From 27a35e77120b0fe7eda6fef3266ecbec999b677d Mon Sep 17 00:00:00 2001 From: Azim Khan Date: Fri, 29 Jun 2018 12:39:19 +0100 Subject: [PATCH] Wildcard possible targets and document Test application names and function file names can be constructed based on the followed naming convention. This commit documents the naming convention and removes explicit listing of the test executables and the lookup table for finding .function file. --- tests/Makefile | 148 +++++++++---------------------------------------- 1 file changed, 25 insertions(+), 123 deletions(-) diff --git a/tests/Makefile b/tests/Makefile index 003d71c51..4d2edd456 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -53,126 +53,14 @@ ifdef ZLIB LOCAL_LDFLAGS += -lz endif -APPS = test_suite_aes.ecb test_suite_aes.cbc \ - test_suite_aes.cfb test_suite_aes.ofb \ - test_suite_aes.xts \ - test_suite_aes.rest test_suite_arc4 \ - test_suite_aria test_suite_asn1write \ - test_suite_base64 test_suite_blowfish \ - test_suite_camellia test_suite_ccm \ - test_suite_chacha20 test_suite_chachapoly \ - test_suite_aria \ - test_suite_cmac \ - test_suite_cipher.aes \ - test_suite_cipher.arc4 test_suite_cipher.ccm \ - test_suite_cipher.chacha20 \ - test_suite_cipher.gcm \ - test_suite_cipher.blowfish \ - test_suite_cipher.camellia \ - test_suite_cipher.des test_suite_cipher.null \ - test_suite_cipher.padding \ - test_suite_ctr_drbg test_suite_debug \ - test_suite_des test_suite_dhm \ - test_suite_ecdh test_suite_ecdsa \ - test_suite_ecjpake test_suite_ecp \ - test_suite_error test_suite_entropy \ - test_suite_gcm.aes128_de \ - test_suite_gcm.aes192_de \ - test_suite_gcm.aes256_de \ - test_suite_gcm.aes128_en \ - test_suite_gcm.aes192_en \ - test_suite_gcm.aes256_en \ - test_suite_gcm.camellia \ - test_suite_hkdf \ - test_suite_hmac_drbg.misc \ - test_suite_hmac_drbg.no_reseed \ - test_suite_hmac_drbg.nopr \ - test_suite_hmac_drbg.pr \ - test_suite_md test_suite_mdx \ - test_suite_memory_buffer_alloc \ - test_suite_mpi \ - test_suite_pem test_suite_pkcs1_v15 \ - test_suite_pkcs1_v21 test_suite_pkcs5 \ - test_suite_pkparse test_suite_pkwrite \ - test_suite_pk \ - test_suite_rsa test_suite_shax \ - test_suite_ssl test_suite_timing \ - test_suite_x509parse test_suite_x509write \ - test_suite_xtea test_suite_version +# A test application is built for each suites/test_suite_*.data file. +# Application name is same as .data file's base name and can be +# constructed by stripping path 'suites/' and extension .data. +APPS = $(basename $(subst suites/,,$(wildcard suites/test_suite_*.data))) +# Construct executable name by adding OS specific suffix $(EXEXT). BINARIES := $(addsuffix $(EXEXT),$(APPS)) -# Look up for associated function files -func.test_suite_aes.ecb := test_suite_aes -func.test_suite_aes.cbc := test_suite_aes -func.test_suite_aes.cfb := test_suite_aes -func.test_suite_aes.ofb := test_suite_aes -func.test_suite_aes.xts := test_suite_aes -func.test_suite_aes.rest := test_suite_aes -func.test_suite_arc4 := test_suite_arc4 -func.test_suite_aria := test_suite_aria -func.test_suite_asn1write := test_suite_asn1write -func.test_suite_base64 := test_suite_base64 -func.test_suite_blowfish := test_suite_blowfish -func.test_suite_camellia := test_suite_camellia -func.test_suite_ccm := test_suite_ccm -func.test_suite_chacha20 := test_suite_chacha20 -func.test_suite_chachapoly := test_suite_chachapoly -func.test_suite_cmac := test_suite_cmac -func.test_suite_cipher.chachapoly := test_suite_cipher -func.test_suite_cipher.aes := test_suite_cipher -func.test_suite_cipher.arc4 := test_suite_cipher -func.test_suite_cipher.ccm := test_suite_cipher -func.test_suite_cipher.chacha20 := test_suite_cipher -func.test_suite_cipher.gcm := test_suite_cipher -func.test_suite_cipher.blowfish := test_suite_cipher -func.test_suite_cipher.camellia := test_suite_cipher -func.test_suite_cipher.des := test_suite_cipher -func.test_suite_cipher.null := test_suite_cipher -func.test_suite_cipher.padding := test_suite_cipher -func.test_suite_ctr_drbg := test_suite_ctr_drbg -func.test_suite_debug := test_suite_debug -func.test_suite_des := test_suite_des -func.test_suite_dhm := test_suite_dhm -func.test_suite_ecdh := test_suite_ecdh -func.test_suite_ecdsa := test_suite_ecdsa -func.test_suite_ecjpake := test_suite_ecjpake -func.test_suite_ecp := test_suite_ecp -func.test_suite_error := test_suite_error -func.test_suite_entropy := test_suite_entropy -func.test_suite_gcm.aes128_de := test_suite_gcm -func.test_suite_gcm.aes192_de := test_suite_gcm -func.test_suite_gcm.aes256_de := test_suite_gcm -func.test_suite_gcm.aes128_en := test_suite_gcm -func.test_suite_gcm.aes192_en := test_suite_gcm -func.test_suite_gcm.aes256_en := test_suite_gcm -func.test_suite_gcm.camellia := test_suite_gcm -func.test_suite_hkdf := test_suite_hkdf -func.test_suite_hmac_drbg.misc := test_suite_hmac_drbg -func.test_suite_hmac_drbg.no_reseed := test_suite_hmac_drbg -func.test_suite_hmac_drbg.nopr := test_suite_hmac_drbg -func.test_suite_hmac_drbg.pr := test_suite_hmac_drbg -func.test_suite_md := test_suite_md -func.test_suite_mdx := test_suite_mdx -func.test_suite_memory_buffer_alloc := test_suite_memory_buffer_alloc -func.test_suite_mpi := test_suite_mpi -func.test_suite_nist_kw := test_suite_nist_kw -func.test_suite_pem := test_suite_pem -func.test_suite_pkcs1_v15 := test_suite_pkcs1_v15 -func.test_suite_pkcs1_v21 := test_suite_pkcs1_v21 -func.test_suite_pkcs5 := test_suite_pkcs5 -func.test_suite_pkparse := test_suite_pkparse -func.test_suite_pkwrite := test_suite_pkwrite -func.test_suite_pk := test_suite_pk -func.test_suite_rsa := test_suite_rsa -func.test_suite_shax := test_suite_shax -func.test_suite_ssl := test_suite_ssl -func.test_suite_timing := test_suite_timing -func.test_suite_x509parse := test_suite_x509parse -func.test_suite_x509write := test_suite_x509write -func.test_suite_xtea := test_suite_xtea -func.test_suite_version := test_suite_version - .SILENT: .PHONY: all check test clean @@ -182,14 +70,26 @@ all: $(BINARIES) $(DEP): $(MAKE) -C ../library -# invoke perl explicitly for the sake of mingw32-make - C_FILES := $(addsuffix .c,$(APPS)) +# Wildcard target for test code generation: +# A .c file is generated for each .data file in the suites/ directory. Each .c +# file depends on a .data and .function file from suites/ directory. Following +# nameing convention is followed: +# +# C file | Depends on +#----------------------------------------------------------------------------- +# foo.c | suites/foo.function suites/foo.data +# foo.bar.c | suites/foo.function suites/foo.bar.data +# +# Note above that .c and .data files have same base name. +# However, corresponding .function file's base name is the word before first +# dot in .c file's base name. +# .SECONDEXPANSION: -$(C_FILES): %.c: suites/$$(func.$$*).function suites/%.data scripts/generate_test_code.py suites/helpers.function suites/main_test.function suites/host_test.function +%.c: suites/$$(firstword $$(subst ., ,$$*)).function suites/%.data scripts/generate_test_code.py suites/helpers.function suites/main_test.function suites/host_test.function echo " Gen $@" - $(PYTHON) scripts/generate_test_code.py -f suites/$(func.$*).function \ + $(PYTHON) scripts/generate_test_code.py -f suites/$(firstword $(subst ., ,$*)).function \ -d suites/$*.data \ -t suites/main_test.function \ -p suites/host_test.function \ @@ -208,8 +108,10 @@ ifndef WINDOWS rm -rf $(APPS) *.c *.datax TESTS else del /Q /F *.c *.exe *.datax +ifneq ($(wildcard TESTS/.*),) rmdir /Q /S TESTS endif +endif check: $(BINARIES) perl scripts/run-test-suites.pl @@ -222,9 +124,9 @@ EMBEDDED_TESTS := $(addprefix embedded_,$(APPS)) # Generate test code for target. .SECONDEXPANSION: -$(EMBEDDED_TESTS): embedded_%: suites/$$(func.$$*).function suites/%.data scripts/generate_test_code.py suites/helpers.function suites/main_test.function suites/target_test.function +$(EMBEDDED_TESTS): embedded_%: suites/$$(firstword $$(subst ., ,$$*)).function suites/%.data scripts/generate_test_code.py suites/helpers.function suites/main_test.function suites/target_test.function echo " Gen ./TESTS/mbedtls/$*/$*.c" - $(PYTHON) scripts/generate_test_code.py -f suites/$(func.$*).function \ + $(PYTHON) scripts/generate_test_code.py -f suites/$(firstword $(subst ., ,$*)).function \ -d suites/$*.data \ -t suites/main_test.function \ -p suites/target_test.function \