62 lines
2.4 KiB
CMake
Raw Normal View History

2025-01-30 16:41:19 +00:00
project(connection)
set(${PROJECT_NAME}_src
src/DataConnection.cppm
src/MSQuicConnection.cppm
src/MSQuicServer.cppm
src/MSQuicGlobal.cppm
src/MSQuicError.cppm)
# this is the "object library" target: compiles the sources only once
add_library(${PROJECT_NAME}_lib STATIC ${${PROJECT_NAME}_src})
target_include_directories(${PROJECT_NAME}_lib PUBLIC ./src)
find_package(msquic CONFIG REQUIRED)
target_link_libraries(${PROJECT_NAME}_lib PRIVATE msquic)
target_link_libraries(${PROJECT_NAME}_lib PUBLIC logging_lib)
if(WIN32)
target_link_libraries(${PROJECT_NAME}_lib PUBLIC ntdll)
endif()
# Setup tests
enable_testing()
find_package(GTest CONFIG REQUIRED)
include(GoogleTest)
file(GLOB_RECURSE tests_${PROJECT_NAME}_src CONFIGURE_DEPENDS tests/*.cppm tests/*/*.cppm)
add_executable(tests_${PROJECT_NAME} ${tests_${PROJECT_NAME}_src}
tests/sanitizers.cpp)
target_link_libraries(tests_${PROJECT_NAME} PRIVATE GTest::gtest GTest::gtest_main GTest::gmock GTest::gmock_main ${PROJECT_NAME}_lib)
add_test(AllTestsIn${PROJECT_NAME} tests_${PROJECT_NAME})
gtest_discover_tests(tests_${PROJECT_NAME})
find_program(OPENSSL_EXECUTABLE openssl)
set(OPENSSL_EXECUTABLE_CFG "" CACHE FILEPATH "Path to openssl.cnf")
if (NOT OPENSSL_EXECUTABLE)
find_package(OpenSSL REQUIRED)
message(STATUS "OpenSSL found: ${OPENSSL_FOUND} ${OPENSSL_VERSION} ${OPENSSL_INCLUDE_DIR} ${OPENSSL_LIBRARIES}")
set(OPENSSL_EXECUTABLE ${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/tools/openssl/openssl)
endif ()
if (NOT OPENSSL_EXECUTABLE)
message(FATAL_ERROR "OpenSSL not found")
endif ()
if (OPENSSL_EXECUTABLE MATCHES ^${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/tools/openssl/openssl)
set(OPENSSL_EXECUTABLE_CFG ${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/tools/openssl/openssl.cnf)
endif ()
add_custom_command(TARGET tests_${PROJECT_NAME} POST_BUILD
COMMAND "${OPENSSL_EXECUTABLE}" req -new -newkey rsa:2048 -days 1 -nodes -x509 -keyout key.pem -out cert.pem -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" $<$<BOOL:${OPENSSL_EXECUTABLE_CFG}>:-config> $<$<BOOL:${OPENSSL_EXECUTABLE_CFG}>:${OPENSSL_EXECUTABLE_CFG}>
WORKING_DIRECTORY ${WORKING_DIRECTORY}
BYPRODUCTS ${WORKING_DIRECTORY}/key.pem ${WORKING_DIRECTORY}/cert.pem
COMMENT "Generating self-signed certificate using ${OPENSSL_EXECUTABLE} ${OPENSSL_EXECUTABLE_CFG}"
VERBATIM
COMMAND_EXPAND_LISTS
)