aboutsummaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorambrosin <ambrosin@google.com>2022-02-03 00:54:16 -0800
committerCopybara-Service <copybara-worker@google.com>2022-02-03 00:54:59 -0800
commitf73835dbc64e4724a4ae07a0335aea58bb9f72c3 (patch)
treedc41c61d521c53b5b182237bf9c111daeeeec1f0 /cmake
parent573ca7917f00d28f3709fd89a9f4d6d1fb3b5719 (diff)
downloadtink-f73835dbc64e4724a4ae07a0335aea58bb9f72c3.tar.gz
Add option to link against installed GTest.
Add a macro to create interface targets. PiperOrigin-RevId: 426077117
Diffstat (limited to 'cmake')
-rw-r--r--cmake/TinkWorkspace.cmake35
1 files changed, 27 insertions, 8 deletions
diff --git a/cmake/TinkWorkspace.cmake b/cmake/TinkWorkspace.cmake
index e3256317e..58ae827ce 100644
--- a/cmake/TinkWorkspace.cmake
+++ b/cmake/TinkWorkspace.cmake
@@ -36,13 +36,34 @@
include(HttpArchive)
include(TinkUtil)
+# Creates an interface target from an imported one.
+#
+# Parameters:
+# INTERFACE_TARGET Name of the interface target.
+# IMPORTED_TARGET Name of the imported target (e.g., with find_package).
+#
+macro(_create_interface_target INTERFACE_TARGET IMPORTED_TARGET)
+ add_library(${INTERFACE_TARGET} INTERFACE)
+ target_link_libraries(${INTERFACE_TARGET} INTERFACE ${IMPORTED_TARGET})
+ target_include_directories(${INTERFACE_TARGET} INTERFACE ${IMPORTED_TARGET})
+endmacro()
+
set(gtest_force_shared_crt ON CACHE BOOL "Tink dependency override" FORCE)
-http_archive(
- NAME com_google_googletest
- URL https://github.com/google/googletest/archive/eb9225ce361affe561592e0912320b9db84985d0.zip
- SHA256 a7db7d1295ce46b93f3d1a90dbbc55a48409c00d19684fcd87823037add88118
-)
+if (NOT TINK_USE_INSTALLED_GOOGLETEST)
+ http_archive(
+ NAME com_google_googletest
+ URL https://github.com/google/googletest/archive/eb9225ce361affe561592e0912320b9db84985d0.zip
+ SHA256 a7db7d1295ce46b93f3d1a90dbbc55a48409c00d19684fcd87823037add88118
+ )
+else()
+ # This uses the CMake's FindGTest module; if successful, this call to
+ # find_package generates the targets GTest::gmock, GTest::gtest and
+ # GTest::gtest_main.
+ find_package(GTest CONFIG REQUIRED)
+ _create_interface_target(gmock GTest::gmock)
+ _create_interface_target(gtest_main GTest::gtest_main)
+endif()
if (NOT TINK_USE_INSTALLED_ABSEIL)
# Commit from 2021-12-03
@@ -79,11 +100,9 @@ if (NOT TINK_USE_SYSTEM_OPENSSL)
# BoringSSL targets do not carry include directory info, this fixes it.
target_include_directories(crypto PUBLIC "${boringssl_SOURCE_DIR}/src/include")
else()
- add_library(crypto INTERFACE)
# Support for ED25519 was added from 1.1.1.
find_package(OpenSSL 1.1.1 REQUIRED)
- target_link_libraries(crypto INTERFACE OpenSSL::Crypto)
- target_include_directories(crypto INTERFACE OpenSSL::Crypto)
+ _create_interface_target(crypto OpenSSL::Crypto)
endif()
set(RAPIDJSON_BUILD_DOC OFF CACHE BOOL "Tink dependency override" FORCE)