CMake: use gtest and gmock targets

Bug: b/145758253
Bug: b/152606052
Change-Id: I826225ed393ed324301555ebaea14947997632cf
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/43289
Reviewed-by: Ben Clayton <bclayton@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Tested-by: Antonio Maiorano <amaiorano@google.com>
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f309bbc..bd9c5b2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -615,6 +615,18 @@
 endif()
 
 ###########################################################
+# gtest and gmock
+###########################################################
+if(SWIFTSHADER_BUILD_TESTS)
+    # For Win32, force gtest to match our CRT (shared)
+    set(gtest_force_shared_crt TRUE CACHE BOOL "" FORCE)
+    add_subdirectory(third_party/googletest EXCLUDE_FROM_ALL)
+    # gtest finds python, which picks python 2 first, if present.
+    # We need to undo this so that SPIR-V can later find python3.
+    unset(PYTHON_EXECUTABLE CACHE)
+endif()
+
+###########################################################
 # Include Directories
 ###########################################################
 
@@ -984,7 +996,7 @@
         # This variable is also used by SPIRV-Tools to locate SPIRV-Headers
         set(SPIRV-Headers_SOURCE_DIR "${THIRD_PARTY_DIR}/SPIRV-Headers")
         list(APPEND VULKAN_INCLUDE_DIR "${SPIRV-Headers_SOURCE_DIR}/include")
-
+        set(SPIRV_SKIP_TESTS TRUE CACHE BOOL "" FORCE)
         add_subdirectory(third_party/SPIRV-Tools)
 
         set_target_properties(core_tables PROPERTIES FOLDER "SPIRV-Tools build")
@@ -1097,33 +1109,22 @@
 if(SWIFTSHADER_BUILD_TESTS)
     set(REACTOR_UNIT_TESTS_LIST
         ${SOURCE_DIR}/Reactor/ReactorUnitTests.cpp
-        ${THIRD_PARTY_DIR}/googletest/googletest/src/gtest-all.cc
-    )
-
-    set(REACTOR_UNIT_TESTS_INCLUDE_DIR
-        ${THIRD_PARTY_DIR}/googletest/googletest/include
-        ${THIRD_PARTY_DIR}/googletest/googletest/
     )
 
     add_executable(ReactorUnitTests ${REACTOR_UNIT_TESTS_LIST})
     set_target_properties(ReactorUnitTests PROPERTIES
-        INCLUDE_DIRECTORIES "${REACTOR_UNIT_TESTS_INCLUDE_DIR}"
         COMPILE_OPTIONS "${SWIFTSHADER_COMPILE_OPTIONS};${WARNINGS_AS_ERRORS}"
         LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
         FOLDER "Tests"
     )
-    target_link_libraries(ReactorUnitTests ${Reactor} ${OS_LIBS})
+    target_link_libraries(ReactorUnitTests ${Reactor} ${OS_LIBS} gtest)
 
     set(GLES_UNITTESTS_LIST
         ${TESTS_DIR}/GLESUnitTests/main.cpp
         ${TESTS_DIR}/GLESUnitTests/unittests.cpp
-        ${THIRD_PARTY_DIR}/googletest/googletest/src/gtest-all.cc
     )
 
     set(GLES_UNITTESTS_INCLUDE_DIR
-        ${THIRD_PARTY_DIR}/googletest/googletest/include/
-        ${THIRD_PARTY_DIR}/googletest/googlemock/include/
-        ${THIRD_PARTY_DIR}/googletest/googletest/
         ${CMAKE_CURRENT_SOURCE_DIR}/include/
     )
 
@@ -1136,7 +1137,7 @@
         LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
     )
 
-    target_link_libraries(gles-unittests libEGL libGLESv2 ${OS_LIBS} ${SWIFTSHADER_LIBS})
+    target_link_libraries(gles-unittests libEGL libGLESv2 ${OS_LIBS} ${SWIFTSHADER_LIBS} gtest gmock)
     if(ANDROID)
         target_link_libraries(gles-unittests -landroid)
     endif()
@@ -1145,13 +1146,9 @@
     set(MATH_UNITTESTS_LIST
         ${TESTS_DIR}/MathUnitTests/main.cpp
         ${TESTS_DIR}/MathUnitTests/unittests.cpp
-        ${THIRD_PARTY_DIR}/googletest/googletest/src/gtest-all.cc
     )
 
     set(MATH_UNITTESTS_INCLUDE_DIR
-        ${THIRD_PARTY_DIR}/googletest/googletest/include/
-        ${THIRD_PARTY_DIR}/googletest/googlemock/include/
-        ${THIRD_PARTY_DIR}/googletest/googletest/
         ${CMAKE_CURRENT_SOURCE_DIR}/src/
     )
 
@@ -1163,6 +1160,7 @@
         LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
     )
 
+    target_link_libraries(math-unittests gtest gmock)
     if(NOT WIN32)
         target_link_libraries(math-unittests pthread ${SWIFTSHADER_LIBS})
     endif()
@@ -1194,13 +1192,9 @@
         ${TESTS_DIR}/VulkanUnitTests/Driver.cpp
         ${TESTS_DIR}/VulkanUnitTests/main.cpp
         ${TESTS_DIR}/VulkanUnitTests/unittests.cpp
-        ${THIRD_PARTY_DIR}/googletest/googletest/src/gtest-all.cc
     )
 
     set(VK_UNITTESTS_INCLUDE_DIR
-        ${THIRD_PARTY_DIR}/googletest/googletest/include/
-        ${THIRD_PARTY_DIR}/googletest/googlemock/include/
-        ${THIRD_PARTY_DIR}/googletest/googletest/
         ${THIRD_PARTY_DIR}/SPIRV-Tools/include
         ${CMAKE_CURRENT_SOURCE_DIR}/include/
     )
@@ -1216,7 +1210,7 @@
         LINK_FLAGS "${SWIFTSHADER_LINK_FLAGS}"
     )
 
-    target_link_libraries(vk-unittests ${OS_LIBS} SPIRV-Tools ${SWIFTSHADER_LIBS})
+    target_link_libraries(vk-unittests SPIRV-Tools ${OS_LIBS} ${SWIFTSHADER_LIBS} gtest gmock)
 endif(SWIFTSHADER_BUILD_TESTS AND SWIFTSHADER_BUILD_VULKAN)
 
 if(HAVE_PVR_SUBMODULE AND SWIFTSHADER_BUILD_PVR)