Skip to content

Commit 53dd125

Browse files
committed
cmake: build googletest
1 parent 2b46374 commit 53dd125

File tree

2 files changed

+140
-0
lines changed

2 files changed

+140
-0
lines changed

cmake/dependencies/CMakeLists.txt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,26 @@ if(BUILD_pybind11)
3232
list(POP_BACK CMAKE_MESSAGE_INDENT)
3333
message(CHECK_PASS "fetched")
3434
endif()
35+
36+
###############
37+
## TESTING ##
38+
###############
39+
if(BUILD_googletest)
40+
message(CHECK_START "Fetching googletest")
41+
list(APPEND CMAKE_MESSAGE_INDENT " ")
42+
FetchContent_Declare(
43+
googletest
44+
GIT_REPOSITORY https://github.com/google/googletest.git
45+
GIT_TAG v1.17.0
46+
GIT_SHALLOW TRUE
47+
UPDATE_COMMAND git reset --hard
48+
PATCH_COMMAND git apply --ignore-whitespace
49+
"${CMAKE_CURRENT_LIST_DIR}/../../patches/googletest-v1.17.0.patch"
50+
)
51+
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
52+
set(GTEST_HAS_ABSL ON)
53+
set(INSTALL_GTEST OFF)
54+
FetchContent_MakeAvailable(googletest)
55+
list(POP_BACK CMAKE_MESSAGE_INDENT)
56+
message(CHECK_PASS "fetched")
57+
endif()

patches/googletest-v1.17.0.patch

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
diff --git a/googlemock/include/gmock/internal/gmock-port.h b/googlemock/include/gmock/internal/gmock-port.h
2+
index e9d9e32..ca55646 100644
3+
--- a/googlemock/include/gmock/internal/gmock-port.h
4+
+++ b/googlemock/include/gmock/internal/gmock-port.h
5+
@@ -85,11 +85,11 @@
6+
7+
// Macros for declaring flags.
8+
#define GMOCK_DECLARE_bool_(name) \
9+
- ABSL_DECLARE_FLAG(bool, GMOCK_FLAG_NAME_(name))
10+
+ GTEST_API_ ABSL_DECLARE_FLAG(bool, GMOCK_FLAG_NAME_(name))
11+
#define GMOCK_DECLARE_int32_(name) \
12+
- ABSL_DECLARE_FLAG(int32_t, GMOCK_FLAG_NAME_(name))
13+
+ GTEST_API_ ABSL_DECLARE_FLAG(int32_t, GMOCK_FLAG_NAME_(name))
14+
#define GMOCK_DECLARE_string_(name) \
15+
- ABSL_DECLARE_FLAG(std::string, GMOCK_FLAG_NAME_(name))
16+
+ GTEST_API_ ABSL_DECLARE_FLAG(std::string, GMOCK_FLAG_NAME_(name))
17+
18+
#define GMOCK_FLAG_GET(name) ::absl::GetFlag(GMOCK_FLAG(name))
19+
#define GMOCK_FLAG_SET(name, value) \
20+
diff --git a/googletest/cmake/internal_utils.cmake b/googletest/cmake/internal_utils.cmake
21+
index 580ac1c..b338398 100644
22+
--- a/googletest/cmake/internal_utils.cmake
23+
+++ b/googletest/cmake/internal_utils.cmake
24+
@@ -11,6 +11,7 @@
25+
# - The functions/macros defined in this file may depend on Google
26+
# Test and Google Mock's option() definitions, and thus must be
27+
# called *after* the options have been defined.
28+
+include(GNUInstallDirs)
29+
30+
# Tweaks CMake's default compiler/linker settings to suit Google Test's needs.
31+
#
32+
@@ -170,11 +171,11 @@ function(cxx_library_with_type name type cxx_flags)
33+
# Set the output directory for build artifacts.
34+
set_target_properties(${name}
35+
PROPERTIES
36+
- RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
37+
- LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
38+
- ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
39+
- PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
40+
- COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
41+
+ RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}"
42+
+ LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}"
43+
+ ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}"
44+
+ PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}"
45+
+ COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}")
46+
# Make PDBs match library name.
47+
get_target_property(pdb_debug_postfix ${name} DEBUG_POSTFIX)
48+
set_target_properties(${name}
49+
@@ -185,11 +186,19 @@ function(cxx_library_with_type name type cxx_flags)
50+
COMPILE_PDB_NAME_DEBUG "${name}${pdb_debug_postfix}")
51+
52+
if (BUILD_SHARED_LIBS OR type STREQUAL "SHARED")
53+
- set_target_properties(${name}
54+
- PROPERTIES
55+
- COMPILE_DEFINITIONS "GTEST_CREATE_SHARED_LIBRARY=1")
56+
+ target_compile_definitions(${name} PRIVATE
57+
+ "GTEST_CREATE_SHARED_LIBRARY=1")
58+
target_compile_definitions(${name} INTERFACE
59+
- $<INSTALL_INTERFACE:GTEST_LINKED_AS_SHARED_LIBRARY=1>)
60+
+ $<BUILD_INTERFACE:GTEST_LINKED_AS_SHARED_LIBRARY=1>
61+
+ $<INSTALL_INTERFACE:GTEST_LINKED_AS_SHARED_LIBRARY=1>
62+
+ )
63+
+ if(APPLE)
64+
+ set_target_properties(${name} PROPERTIES
65+
+ INSTALL_RPATH "@loader_path")
66+
+ elseif(UNIX)
67+
+ set_target_properties(${name} PROPERTIES
68+
+ INSTALL_RPATH "$ORIGIN")
69+
+ endif()
70+
endif()
71+
if (DEFINED GTEST_HAS_PTHREAD)
72+
target_link_libraries(${name} PUBLIC Threads::Threads)
73+
@@ -226,9 +235,8 @@ function(cxx_executable_with_flags name cxx_flags libs)
74+
COMPILE_FLAGS "${cxx_flags}")
75+
endif()
76+
if (BUILD_SHARED_LIBS)
77+
- set_target_properties(${name}
78+
- PROPERTIES
79+
- COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1")
80+
+ target_compile_definitions(${name} PRIVATE
81+
+ "GTEST_LINKED_AS_SHARED_LIBRARY=1")
82+
endif()
83+
# To support mixing linking in static and dynamic libraries, link each
84+
# library in with an extra call to target_link_libraries.
85+
diff --git a/googletest/include/gtest/internal/gtest-port.h b/googletest/include/gtest/internal/gtest-port.h
86+
index 8d27c2c..890c953 100644
87+
--- a/googletest/include/gtest/internal/gtest-port.h
88+
+++ b/googletest/include/gtest/internal/gtest-port.h
89+
@@ -867,10 +867,10 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION;
90+
#ifndef GTEST_API_
91+
92+
#ifdef _MSC_VER
93+
-#if defined(GTEST_LINKED_AS_SHARED_LIBRARY) && GTEST_LINKED_AS_SHARED_LIBRARY
94+
-#define GTEST_API_ __declspec(dllimport)
95+
-#elif defined(GTEST_CREATE_SHARED_LIBRARY) && GTEST_CREATE_SHARED_LIBRARY
96+
+#if defined(GTEST_CREATE_SHARED_LIBRARY) && GTEST_CREATE_SHARED_LIBRARY
97+
#define GTEST_API_ __declspec(dllexport)
98+
+#elif defined(GTEST_LINKED_AS_SHARED_LIBRARY) && GTEST_LINKED_AS_SHARED_LIBRARY
99+
+#define GTEST_API_ __declspec(dllimport)
100+
#endif
101+
#elif GTEST_HAVE_ATTRIBUTE_(visibility)
102+
#define GTEST_API_ __attribute__((visibility("default")))
103+
@@ -2287,11 +2287,11 @@ using TimeInMillis = int64_t; // Represents time in milliseconds.
104+
105+
// Macros for declaring flags.
106+
#define GTEST_DECLARE_bool_(name) \
107+
- ABSL_DECLARE_FLAG(bool, GTEST_FLAG_NAME_(name))
108+
+ GTEST_API_ ABSL_DECLARE_FLAG(bool, GTEST_FLAG_NAME_(name))
109+
#define GTEST_DECLARE_int32_(name) \
110+
- ABSL_DECLARE_FLAG(int32_t, GTEST_FLAG_NAME_(name))
111+
+ GTEST_API_ ABSL_DECLARE_FLAG(int32_t, GTEST_FLAG_NAME_(name))
112+
#define GTEST_DECLARE_string_(name) \
113+
- ABSL_DECLARE_FLAG(std::string, GTEST_FLAG_NAME_(name))
114+
+ GTEST_API_ ABSL_DECLARE_FLAG(std::string, GTEST_FLAG_NAME_(name))
115+
116+
#define GTEST_FLAG_SAVER_ ::absl::FlagSaver
117+

0 commit comments

Comments
 (0)