diff --git a/CMakeLists.txt b/CMakeLists.txt index 9f23c3b2f7..a099356389 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -420,20 +420,22 @@ if(ENABLE_TESTING OR ENABLE_PROGRAMS) if(GEN_FILES) add_custom_command( OUTPUT - ${MBEDTLS_FRAMEWORK_DIR}/tests/src/test_keys.h + ${CMAKE_CURRENT_BINARY_DIR}/tests/include/test/test_keys.h + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/tests/include/test COMMAND "${MBEDTLS_PYTHON_EXECUTABLE}" "${MBEDTLS_FRAMEWORK_DIR}/scripts/generate_test_keys.py" "--output" - "${MBEDTLS_FRAMEWORK_DIR}/tests/src/test_keys.h" + "${CMAKE_CURRENT_BINARY_DIR}/tests/include/test/test_keys.h" DEPENDS ${MBEDTLS_FRAMEWORK_DIR}/scripts/generate_test_keys.py ) add_custom_target(mbedtls_test_keys_header - DEPENDS ${MBEDTLS_FRAMEWORK_DIR}/tests/src/test_keys.h) + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/tests/include/test/test_keys.h) add_dependencies(mbedtls_test mbedtls_test_keys_header) endif() target_include_directories(mbedtls_test + PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/tests/include PRIVATE ${MBEDTLS_FRAMEWORK_DIR}/tests/include PRIVATE tests/include PRIVATE include @@ -454,20 +456,22 @@ if(ENABLE_TESTING OR ENABLE_PROGRAMS) if(GEN_FILES) add_custom_command( OUTPUT - ${CMAKE_CURRENT_SOURCE_DIR}/tests/src/test_certs.h + ${CMAKE_CURRENT_BINARY_DIR}/tests/include/test/test_certs.h + COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/tests/include/test COMMAND "${MBEDTLS_PYTHON_EXECUTABLE}" "${MBEDTLS_FRAMEWORK_DIR}/scripts/generate_test_cert_macros.py" "--output" - "${CMAKE_CURRENT_SOURCE_DIR}/tests/src/test_certs.h" + "${CMAKE_CURRENT_BINARY_DIR}/tests/include/test/test_certs.h" DEPENDS ${MBEDTLS_FRAMEWORK_DIR}/scripts/generate_test_cert_macros.py ) add_custom_target(mbedtls_test_certs_header - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tests/src/test_certs.h) + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/tests/include/test/test_certs.h) add_dependencies(mbedtls_test_helpers mbedtls_test_certs_header) endif() target_include_directories(mbedtls_test_helpers + PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/tests/include PRIVATE ${MBEDTLS_FRAMEWORK_DIR}/tests/include PRIVATE tests/include PRIVATE include diff --git a/framework b/framework index 2b03d62924..28dc4cae3f 160000 --- a/framework +++ b/framework @@ -1 +1 @@ -Subproject commit 2b03d629240c0c23a0bfa5444f005b8d9b6f8ba8 +Subproject commit 28dc4cae3f71f5425dd42953c6f2f38d49123bee diff --git a/scripts/generate_visualc_files.pl b/scripts/generate_visualc_files.pl index 053040a9c5..81521896b4 100755 --- a/scripts/generate_visualc_files.pl +++ b/scripts/generate_visualc_files.pl @@ -11,9 +11,18 @@ use warnings; use strict; +use Getopt::Long; use Digest::MD5 'md5_hex'; +# Declare variables for options my $vsx_dir = "visualc/VS2017"; +my $list = 0; # Default off + +GetOptions( + "directory=s" => \$vsx_dir, # Target directory + "list" => \$list # Only list generated files +) or die "Invalid options\n"; + my $vsx_ext = "vcxproj"; my $vsx_app_tpl_file = "scripts/data_files/vs2017-app-template.$vsx_ext"; my $vsx_main_tpl_file = "scripts/data_files/vs2017-main-template.$vsx_ext"; @@ -33,6 +42,8 @@ my $crypto_core_source_dir = 'tf-psa-crypto/core'; my $crypto_source_dir = 'tf-psa-crypto/drivers/builtin/src'; my $tls_test_source_dir = 'tests/src'; my $tls_test_header_dir = 'tests/include/test'; +my $crypto_test_source_dir = 'tf-psa-crypto/tests/src'; +my $crypto_test_header_dir = 'tf-psa-crypto/tests/include/test'; my $test_source_dir = 'framework/tests/src'; my $test_header_dir = 'framework/tests/include/test'; my $test_drivers_header_dir = 'framework/tests/include/test/drivers'; @@ -59,6 +70,7 @@ my @include_directories = qw( tf-psa-crypto/drivers/everest/include/everest/vs2013 tf-psa-crypto/drivers/everest/include/everest/kremlib tests/include + tf-psa-crypto/tests/include framework/tests/include framework/tests/programs ); @@ -122,9 +134,11 @@ sub check_dirs { && -d $crypto_source_dir && -d $test_source_dir && -d $tls_test_source_dir + && -d $crypto_test_source_dir && -d $test_drivers_source_dir && -d $test_header_dir && -d $tls_test_header_dir + && -d $crypto_test_header_dir && -d $test_drivers_header_dir && -d $mbedtls_programs_dir && -d $framework_programs_dir @@ -280,7 +294,9 @@ sub main { # Remove old files to ensure that, for example, project files from deleted # apps are not kept - del_vsx_files(); + if (not $list) { + del_vsx_files(); + } my @app_list = get_app_list(); my @header_dirs = ( @@ -289,6 +305,7 @@ sub main { $psa_header_dir, $test_header_dir, $tls_test_header_dir, + $crypto_test_header_dir, $test_drivers_header_dir, $tls_source_dir, $crypto_core_source_dir, @@ -303,6 +320,7 @@ sub main { $crypto_source_dir, $test_source_dir, $tls_test_source_dir, + $crypto_test_source_dir, $test_drivers_source_dir, @thirdparty_source_dirs, ); @@ -313,13 +331,22 @@ sub main { map { s!/!\\!g } @headers; map { s!/!\\!g } @sources; - gen_app_files( @app_list ); + if ($list) { + foreach my $app (@app_list) { + $app =~ s/.*\///; + print "$vsx_dir/$app.$vsx_ext\n"; + } + print "$vsx_main_file\n"; + print "$vsx_sln_file\n"; + } else { + gen_app_files( @app_list ); - gen_main_file( \@headers, \@sources, - $vsx_hdr_tpl, $vsx_src_tpl, - $vsx_main_tpl_file, $vsx_main_file ); + gen_main_file( \@headers, \@sources, + $vsx_hdr_tpl, $vsx_src_tpl, + $vsx_main_tpl_file, $vsx_main_file ); - gen_vsx_solution( @app_list ); + gen_vsx_solution( @app_list ); + } return 0; } diff --git a/scripts/make_generated_files.bat b/scripts/make_generated_files.bat index bef198f361..418b6681a3 100644 --- a/scripts/make_generated_files.bat +++ b/scripts/make_generated_files.bat @@ -7,30 +7,30 @@ @rem the "CC" environment variable must point to a C compiler. @rem @@@@ library\** @@@@ -@rem psa_crypto_driver_wrappers.h needs to be generated prior to -@rem generate_visualc_files.pl being invoked. python tf-psa-crypto\scripts\generate_driver_wrappers.py || exit /b 1 perl scripts\generate_errors.pl || exit /b 1 perl scripts\generate_query_config.pl || exit /b 1 perl scripts\generate_features.pl || exit /b 1 python framework\scripts\generate_ssl_debug_helpers.py || exit /b 1 -@rem @@@@ Build @@@@ -perl scripts\generate_visualc_files.pl || exit /b 1 - @rem @@@@ programs\** @@@@ cd tf-psa-crypto python scripts\generate_psa_constants.py || exit /b 1 +python framework\scripts\generate_config_tests.py || exit /b 1 cd .. @rem @@@@ tests\** @@@@ python framework\scripts\generate_bignum_tests.py --directory tf-psa-crypto\tests\suites || exit /b 1 -python framework\scripts\generate_config_tests.py tests\suites\test_suite_config.mbedtls_boolean.data || exit /b 1 -python framework\scripts\generate_config_tests.py --directory tf-psa-crypto\tests\suites tests\suites\test_suite_config.psa_boolean.data || exit /b 1 +python framework\scripts\generate_config_tests.py || exit /b 1 python framework\scripts\generate_ecp_tests.py --directory tf-psa-crypto\tests\suites || exit /b 1 python framework\scripts\generate_psa_tests.py --directory tf-psa-crypto\tests\suites || exit /b 1 -python framework\scripts\generate_test_keys.py --output framework\tests\include\test\test_keys.h || exit /b 1 -python tf-psa-crypto\framework\scripts\generate_test_keys.py --output tf-psa-crypto\framework\tests\include\test\test_keys.h || exit /b 1 -python framework\scripts\generate_test_cert_macros.py --output tests\src\test_certs.h || exit /b 1 +python framework\scripts\generate_test_keys.py --output tests\include\test\test_keys.h || exit /b 1 +python tf-psa-crypto\framework\scripts\generate_test_keys.py --output tf-psa-crypto\tests\include\test\test_keys.h || exit /b 1 +python framework\scripts\generate_test_cert_macros.py --output tests\include\test\test_certs.h || exit /b 1 python framework\scripts\generate_tls_handshake_tests.py || exit /b 1 python framework\scripts\generate_tls13_compat_tests.py || exit /b 1 + +@rem @@@@ Build @@@@ +@rem Call generate_visualc_files.pl last to be sure everything else has been +@rem generated before. +perl scripts\generate_visualc_files.pl || exit /b 1 diff --git a/tests/.gitignore b/tests/.gitignore index a4a0309fa8..e58c8f0554 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -22,6 +22,6 @@ /opt-testcases/tls13-compat.sh /suites/*.generated.data /suites/test_suite_config.mbedtls_boolean.data -/src/test_keys.h -/src/test_certs.h +/include/test/test_keys.h +/include/test/test_certs.h ###END_GENERATED_FILES### diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index a56a707f41..d12133d300 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -19,15 +19,9 @@ execute_process( WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/.. OUTPUT_VARIABLE - base_config_generated_data_files_raw) + base_config_generated_data_files) string(REGEX REPLACE "[^;]*/" "" - base_config_generated_data_files_raw "${base_config_generated_data_files_raw}") -# Can be replace by list(FILTER ...) when CI CMake version is >=3.6 -foreach(file ${base_config_generated_data_files_raw}) - if(${file} MATCHES "mbedtls") - list(APPEND base_config_generated_data_files ${file}) - endif() -endforeach() + base_config_generated_data_files "${base_config_generated_data_files}") # Derive generated file paths in the build directory. The generated data # files go into the suites/ subdirectory. @@ -50,7 +44,6 @@ if(GEN_FILES) ${MBEDTLS_PYTHON_EXECUTABLE} ${MBEDTLS_FRAMEWORK_DIR}/scripts/generate_config_tests.py --directory ${CMAKE_CURRENT_BINARY_DIR}/suites - ${config_generated_data_files} DEPENDS ${MBEDTLS_FRAMEWORK_DIR}/scripts/generate_config_tests.py # Do not declare the configuration files as dependencies: they @@ -183,6 +176,7 @@ function(add_test_suite suite_name) # files are automatically included because the library targets declare # them as PUBLIC. target_include_directories(test_suite_${data_name} + PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/include PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../framework/tests/include PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../library diff --git a/tests/Makefile b/tests/Makefile index b6f2f8caff..87a6ca1777 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -25,16 +25,23 @@ $(error "$(PYTHON) ../framework/scripts/generate_bignum_tests.py --list" failed) endif GENERATED_CRYPTO_DATA_FILES += $(GENERATED_BIGNUM_DATA_FILES) -GENERATED_CONFIG_DATA_FILES_RAW := $(patsubst tests/%,%,$(shell \ +GENERATED_MBEDTLS_CONFIG_DATA_FILES := $(patsubst tests/%,%,$(shell \ $(PYTHON) ../framework/scripts/generate_config_tests.py --list || \ echo FAILED \ )) -ifeq ($(GENERATED_CONFIG_DATA_FILES),FAILED) +ifeq ($(GENERATED_MBEDTLS_CONFIG_DATA_FILES),FAILED) $(error "$(PYTHON) ../framework/scripts/generate_config_tests.py --list" failed) endif -GENERATED_MBEDTLS_CONFIG_DATA_FILES := $(foreach file,$(GENERATED_CONFIG_DATA_FILES_RAW),$(if $(findstring mbedtls,$(file)),$(file),)) -GENERATED_PSA_CONFIG_DATA_FILES := $(foreach file,$(GENERATED_CONFIG_DATA_FILES_RAW),$(if $(findstring psa,$(file)),$(addprefix ../tf-psa-crypto/tests/,$(file)),)) -GENERATED_CONFIG_DATA_FILES := $(GENERATED_MBEDTLS_CONFIG_DATA_FILES)$(GENERATED_PSA_CONFIG_DATA_FILES) + +GENERATED_PSA_CONFIG_DATA_FILES := $(addprefix ../tf-psa-crypto/,$(shell \ + $(PYTHON) ../tf-psa-crypto/framework/scripts/generate_config_tests.py --list || \ + echo FAILED \ +)) +ifeq ($(GENERATED_PSA_CONFIG_DATA_FILES),FAILED) +$(error "$(PYTHON) ../tf-psa-crypto/framework/scripts/generate_config_tests.py --list" failed) +endif + +GENERATED_CONFIG_DATA_FILES := $(GENERATED_MBEDTLS_CONFIG_DATA_FILES) $(GENERATED_PSA_CONFIG_DATA_FILES) GENERATED_DATA_FILES += $(GENERATED_MBEDTLS_CONFIG_DATA_FILES) GENERATED_CRYPTO_DATA_FILES += $(GENERATED_PSA_CONFIG_DATA_FILES) @@ -57,9 +64,9 @@ endif GENERATED_CRYPTO_DATA_FILES += $(GENERATED_PSA_DATA_FILES) GENERATED_FILES = $(GENERATED_DATA_FILES) $(GENERATED_CRYPTO_DATA_FILES) -GENERATED_FILES += ../framework/tests/include/test/test_keys.h \ - ../tf-psa-crypto/framework/tests/include/test/test_keys.h \ - src/test_certs.h +GENERATED_FILES += include/test/test_keys.h \ + ../tf-psa-crypto/tests/include/test/test_keys.h \ + include/test/test_certs.h # Generated files needed to (fully) run ssl-opt.sh .PHONY: ssl-opt @@ -112,8 +119,8 @@ generated_config_test_data: ../framework/scripts/mbedtls_framework/test_case.py generated_config_test_data: ../framework/scripts/mbedtls_framework/test_data_generation.py generated_config_test_data: echo " Gen $(GENERATED_CONFIG_DATA_FILES)" - $(PYTHON) ../framework/scripts/generate_config_tests.py $(GENERATED_MBEDTLS_CONFIG_DATA_FILES) - $(PYTHON) ../framework/scripts/generate_config_tests.py --directory ../tf-psa-crypto/tests/suites $(GENERATED_PSA_CONFIG_DATA_FILES) + $(PYTHON) ../framework/scripts/generate_config_tests.py + cd ../tf-psa-crypto && $(PYTHON) ./framework/scripts/generate_config_tests.py .SECONDARY: generated_config_test_data $(GENERATED_ECP_DATA_FILES): $(gen_file_dep) generated_ecp_test_data @@ -177,16 +184,16 @@ all: $(BINARIES) $(CRYPTO_BINARIES) mbedtls_test: $(MBEDTLS_TEST_OBJS) -src/test_certs.h: ../framework/scripts/generate_test_cert_macros.py \ +include/test/test_certs.h: ../framework/scripts/generate_test_cert_macros.py \ $($(PYTHON) ../framework/scripts/generate_test_cert_macros.py --list-dependencies) echo " Gen $@" $(PYTHON) ../framework/scripts/generate_test_cert_macros.py --output $@ -../framework/tests/include/test/test_keys.h: ../framework/scripts/generate_test_keys.py +include/test/test_keys.h: ../framework/scripts/generate_test_keys.py echo " Gen $@" $(PYTHON) ../framework/scripts/generate_test_keys.py --output $@ -../tf-psa-crypto/framework/tests/include/test/test_keys.h: ../tf-psa-crypto/framework/scripts/generate_test_keys.py +../tf-psa-crypto/tests/include/test/test_keys.h: ../tf-psa-crypto/framework/scripts/generate_test_keys.py echo " Gen $@" $(PYTHON) ../tf-psa-crypto/framework/scripts/generate_test_keys.py --output $@ @@ -197,8 +204,8 @@ ifdef RECORD_PSA_STATUS_COVERAGE_LOG # therefore the wildcard enumeration above doesn't include it. TEST_OBJS_DEPS += ../framework/tests/include/test/instrument_record_status.h endif -TEST_OBJS_DEPS += src/test_certs.h ../framework/tests/include/test/test_keys.h \ - ../tf-psa-crypto/framework/tests/include/test/test_keys.h +TEST_OBJS_DEPS += include/test/test_certs.h include/test/test_keys.h \ + ../tf-psa-crypto/tests/include/test/test_keys.h # Rule to compile common test C files in framework ../framework/tests/src/%.o : ../framework/tests/src/%.c $(TEST_OBJS_DEPS) diff --git a/tests/scripts/check-generated-files.sh b/tests/scripts/check-generated-files.sh index ba10024ee8..e3c8e08afe 100755 --- a/tests/scripts/check-generated-files.sh +++ b/tests/scripts/check-generated-files.sh @@ -141,10 +141,10 @@ check() if [ -d tf-psa-crypto ]; then cd tf-psa-crypto check scripts/generate_psa_constants.py ./programs/psa/psa_constant_names_generated.c - check ../framework/scripts/generate_bignum_tests.py $(../framework/scripts/generate_bignum_tests.py --list) - check ../framework/scripts/generate_config_tests.py tests/suites/test_suite_config.psa_boolean.data - check ../framework/scripts/generate_ecp_tests.py $(../framework/scripts/generate_ecp_tests.py --list) - check ../framework/scripts/generate_psa_tests.py $(../framework/scripts/generate_psa_tests.py --list) + check framework/scripts/generate_bignum_tests.py $(framework/scripts/generate_bignum_tests.py --list) + check framework/scripts/generate_config_tests.py $(framework/scripts/generate_config_tests.py --list) + check framework/scripts/generate_ecp_tests.py $(framework/scripts/generate_ecp_tests.py --list) + check framework/scripts/generate_psa_tests.py $(framework/scripts/generate_psa_tests.py --list) cd .. # Generated files that are present in the repository even in the development # branch. (This is intended to be temporary, until the generator scripts are @@ -171,7 +171,7 @@ else check framework/scripts/generate_psa_wrappers.py tests/include/test/psa_test_wrappers.h tests/src/psa_test_wrappers.c fi -check framework/scripts/generate_test_keys.py framework/tests/include/test/test_keys.h +check framework/scripts/generate_test_keys.py tests/include/test/test_keys.h # Additional checks for Mbed TLS only if in_mbedtls_repo; then @@ -181,7 +181,7 @@ if in_mbedtls_repo; then check framework/scripts/generate_ssl_debug_helpers.py library/ssl_debug_helpers_generated.c check framework/scripts/generate_tls_handshake_tests.py tests/opt-testcases/handshake-generated.sh check framework/scripts/generate_tls13_compat_tests.py tests/opt-testcases/tls13-compat.sh - check framework/scripts/generate_test_cert_macros.py tests/src/test_certs.h + check framework/scripts/generate_test_cert_macros.py tests/include/test/test_certs.h # generate_visualc_files enumerates source files (library/*.c). It doesn't # care about their content, but the files must exist. So it must run after # the step that creates or updates these files. diff --git a/tests/scripts/components-basic-checks.sh b/tests/scripts/components-basic-checks.sh index 3ee88a3c21..85731a1710 100644 --- a/tests/scripts/components-basic-checks.sh +++ b/tests/scripts/components-basic-checks.sh @@ -17,20 +17,38 @@ component_check_recursion () { } component_check_generated_files () { - msg "Check: check-generated-files, files generated with make" # 2s + msg "Check make_generated_files.py consistency" + make neat + $FRAMEWORK/scripts/make_generated_files.py + $FRAMEWORK/scripts/make_generated_files.py --check + make neat + + msg "Check files generated with make" + MBEDTLS_ROOT_DIR="$PWD" make generated_files - tests/scripts/check-generated-files.sh + $FRAMEWORK/scripts/make_generated_files.py --check - msg "Check: check-generated-files -u, files present" # 2s - tests/scripts/check-generated-files.sh -u - # Check that the generated files are considered up to date. - tests/scripts/check-generated-files.sh + cd $TF_PSA_CRYPTO_ROOT_DIR + ./framework/scripts/make_generated_files.py --check - msg "Check: check-generated-files -u, files absent" # 2s - command make neat - tests/scripts/check-generated-files.sh -u - # Check that the generated files are considered up to date. - tests/scripts/check-generated-files.sh + msg "Check files generated with cmake" + cd "$MBEDTLS_ROOT_DIR" + mkdir "$OUT_OF_SOURCE_DIR" + cd "$OUT_OF_SOURCE_DIR" + cmake -D GEN_FILES=ON "$MBEDTLS_ROOT_DIR" + make + cd "$MBEDTLS_ROOT_DIR" + + # Files for MS Visual Studio are not generated with cmake thus copy the + # ones generated with make to pacify make_generated_files.py check. + # Files for MS Visual Studio are rather on their way out thus not adding + # support for them with cmake. + cp -Rf visualc "$OUT_OF_SOURCE_DIR" + + $FRAMEWORK/scripts/make_generated_files.py --root "$OUT_OF_SOURCE_DIR" --check + + cd $TF_PSA_CRYPTO_ROOT_DIR + ./framework/scripts/make_generated_files.py --root "$OUT_OF_SOURCE_DIR/tf-psa-crypto" --check # This component ends with the generated files present in the source tree. # This is necessary for subsequent components! diff --git a/tests/src/certs.c b/tests/src/certs.c index bacc846754..d1af5b2aa4 100644 --- a/tests/src/certs.c +++ b/tests/src/certs.c @@ -13,7 +13,7 @@ #include "mbedtls/pk.h" -#include "test_certs.h" +#include "test/test_certs.h" /* * diff --git a/tf-psa-crypto b/tf-psa-crypto index 5048bced5e..43ea7fa25c 160000 --- a/tf-psa-crypto +++ b/tf-psa-crypto @@ -1 +1 @@ -Subproject commit 5048bced5e1c000c0e3888be8126eb63a2b91937 +Subproject commit 43ea7fa25cd8a288c5b75dbb0b4eb47df6ffca8b