From 729da8bfac05b3f71cb2cbb9992aa505920fb5e6 Mon Sep 17 00:00:00 2001 From: Ray Molenkamp Date: Mon, 27 Jul 2020 10:55:34 -0600 Subject: CTest: Fix blender_test not working on windows. MSVC does need the wholearchive flag but it was not set, so no tests were actually linked into the binary. Reviewed By: sybren Differential Revision: https://developer.blender.org/D8404 --- tests/gtests/runner/CMakeLists.txt | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'tests') diff --git a/tests/gtests/runner/CMakeLists.txt b/tests/gtests/runner/CMakeLists.txt index 4da0bce09a4..8f9bc225678 100644 --- a/tests/gtests/runner/CMakeLists.txt +++ b/tests/gtests/runner/CMakeLists.txt @@ -36,7 +36,7 @@ endif() # directly referenced from other code. get_property(_test_libs GLOBAL PROPERTY BLENDER_TEST_LIBS) if(WIN32) - list(APPEND TEST_LIBS ${_test_libs}) + # Win32 is set using target_link_options after target creation. elseif(APPLE) list(APPEND TEST_LIBS "-Wl,-force_load" ${_test_libs}) elseif(UNIX) @@ -44,7 +44,6 @@ elseif(UNIX) 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,6 +55,18 @@ 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:$) + 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 @@ -66,7 +77,9 @@ set(_GOOGLETEST_DISCOVER_TESTS_SCRIPT ) gtest_discover_tests(blender_test - # So that unit tests know where to find files: +# So that the binary can find its shared libs on window. + WORKING_DIRECTORY "$" +# So that unit tests know where to find files: EXTRA_ARGS --test-assets-dir "${CMAKE_SOURCE_DIR}/../lib/tests" --test-release-dir "$/${BLENDER_VERSION}" -- cgit v1.2.3