diff options
Diffstat (limited to 'tests/gtests/runner/CMakeLists.txt')
-rw-r--r-- | tests/gtests/runner/CMakeLists.txt | 47 |
1 files changed, 38 insertions, 9 deletions
diff --git a/tests/gtests/runner/CMakeLists.txt b/tests/gtests/runner/CMakeLists.txt index 18d8f57364f..8b3390e7aec 100644 --- a/tests/gtests/runner/CMakeLists.txt +++ b/tests/gtests/runner/CMakeLists.txt @@ -35,16 +35,13 @@ endif() # Test libraries need to be linked "whole archive", because they're not # directly referenced from other code. get_property(_test_libs GLOBAL PROPERTY BLENDER_TEST_LIBS) -if(WIN32) - list(APPEND TEST_LIBS ${_test_libs}) -elseif(APPLE) - list(APPEND TEST_LIBS "-Wl,-force_load" ${_test_libs}) +if(WIN32 OR APPLE) + # Windows and macOS set target_link_options after target creation. elseif(UNIX) list(APPEND TEST_LIBS "-Wl,--whole-archive" ${_test_libs} "-Wl,--no-whole-archive") else() message(FATAL_ERROR "Unknown how to link whole-archive with your compiler ${CMAKE_CXX_COMPILER_ID}") endif() -unset(_test_libs) # This builds `bin/tests/blender_test`, but does not add it as a single test. setup_libdirs() @@ -56,18 +53,50 @@ BLENDER_SRC_GTEST_EX( ) setup_liblinks(blender_test) +if(WIN32) + foreach(_lib ${_test_libs}) + # Both target_link_libraries and target_link_options are required here + # target_link_libraries will add any dependend libraries, while just setting + # the wholearchive flag in target link options will not. + target_link_libraries(blender_test ${_lib}) + target_link_options(blender_test PRIVATE /wholearchive:$<TARGET_FILE:${_lib}>) + endforeach() +elseif(APPLE) + foreach(_lib ${_test_libs}) + # We need -force_load for every test library and target_link_libraries will + # deduplicate it. So explicitly set as linker option for every test lib. + target_link_libraries(blender_test ${_lib}) + target_link_options(blender_test PRIVATE "LINKER:-force_load,$<TARGET_FILE:${_lib}>") + endforeach() +endif() + +unset(_test_libs) + # This runs the blender_test executable with `--gtest_list_tests`, then # exposes those tests individually to the ctest runner. # See https://cmake.org/cmake/help/v3.18/module/GoogleTest.html -include(GoogleTest) +# +# We have our own modified copy of this CMake module. +include(GTest) set(_GOOGLETEST_DISCOVER_TESTS_SCRIPT - ${CMAKE_CURRENT_LIST_DIR}/BlenderAddTests.cmake + ${CMAKE_SOURCE_DIR}/build_files/cmake/Modules/GTestAddTests.cmake ) +if(APPLE) + set(_test_release_dir ${TEST_INSTALL_DIR}/Blender.app/Contents/Resources/${BLENDER_VERSION}) +else() + set(_test_release_dir ${TEST_INSTALL_DIR}/${BLENDER_VERSION}) +endif() + gtest_discover_tests(blender_test - # So that unit tests know where to find files: + WORKING_DIRECTORY "${TEST_INSTALL_DIR}" +# So that it will run after the install phase that will copy the required libraries + DISCOVERY_MODE PRE_TEST +# So that unit tests know where to find files: EXTRA_ARGS --test-assets-dir "${CMAKE_SOURCE_DIR}/../lib/tests" - --test-release-dir "${CMAKE_INSTALL_PREFIX}/${BLENDER_VERSION}" + --test-release-dir "${_test_release_dir}" ) + +unset(_test_release_dir) |