e90e405e15
When the option is On, CMake will have rules to generate the generated files using scripts etc. When the option is Off, CMake will assume the files are available from the source tree; in that mode, it won't require any extra tools (Perl for example) compared to when we committed the files to git. The intention is that users will never need to adjust this option: - in the development branch (and features branches etc.) the option is always On (development mode); - in released tarballs, which include the generated files, we'll switch the option to Off (release mode) in the same commit that re-adds the generated files. Signed-off-by: Manuel Pégourié-Gonnard <manuel.pegourie-gonnard@arm.com>
228 lines
8.2 KiB
CMake
228 lines
8.2 KiB
CMake
set(libs
|
|
${mbedtls_target}
|
|
)
|
|
|
|
# Set the project root directory if it's not already defined, as may happen if
|
|
# the tests folder is included directly by a parent project, without including
|
|
# the top level CMakeLists.txt.
|
|
if(NOT DEFINED MBEDTLS_DIR)
|
|
set(MBEDTLS_DIR ${CMAKE_SOURCE_DIR})
|
|
endif()
|
|
|
|
if(NOT MBEDTLS_PYTHON_EXECUTABLE)
|
|
message(FATAL_ERROR "Cannot build test suites without Python 3")
|
|
endif()
|
|
|
|
# generated .data files will go there
|
|
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/suites)
|
|
|
|
if(DEV_MODE)
|
|
add_custom_command(
|
|
OUTPUT
|
|
${CMAKE_CURRENT_BINARY_DIR}/suites/test_suite_psa_crypto_not_supported.generated.data
|
|
${CMAKE_CURRENT_BINARY_DIR}/suites/test_suite_psa_crypto_storage_format.current.data
|
|
${CMAKE_CURRENT_BINARY_DIR}/suites/test_suite_psa_crypto_storage_format.v0.data
|
|
WORKING_DIRECTORY
|
|
${CMAKE_CURRENT_SOURCE_DIR}/..
|
|
COMMAND
|
|
${MBEDTLS_PYTHON_EXECUTABLE}
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../tests/scripts/generate_psa_tests.py
|
|
--directory ${CMAKE_CURRENT_BINARY_DIR}/suites
|
|
DEPENDS
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../tests/scripts/generate_psa_tests.py
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../include/psa/crypto_config.h
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../include/psa/crypto_values.h
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../include/psa/crypto_extra.h
|
|
)
|
|
else()
|
|
link_to_source(suites/test_suite_psa_crypto_not_supported.generated.data)
|
|
link_to_source(suites/test_suite_psa_crypto_storage_format.current.data)
|
|
link_to_source(suites/test_suite_psa_crypto_storage_format.v0.data)
|
|
endif()
|
|
|
|
# Test suites caught by SKIP_TEST_SUITES are built but not executed.
|
|
# "foo" as a skip pattern skips "test_suite_foo" and "test_suite_foo.bar"
|
|
# but not "test_suite_foobar".
|
|
string(REGEX REPLACE "[ ,;]" "|" SKIP_TEST_SUITES_REGEX "${SKIP_TEST_SUITES}")
|
|
string(REPLACE "." "\\." SKIP_TEST_SUITES_REGEX "${SKIP_TEST_SUITES_REGEX}")
|
|
set(SKIP_TEST_SUITES_REGEX "^(${SKIP_TEST_SUITES_REGEX})(\$|\\.)")
|
|
|
|
function(add_test_suite suite_name)
|
|
if(ARGV1)
|
|
set(data_name ${ARGV1})
|
|
else()
|
|
set(data_name ${suite_name})
|
|
endif()
|
|
|
|
if(data_name STREQUAL "psa_crypto_not_supported.generated" OR
|
|
data_name STREQUAL "psa_crypto_storage_format.current" OR
|
|
data_name STREQUAL "psa_crypto_storage_format.v0")
|
|
set(data_file
|
|
${CMAKE_CURRENT_BINARY_DIR}/suites/test_suite_${data_name}.data)
|
|
else()
|
|
set(data_file
|
|
${CMAKE_CURRENT_SOURCE_DIR}/suites/test_suite_${data_name}.data)
|
|
endif()
|
|
|
|
add_custom_command(
|
|
OUTPUT
|
|
test_suite_${data_name}.c
|
|
COMMAND
|
|
${MBEDTLS_PYTHON_EXECUTABLE}
|
|
${CMAKE_CURRENT_SOURCE_DIR}/scripts/generate_test_code.py
|
|
-f ${CMAKE_CURRENT_SOURCE_DIR}/suites/test_suite_${suite_name}.function
|
|
-d ${data_file}
|
|
-t ${CMAKE_CURRENT_SOURCE_DIR}/suites/main_test.function
|
|
-p ${CMAKE_CURRENT_SOURCE_DIR}/suites/host_test.function
|
|
-s ${CMAKE_CURRENT_SOURCE_DIR}/suites
|
|
--helpers-file ${CMAKE_CURRENT_SOURCE_DIR}/suites/helpers.function
|
|
-o .
|
|
DEPENDS
|
|
${CMAKE_CURRENT_SOURCE_DIR}/scripts/generate_test_code.py
|
|
${CMAKE_CURRENT_SOURCE_DIR}/suites/test_suite_${suite_name}.function
|
|
${data_file}
|
|
${CMAKE_CURRENT_SOURCE_DIR}/suites/main_test.function
|
|
${CMAKE_CURRENT_SOURCE_DIR}/suites/host_test.function
|
|
${CMAKE_CURRENT_SOURCE_DIR}/suites/helpers.function
|
|
${mbedtls_target}
|
|
)
|
|
|
|
add_executable(test_suite_${data_name} test_suite_${data_name}.c $<TARGET_OBJECTS:mbedtls_test>)
|
|
target_link_libraries(test_suite_${data_name} ${libs})
|
|
# Include test-specific header files from ./include and private header
|
|
# files (used by some invasive tests) from ../library. Public header
|
|
# files are automatically included because the library targets declare
|
|
# them as PUBLIC.
|
|
target_include_directories(test_suite_${data_name}
|
|
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
|
|
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../library)
|
|
|
|
if(${data_name} MATCHES ${SKIP_TEST_SUITES_REGEX})
|
|
message(STATUS "The test suite ${data_name} will not be executed.")
|
|
else()
|
|
add_test(${data_name}-suite test_suite_${data_name} --verbose)
|
|
endif()
|
|
endfunction(add_test_suite)
|
|
|
|
# Enable definition of various functions used throughout the testsuite
|
|
# (gethostname, strdup, fileno...) even when compiling with -std=c99. Harmless
|
|
# on non-POSIX platforms.
|
|
add_definitions("-D_POSIX_C_SOURCE=200809L")
|
|
|
|
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG)
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-function")
|
|
endif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG)
|
|
|
|
if(CMAKE_COMPILER_IS_CLANG)
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wdocumentation -Wno-documentation-deprecated-sync -Wunreachable-code")
|
|
endif(CMAKE_COMPILER_IS_CLANG)
|
|
|
|
if(MSVC)
|
|
# If a warning level has been defined, suppress all warnings for test code
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W0")
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /WX-")
|
|
endif(MSVC)
|
|
|
|
add_test_suite(aes aes.cbc)
|
|
add_test_suite(aes aes.cfb)
|
|
add_test_suite(aes aes.ecb)
|
|
add_test_suite(aes aes.ofb)
|
|
add_test_suite(aes aes.rest)
|
|
add_test_suite(aes aes.xts)
|
|
add_test_suite(aria)
|
|
add_test_suite(asn1parse)
|
|
add_test_suite(asn1write)
|
|
add_test_suite(base64)
|
|
add_test_suite(camellia)
|
|
add_test_suite(ccm)
|
|
add_test_suite(chacha20)
|
|
add_test_suite(chachapoly)
|
|
add_test_suite(cipher cipher.aes)
|
|
add_test_suite(cipher cipher.camellia)
|
|
add_test_suite(cipher cipher.ccm)
|
|
add_test_suite(cipher cipher.chacha20)
|
|
add_test_suite(cipher cipher.chachapoly)
|
|
add_test_suite(cipher cipher.des)
|
|
add_test_suite(cipher cipher.gcm)
|
|
add_test_suite(cipher cipher.misc)
|
|
add_test_suite(cipher cipher.nist_kw)
|
|
add_test_suite(cipher cipher.null)
|
|
add_test_suite(cipher cipher.padding)
|
|
add_test_suite(cmac)
|
|
add_test_suite(ctr_drbg)
|
|
add_test_suite(debug)
|
|
add_test_suite(des)
|
|
add_test_suite(dhm)
|
|
add_test_suite(ecdh)
|
|
add_test_suite(ecdsa)
|
|
add_test_suite(ecjpake)
|
|
add_test_suite(ecp)
|
|
add_test_suite(entropy)
|
|
add_test_suite(error)
|
|
add_test_suite(gcm gcm.aes128_de)
|
|
add_test_suite(gcm gcm.aes128_en)
|
|
add_test_suite(gcm gcm.aes192_de)
|
|
add_test_suite(gcm gcm.aes192_en)
|
|
add_test_suite(gcm gcm.aes256_de)
|
|
add_test_suite(gcm gcm.aes256_en)
|
|
add_test_suite(gcm gcm.camellia)
|
|
add_test_suite(gcm gcm.misc)
|
|
add_test_suite(hkdf)
|
|
add_test_suite(hmac_drbg hmac_drbg.misc)
|
|
add_test_suite(hmac_drbg hmac_drbg.no_reseed)
|
|
add_test_suite(hmac_drbg hmac_drbg.nopr)
|
|
add_test_suite(hmac_drbg hmac_drbg.pr)
|
|
add_test_suite(md)
|
|
add_test_suite(mdx)
|
|
add_test_suite(memory_buffer_alloc)
|
|
add_test_suite(mpi)
|
|
add_test_suite(mps)
|
|
add_test_suite(net)
|
|
add_test_suite(nist_kw)
|
|
add_test_suite(oid)
|
|
add_test_suite(pem)
|
|
add_test_suite(pk)
|
|
add_test_suite(pkcs1_v15)
|
|
add_test_suite(pkcs1_v21)
|
|
add_test_suite(pkcs5)
|
|
add_test_suite(pkparse)
|
|
add_test_suite(pkwrite)
|
|
add_test_suite(poly1305)
|
|
add_test_suite(psa_crypto)
|
|
add_test_suite(psa_crypto_attributes)
|
|
add_test_suite(psa_crypto_entropy)
|
|
add_test_suite(psa_crypto_hash)
|
|
add_test_suite(psa_crypto_init)
|
|
add_test_suite(psa_crypto_metadata)
|
|
add_test_suite(psa_crypto_not_supported psa_crypto_not_supported.generated)
|
|
add_test_suite(psa_crypto_not_supported psa_crypto_not_supported.misc)
|
|
add_test_suite(psa_crypto_persistent_key)
|
|
add_test_suite(psa_crypto_se_driver_hal)
|
|
add_test_suite(psa_crypto_se_driver_hal_mocks)
|
|
add_test_suite(psa_crypto_slot_management)
|
|
add_test_suite(psa_crypto_storage_format psa_crypto_storage_format.misc)
|
|
add_test_suite(psa_crypto_storage_format psa_crypto_storage_format.current)
|
|
add_test_suite(psa_crypto_storage_format psa_crypto_storage_format.v0)
|
|
add_test_suite(psa_its)
|
|
add_test_suite(random)
|
|
add_test_suite(rsa)
|
|
add_test_suite(shax)
|
|
add_test_suite(ssl)
|
|
add_test_suite(timing)
|
|
add_test_suite(version)
|
|
add_test_suite(x509parse)
|
|
add_test_suite(x509write)
|
|
|
|
# Make scripts and data files needed for testing available in an
|
|
# out-of-source build.
|
|
if (NOT ${CMAKE_CURRENT_BINARY_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
|
|
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/seedfile")
|
|
link_to_source(seedfile)
|
|
endif()
|
|
link_to_source(compat.sh)
|
|
link_to_source(context-info.sh)
|
|
link_to_source(data_files)
|
|
link_to_source(scripts)
|
|
link_to_source(ssl-opt.sh)
|
|
endif()
|