Skip to content

Commit 0be6ecb

Browse files
ferdymercurydpiparo
authored andcommitted
[gtest] use proper CMake target and move builtin-build to subdir
1 parent ede4e83 commit 0be6ecb

3 files changed

Lines changed: 119 additions & 115 deletions

File tree

.github/workflows/root-ci-config/buildconfig/alma10-clang_ninja.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ builtin_freetype=ON
66
builtin_ftgl=ON
77
builtin_gif=ON
88
builtin_gl2ps=ON
9+
builtin_googletest=ON
910
builtin_gsl=ON
1011
builtin_jpeg=ON
1112
builtin_lz4=ON

builtins/gtest/CMakeLists.txt

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
# Add googletest
2+
# http://stackoverflow.com/questions/9689183/cmake-googletest
3+
4+
set(_gtest_byproduct_binary_dir
5+
${CMAKE_CURRENT_BINARY_DIR}/googletest-prefix/src/googletest-build)
6+
set(_gtest_byproducts
7+
${_gtest_byproduct_binary_dir}/lib/libgtest.a
8+
${_gtest_byproduct_binary_dir}/lib/libgtest_main.a
9+
${_gtest_byproduct_binary_dir}/lib/libgmock.a
10+
${_gtest_byproduct_binary_dir}/lib/libgmock_main.a
11+
)
12+
13+
set(GTEST_CXX_FLAGS "${ROOT_EXTERNAL_CXX_FLAGS}")
14+
if(MSVC)
15+
if(winrtdebug)
16+
set(GTEST_BUILD_TYPE Debug)
17+
else()
18+
set(GTEST_BUILD_TYPE Release)
19+
endif()
20+
set(_gtest_byproducts
21+
${_gtest_byproduct_binary_dir}/lib/gtest.lib
22+
${_gtest_byproduct_binary_dir}/lib/gtest_main.lib
23+
${_gtest_byproduct_binary_dir}/lib/gmock.lib
24+
${_gtest_byproduct_binary_dir}/lib/gmock_main.lib
25+
)
26+
if(CMAKE_GENERATOR MATCHES Ninja)
27+
set(GTEST_BUILD_COMMAND "BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR>")
28+
else()
29+
set(GTEST_BUILD_COMMAND "BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config ${GTEST_BUILD_TYPE}")
30+
endif()
31+
if(asan)
32+
if(NOT winrtdebug)
33+
set(gtestbuild "RelWithDebInfo")
34+
endif()
35+
set(GTEST_CXX_FLAGS "${ROOT_EXTERNAL_CXX_FLAGS} ${ASAN_EXTRA_CXX_FLAGS}")
36+
endif()
37+
set(EXTRA_GTEST_OPTS
38+
-DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}
39+
-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG:PATH=${_gtest_byproduct_binary_dir}/lib/
40+
-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_MINSIZEREL:PATH=${_gtest_byproduct_binary_dir}/lib/
41+
-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=${_gtest_byproduct_binary_dir}/lib/
42+
-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO:PATH=${_gtest_byproduct_binary_dir}/lib/
43+
-Dgtest_force_shared_crt=ON
44+
${GTEST_BUILD_COMMAND})
45+
else()
46+
set(GTEST_BUILD_TYPE Release)
47+
endif()
48+
if(APPLE)
49+
set(EXTRA_GTEST_OPTS
50+
-DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT})
51+
endif()
52+
53+
set(ROOT_GOOGLETEST_VERSION 1.17.0) # https://github.com/google/googletest/releases/tag/v1.17.0 Date: Apr 30, 2025
54+
set(ROOT_GOOGLETEST_HASH "65fab701d9829d38cb77c14acdc431d2108bfdbf8979e40eb8ae567edf10b27c")
55+
ExternalProject_Add(
56+
googletest
57+
# GIT_REPOSITORY https://github.com/google/googletest.git
58+
# GIT_SHALLOW 1
59+
# GIT_TAG v1.17.0
60+
URL ${lcgpackages}/googletest-${ROOT_GOOGLETEST_VERSION}.tar.gz
61+
URL_HASH SHA256=${ROOT_GOOGLETEST_HASH}
62+
INSTALL_DIR ${CMAKE_BINARY_DIR}/builtins/gtest
63+
UPDATE_COMMAND ""
64+
# # Force separate output paths for debug and release builds to allow easy
65+
# # identification of correct lib in subsequent TARGET_LINK_LIBRARIES commands
66+
# CMAKE_ARGS -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG:PATH=DebugLibs
67+
# -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=ReleaseLibs
68+
# -Dgtest_force_shared_crt=ON
69+
CMAKE_ARGS -G ${CMAKE_GENERATOR}
70+
-DCMAKE_BUILD_TYPE=${GTEST_BUILD_TYPE}
71+
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
72+
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
73+
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
74+
-DCMAKE_CXX_FLAGS=${GTEST_CXX_FLAGS}
75+
-DCMAKE_AR=${CMAKE_AR}
76+
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
77+
${EXTRA_GTEST_OPTS}
78+
# Disable install step
79+
INSTALL_COMMAND ""
80+
BUILD_BYPRODUCTS ${_gtest_byproducts}
81+
# Wrap download, configure and build steps in a script to log output
82+
LOG_DOWNLOAD ON LOG_CONFIGURE ON LOG_BUILD ON LOG_OUTPUT_ON_FAILURE ON
83+
TIMEOUT 600
84+
)
85+
86+
# Specify include dirs for gtest and gmock
87+
ExternalProject_Get_Property(googletest source_dir)
88+
set(GTEST_INCLUDE_DIR ${source_dir}/googletest/include)
89+
set(GMOCK_INCLUDE_DIR ${source_dir}/googlemock/include)
90+
# Create the directories. Prevents bug https://gitlab.kitware.com/cmake/cmake/issues/15052
91+
file(MAKE_DIRECTORY ${GTEST_INCLUDE_DIR} ${GMOCK_INCLUDE_DIR})
92+
93+
# Libraries
94+
ExternalProject_Get_Property(googletest binary_dir)
95+
set(_G_LIBRARY_PATH ${binary_dir}/lib/)
96+
97+
# Use gmock_main instead of gtest_main because it initializes gtest as well.
98+
# Note: The libraries are listed in reverse order of their dependencies.
99+
foreach(lib gtest gtest_main gmock gmock_main)
100+
add_library(${lib} IMPORTED STATIC GLOBAL)
101+
set_target_properties(${lib} PROPERTIES
102+
IMPORTED_LOCATION "${_G_LIBRARY_PATH}${CMAKE_STATIC_LIBRARY_PREFIX}${lib}${CMAKE_STATIC_LIBRARY_SUFFIX}"
103+
)
104+
add_dependencies(${lib} googletest)
105+
add_library(GTest::${lib} ALIAS ${lib})
106+
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND
107+
${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER_EQUAL 9)
108+
target_compile_options(${lib} INTERFACE -Wno-deprecated-copy)
109+
endif()
110+
endforeach()
111+
target_include_directories(gtest INTERFACE ${GTEST_INCLUDE_DIR})
112+
target_include_directories(gmock INTERFACE ${GMOCK_INCLUDE_DIR})
113+
114+
set_property(TARGET gtest PROPERTY IMPORTED_LOCATION ${_G_LIBRARY_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX})
115+
set_property(TARGET gtest_main PROPERTY IMPORTED_LOCATION ${_G_LIBRARY_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest_main${CMAKE_STATIC_LIBRARY_SUFFIX})
116+
set_property(TARGET gmock PROPERTY IMPORTED_LOCATION ${_G_LIBRARY_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}gmock${CMAKE_STATIC_LIBRARY_SUFFIX})
117+
set_property(TARGET gmock_main PROPERTY IMPORTED_LOCATION ${_G_LIBRARY_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}gmock_main${CMAKE_STATIC_LIBRARY_SUFFIX})

cmake/modules/SearchInstalledSoftware.cmake

Lines changed: 1 addition & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -1299,121 +1299,7 @@ if (testing OR testsupport)
12991299
endif()
13001300

13011301
if (builtin_gtest)
1302-
# Add googletest
1303-
# http://stackoverflow.com/questions/9689183/cmake-googletest
1304-
1305-
set(_gtest_byproduct_binary_dir
1306-
${CMAKE_CURRENT_BINARY_DIR}/googletest-prefix/src/googletest-build)
1307-
set(_gtest_byproducts
1308-
${_gtest_byproduct_binary_dir}/lib/libgtest.a
1309-
${_gtest_byproduct_binary_dir}/lib/libgtest_main.a
1310-
${_gtest_byproduct_binary_dir}/lib/libgmock.a
1311-
${_gtest_byproduct_binary_dir}/lib/libgmock_main.a
1312-
)
1313-
1314-
set(GTEST_CXX_FLAGS "${ROOT_EXTERNAL_CXX_FLAGS}")
1315-
if(MSVC)
1316-
if(winrtdebug)
1317-
set(GTEST_BUILD_TYPE Debug)
1318-
else()
1319-
set(GTEST_BUILD_TYPE Release)
1320-
endif()
1321-
set(_gtest_byproducts
1322-
${_gtest_byproduct_binary_dir}/lib/gtest.lib
1323-
${_gtest_byproduct_binary_dir}/lib/gtest_main.lib
1324-
${_gtest_byproduct_binary_dir}/lib/gmock.lib
1325-
${_gtest_byproduct_binary_dir}/lib/gmock_main.lib
1326-
)
1327-
if(CMAKE_GENERATOR MATCHES Ninja)
1328-
set(GTEST_BUILD_COMMAND "BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR>")
1329-
else()
1330-
set(GTEST_BUILD_COMMAND "BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config ${GTEST_BUILD_TYPE}")
1331-
endif()
1332-
if(asan)
1333-
if(NOT winrtdebug)
1334-
set(gtestbuild "RelWithDebInfo")
1335-
endif()
1336-
set(GTEST_CXX_FLAGS "${ROOT_EXTERNAL_CXX_FLAGS} ${ASAN_EXTRA_CXX_FLAGS}")
1337-
endif()
1338-
set(EXTRA_GTEST_OPTS
1339-
-DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG}
1340-
-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG:PATH=${_gtest_byproduct_binary_dir}/lib/
1341-
-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_MINSIZEREL:PATH=${_gtest_byproduct_binary_dir}/lib/
1342-
-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=${_gtest_byproduct_binary_dir}/lib/
1343-
-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO:PATH=${_gtest_byproduct_binary_dir}/lib/
1344-
-Dgtest_force_shared_crt=ON
1345-
${GTEST_BUILD_COMMAND})
1346-
else()
1347-
set(GTEST_BUILD_TYPE Release)
1348-
endif()
1349-
if(APPLE)
1350-
set(EXTRA_GTEST_OPTS
1351-
-DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT})
1352-
endif()
1353-
set(ROOT_GOOGLETEST_VERSION 1.17.0) # https://github.com/google/googletest/releases/tag/v1.17.0 Date: Apr 30, 2025
1354-
set(ROOT_GOOGLETEST_HASH "65fab701d9829d38cb77c14acdc431d2108bfdbf8979e40eb8ae567edf10b27c")
1355-
ExternalProject_Add(
1356-
googletest
1357-
# GIT_REPOSITORY https://github.com/google/googletest.git
1358-
# GIT_SHALLOW 1
1359-
# GIT_TAG v1.17.0
1360-
URL ${lcgpackages}/googletest-${ROOT_GOOGLETEST_VERSION}.tar.gz
1361-
URL_HASH SHA256=${ROOT_GOOGLETEST_HASH}
1362-
UPDATE_COMMAND ""
1363-
# # Force separate output paths for debug and release builds to allow easy
1364-
# # identification of correct lib in subsequent TARGET_LINK_LIBRARIES commands
1365-
# CMAKE_ARGS -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG:PATH=DebugLibs
1366-
# -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=ReleaseLibs
1367-
# -Dgtest_force_shared_crt=ON
1368-
CMAKE_ARGS -G ${CMAKE_GENERATOR}
1369-
-DCMAKE_BUILD_TYPE=${GTEST_BUILD_TYPE}
1370-
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
1371-
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
1372-
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
1373-
-DCMAKE_CXX_FLAGS=${GTEST_CXX_FLAGS}
1374-
-DCMAKE_AR=${CMAKE_AR}
1375-
-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
1376-
${EXTRA_GTEST_OPTS}
1377-
# Disable install step
1378-
INSTALL_COMMAND ""
1379-
BUILD_BYPRODUCTS ${_gtest_byproducts}
1380-
# Wrap download, configure and build steps in a script to log output
1381-
LOG_DOWNLOAD ON LOG_CONFIGURE ON LOG_BUILD ON LOG_OUTPUT_ON_FAILURE ON
1382-
TIMEOUT 600
1383-
)
1384-
1385-
# Specify include dirs for gtest and gmock
1386-
ExternalProject_Get_Property(googletest source_dir)
1387-
set(GTEST_INCLUDE_DIR ${source_dir}/googletest/include)
1388-
set(GMOCK_INCLUDE_DIR ${source_dir}/googlemock/include)
1389-
# Create the directories. Prevents bug https://gitlab.kitware.com/cmake/cmake/issues/15052
1390-
file(MAKE_DIRECTORY ${GTEST_INCLUDE_DIR} ${GMOCK_INCLUDE_DIR})
1391-
1392-
# Libraries
1393-
ExternalProject_Get_Property(googletest binary_dir)
1394-
set(_G_LIBRARY_PATH ${binary_dir}/lib/)
1395-
1396-
# Use gmock_main instead of gtest_main because it initializes gtest as well.
1397-
# Note: The libraries are listed in reverse order of their dependencies.
1398-
foreach(lib gtest gtest_main gmock gmock_main)
1399-
add_library(${lib} IMPORTED STATIC GLOBAL)
1400-
set_target_properties(${lib} PROPERTIES
1401-
IMPORTED_LOCATION "${_G_LIBRARY_PATH}${CMAKE_STATIC_LIBRARY_PREFIX}${lib}${CMAKE_STATIC_LIBRARY_SUFFIX}"
1402-
)
1403-
add_dependencies(${lib} googletest)
1404-
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND
1405-
${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER_EQUAL 9)
1406-
target_compile_options(${lib} INTERFACE -Wno-deprecated-copy)
1407-
endif()
1408-
endforeach()
1409-
target_include_directories(gtest INTERFACE ${GTEST_INCLUDE_DIR})
1410-
target_include_directories(gmock INTERFACE ${GMOCK_INCLUDE_DIR})
1411-
1412-
set_property(TARGET gtest PROPERTY IMPORTED_LOCATION ${_G_LIBRARY_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX})
1413-
set_property(TARGET gtest_main PROPERTY IMPORTED_LOCATION ${_G_LIBRARY_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest_main${CMAKE_STATIC_LIBRARY_SUFFIX})
1414-
set_property(TARGET gmock PROPERTY IMPORTED_LOCATION ${_G_LIBRARY_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}gmock${CMAKE_STATIC_LIBRARY_SUFFIX})
1415-
set_property(TARGET gmock_main PROPERTY IMPORTED_LOCATION ${_G_LIBRARY_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}gmock_main${CMAKE_STATIC_LIBRARY_SUFFIX})
1416-
1302+
add_subdirectory(builtins/gtest)
14171303
endif()
14181304

14191305
# Starting from cmake 3.23, the GTest targets will have stable names.

0 commit comments

Comments
 (0)