include(FetchContent) if(${CMAKE_VERSION} VERSION_LESS "3.24.0") FetchContent_Declare( googletest URL https://github.com/google/googletest/archive/41fe6be7d738237d1ca53070bd6ddebb73190b58.zip ) else() FetchContent_Declare( googletest URL https://github.com/google/googletest/archive/41fe6be7d738237d1ca53070bd6ddebb73190b58.zip FIND_PACKAGE_ARGS NAMES GTest DOWNLOAD_EXTRACT_TIMESTAMP = TRUE ) endif() # For Windows: Prevent overriding the parent project's compiler/linker settings set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) FetchContent_MakeAvailable(googletest) enable_testing() # Find all the binary files used for testing and copy them into the build # directory. This allows the test to be run from the build directory # First, create an elf_examples folder under the current build directory file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/elf_examples) # Second, glob all files under elf_examples file(GLOB elf_examples LIST_DIRECTORIES false CONFIGURE_DEPENDS elf_examples/*) # Third, copy each file globbed to the elf_examples folder under the current # build directory foreach(example ${elf_examples}) configure_file(${example} ${CMAKE_CURRENT_BINARY_DIR}/elf_examples COPYONLY) endforeach() # Lastly, copy the script to run the tests configure_file(runELFtests ${CMAKE_CURRENT_BINARY_DIR}/runELFtests COPYONLY) add_executable( ELFIOTest ELFIOTest.cpp ELFIOTest1.cpp ELFIOTest2.cpp) target_link_libraries( ELFIOTest PRIVATE elfio::elfio gtest_main GTest::gtest_main) add_test( NAME ELFIOTest COMMAND ${CMAKE_CURRENT_BINARY_DIR}/ELFIOTest WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") add_executable( elfio_fuzzer elfio_fuzzer.cpp) target_link_libraries( elfio_fuzzer PRIVATE elfio::elfio) target_compile_options(elfio_fuzzer PRIVATE $<$:-g -O1 -fsanitize=fuzzer,address> ) target_link_libraries(elfio_fuzzer PRIVATE $<$:-fsanitize=fuzzer,address> ) endif() add_dependencies(check ELFIOTest) include(GoogleTest) gtest_discover_tests(ELFIOTest)