CMakeLists.txt (4349B)
1 set(libs 2 ${mbedtls_target} 3 ) 4 5 set(executables_libs 6 metatest 7 query_included_headers 8 selftest 9 udp_proxy 10 ) 11 add_dependencies(${programs_target} ${executables_libs}) 12 add_dependencies(${ssl_opt_target} udp_proxy) 13 14 set(executables_mbedcrypto 15 benchmark 16 query_compile_time_config 17 zeroize 18 ) 19 add_dependencies(${programs_target} ${executables_mbedcrypto}) 20 add_dependencies(${ssl_opt_target} query_compile_time_config) 21 22 if(TEST_CPP) 23 set(cpp_dummy_build_cpp "${CMAKE_CURRENT_BINARY_DIR}/cpp_dummy_build.cpp") 24 set(generate_cpp_dummy_build "${CMAKE_CURRENT_SOURCE_DIR}/generate_cpp_dummy_build.sh") 25 add_custom_command( 26 OUTPUT "${cpp_dummy_build_cpp}" 27 COMMAND "${generate_cpp_dummy_build}" "${cpp_dummy_build_cpp}" 28 DEPENDS "${generate_cpp_dummy_build}" 29 WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" 30 ) 31 add_executable(cpp_dummy_build "${cpp_dummy_build_cpp}") 32 target_include_directories(cpp_dummy_build PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../include) 33 target_link_libraries(cpp_dummy_build ${mbedcrypto_target} ${CMAKE_THREAD_LIBS_INIT}) 34 endif() 35 36 if(USE_SHARED_MBEDTLS_LIBRARY AND 37 NOT ${CMAKE_SYSTEM_NAME} MATCHES "[Ww][Ii][Nn]") 38 add_executable(dlopen "dlopen.c") 39 target_include_directories(dlopen PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../include) 40 target_link_libraries(dlopen ${CMAKE_DL_LIBS}) 41 endif() 42 43 if(GEN_FILES) 44 find_package(Perl REQUIRED) 45 46 add_custom_command( 47 OUTPUT 48 ${CMAKE_CURRENT_BINARY_DIR}/query_config.c 49 COMMAND 50 ${PERL} 51 ${CMAKE_CURRENT_SOURCE_DIR}/../../scripts/generate_query_config.pl 52 ${CMAKE_CURRENT_SOURCE_DIR}/../../include/mbedtls/mbedtls_config.h 53 ${CMAKE_CURRENT_SOURCE_DIR}/../../include/psa/crypto_config.h 54 ${CMAKE_CURRENT_SOURCE_DIR}/../../scripts/data_files/query_config.fmt 55 ${CMAKE_CURRENT_BINARY_DIR}/query_config.c 56 DEPENDS 57 ${CMAKE_CURRENT_SOURCE_DIR}/../../scripts/generate_query_config.pl 58 ${CMAKE_CURRENT_SOURCE_DIR}/../../include/mbedtls/mbedtls_config.h 59 ${CMAKE_CURRENT_SOURCE_DIR}/../../include/psa/crypto_config.h 60 ${CMAKE_CURRENT_SOURCE_DIR}/../../scripts/data_files/query_config.fmt 61 ) 62 # this file will also be used in another directory, so create a target, see 63 # https://gitlab.kitware.com/cmake/community/-/wikis/FAQ#how-can-i-add-a-dependency-to-a-source-file-which-is-generated-in-a-subdirectory 64 add_custom_target(generate_query_config_c 65 DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/query_config.c) 66 else() 67 link_to_source(query_config.c) 68 endif() 69 70 foreach(exe IN LISTS executables_libs executables_mbedcrypto) 71 set(source ${exe}.c) 72 set(extra_sources "") 73 if(NOT EXISTS ${source} AND 74 EXISTS ${MBEDTLS_FRAMEWORK_DIR}/tests/programs/${source}) 75 set(source ${MBEDTLS_FRAMEWORK_DIR}/tests/programs/${source}) 76 endif() 77 78 if(exe STREQUAL "query_compile_time_config") 79 list(APPEND extra_sources 80 ${MBEDTLS_FRAMEWORK_DIR}/tests/programs/query_config.h 81 ${CMAKE_CURRENT_BINARY_DIR}/query_config.c) 82 endif() 83 add_executable(${exe} ${source} $<TARGET_OBJECTS:mbedtls_test> 84 ${extra_sources}) 85 target_include_directories(${exe} PRIVATE ${MBEDTLS_FRAMEWORK_DIR}/tests/include) 86 target_include_directories(${exe} PRIVATE ${MBEDTLS_FRAMEWORK_DIR}/tests/programs) 87 target_include_directories(${exe} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../library) 88 if(exe STREQUAL "query_compile_time_config") 89 target_include_directories(${exe} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) 90 endif() 91 92 # Request C11, required for memory poisoning 93 set_target_properties(${exe} PROPERTIES C_STANDARD 11) 94 95 # This emulates "if ( ... IN_LIST ... )" which becomes available in CMake 3.3 96 list(FIND executables_libs ${exe} exe_index) 97 if (${exe_index} GREATER -1) 98 target_link_libraries(${exe} ${libs} ${CMAKE_THREAD_LIBS_INIT}) 99 else() 100 target_link_libraries(${exe} ${mbedcrypto_target} ${CMAKE_THREAD_LIBS_INIT}) 101 endif() 102 endforeach() 103 104 install(TARGETS ${executables_libs} ${executables_mbedcrypto} 105 DESTINATION "bin" 106 PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)