92 lines
2.2 KiB
CMake
92 lines
2.2 KiB
CMake
cmake_minimum_required(VERSION 3.15)
|
|
|
|
#
|
|
# Project details
|
|
#
|
|
|
|
project(
|
|
${CMAKE_PROJECT_NAME}Tests
|
|
LANGUAGES CXX C
|
|
)
|
|
|
|
verbose_message("Adding tests under ${CMAKE_PROJECT_NAME}Tests...")
|
|
|
|
foreach(file ${test_sources})
|
|
string(REGEX REPLACE "(.*/)([a-zA-Z0-9_ ]+)(\.cpp|\.c)" "\\2" test_name ${file})
|
|
add_executable(${test_name}_Tests ${file})
|
|
|
|
|
|
#
|
|
# Set the compiler standard
|
|
#
|
|
|
|
target_compile_features(${test_name}_Tests PUBLIC cxx_std_17)
|
|
target_include_directories(${test_name}_Tests PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../include)
|
|
|
|
#
|
|
# Setup code coverage if enabled
|
|
#
|
|
|
|
if (${CMAKE_PROJECT_NAME}_ENABLE_CODE_COVERAGE)
|
|
target_compile_options(${CMAKE_PROJECT_NAME} PUBLIC -O0 -g -fprofile-arcs -ftest-coverage)
|
|
target_link_options(${CMAKE_PROJECT_NAME} PUBLIC -fprofile-arcs -ftest-coverage)
|
|
verbose_message("Code coverage is enabled and provided with GCC.")
|
|
endif()
|
|
|
|
#
|
|
# Load the desired unit testing framework
|
|
#
|
|
# Currently supported: GoogleTest (and GoogleMock), Catch2.
|
|
|
|
if(${CMAKE_PROJECT_NAME}_BUILD_EXECUTABLE)
|
|
set(${CMAKE_PROJECT_NAME}_TEST_LIB ${CMAKE_PROJECT_NAME}_LIB)
|
|
else()
|
|
set(${CMAKE_PROJECT_NAME}_TEST_LIB ${CMAKE_PROJECT_NAME})
|
|
endif()
|
|
|
|
if(${CMAKE_PROJECT_NAME}_USE_GTEST)
|
|
find_package(GTest REQUIRED)
|
|
|
|
if(${CMAKE_PROJECT_NAME}_USE_GOOGLE_MOCK)
|
|
set(GOOGLE_MOCK_LIBRARIES GTest::gmock GTest::gmock_main)
|
|
endif()
|
|
|
|
target_link_libraries(
|
|
${test_name}_Tests
|
|
PUBLIC
|
|
GTest::GTest
|
|
GTest::Main
|
|
${GOOGLE_MOCK_LIBRARIES}
|
|
${${CMAKE_PROJECT_NAME}_TEST_LIB}
|
|
)
|
|
elseif(${CMAKE_PROJECT_NAME}_USE_CATCH2)
|
|
find_package(Catch2 REQUIRED)
|
|
target_link_libraries(
|
|
${test_name}_Tests
|
|
PUBLIC
|
|
Catch2::Catch2WithMain
|
|
${${CMAKE_PROJECT_NAME}_TEST_LIB}
|
|
)
|
|
else()
|
|
target_link_libraries(
|
|
${test_name}_Tests
|
|
PUBLIC
|
|
${${CMAKE_PROJECT_NAME}_TEST_LIB} vmlib ${LIBBPF_LIBRARIES} -lelf -lz
|
|
)
|
|
message("Unknown testing library. Please setup your desired unit testing library by using `target_link_libraries`.")
|
|
endif()
|
|
|
|
#
|
|
# Add the unit tests
|
|
#
|
|
|
|
add_test(
|
|
NAME
|
|
${test_name}
|
|
COMMAND
|
|
${test_name}_Tests
|
|
)
|
|
endforeach()
|
|
|
|
verbose_message("Finished adding unit tests for ${CMAKE_PROJECT_NAME}.")
|