Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'tests/gtests/runner/CMakeLists.txt')
-rw-r--r--tests/gtests/runner/CMakeLists.txt47
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)