xref: /aosp_15_r20/external/google-benchmark/src/CMakeLists.txt (revision dbb99499c3810fa1611fa2242a2fc446be01a57c)
1*dbb99499SAndroid Build Coastguard Worker#Allow the source files to find headers in src /
2*dbb99499SAndroid Build Coastguard Workerinclude(GNUInstallDirs)
3*dbb99499SAndroid Build Coastguard Workerinclude_directories(${PROJECT_SOURCE_DIR}/src)
4*dbb99499SAndroid Build Coastguard Worker
5*dbb99499SAndroid Build Coastguard Workerif (DEFINED BENCHMARK_CXX_LINKER_FLAGS)
6*dbb99499SAndroid Build Coastguard Worker  list(APPEND CMAKE_SHARED_LINKER_FLAGS ${BENCHMARK_CXX_LINKER_FLAGS})
7*dbb99499SAndroid Build Coastguard Worker  list(APPEND CMAKE_MODULE_LINKER_FLAGS ${BENCHMARK_CXX_LINKER_FLAGS})
8*dbb99499SAndroid Build Coastguard Workerendif()
9*dbb99499SAndroid Build Coastguard Worker
10*dbb99499SAndroid Build Coastguard Workerfile(GLOB
11*dbb99499SAndroid Build Coastguard Worker  SOURCE_FILES
12*dbb99499SAndroid Build Coastguard Worker    *.cc
13*dbb99499SAndroid Build Coastguard Worker    ${PROJECT_SOURCE_DIR}/include/benchmark/*.h
14*dbb99499SAndroid Build Coastguard Worker    ${CMAKE_CURRENT_SOURCE_DIR}/*.h)
15*dbb99499SAndroid Build Coastguard Workerfile(GLOB BENCHMARK_MAIN "benchmark_main.cc")
16*dbb99499SAndroid Build Coastguard Workerforeach(item ${BENCHMARK_MAIN})
17*dbb99499SAndroid Build Coastguard Worker  list(REMOVE_ITEM SOURCE_FILES "${item}")
18*dbb99499SAndroid Build Coastguard Workerendforeach()
19*dbb99499SAndroid Build Coastguard Worker
20*dbb99499SAndroid Build Coastguard Workeradd_library(benchmark ${SOURCE_FILES})
21*dbb99499SAndroid Build Coastguard Workeradd_library(benchmark::benchmark ALIAS benchmark)
22*dbb99499SAndroid Build Coastguard Workerset_target_properties(benchmark PROPERTIES
23*dbb99499SAndroid Build Coastguard Worker  OUTPUT_NAME "benchmark"
24*dbb99499SAndroid Build Coastguard Worker  VERSION ${GENERIC_LIB_VERSION}
25*dbb99499SAndroid Build Coastguard Worker  SOVERSION ${GENERIC_LIB_SOVERSION}
26*dbb99499SAndroid Build Coastguard Worker)
27*dbb99499SAndroid Build Coastguard Workertarget_include_directories(benchmark PUBLIC
28*dbb99499SAndroid Build Coastguard Worker  $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
29*dbb99499SAndroid Build Coastguard Worker)
30*dbb99499SAndroid Build Coastguard Worker
31*dbb99499SAndroid Build Coastguard Workerset_property(
32*dbb99499SAndroid Build Coastguard Worker  SOURCE benchmark.cc
33*dbb99499SAndroid Build Coastguard Worker  APPEND
34*dbb99499SAndroid Build Coastguard Worker  PROPERTY COMPILE_DEFINITIONS
35*dbb99499SAndroid Build Coastguard Worker  BENCHMARK_VERSION="${VERSION}"
36*dbb99499SAndroid Build Coastguard Worker)
37*dbb99499SAndroid Build Coastguard Worker
38*dbb99499SAndroid Build Coastguard Worker# libpfm, if available
39*dbb99499SAndroid Build Coastguard Workerif (PFM_FOUND)
40*dbb99499SAndroid Build Coastguard Worker  target_link_libraries(benchmark PRIVATE PFM::libpfm)
41*dbb99499SAndroid Build Coastguard Worker  target_compile_definitions(benchmark PRIVATE -DHAVE_LIBPFM)
42*dbb99499SAndroid Build Coastguard Workerendif()
43*dbb99499SAndroid Build Coastguard Worker
44*dbb99499SAndroid Build Coastguard Worker# pthread affinity, if available
45*dbb99499SAndroid Build Coastguard Workerif(HAVE_PTHREAD_AFFINITY)
46*dbb99499SAndroid Build Coastguard Worker  target_compile_definitions(benchmark PRIVATE -DBENCHMARK_HAS_PTHREAD_AFFINITY)
47*dbb99499SAndroid Build Coastguard Workerendif()
48*dbb99499SAndroid Build Coastguard Worker
49*dbb99499SAndroid Build Coastguard Worker# Link threads.
50*dbb99499SAndroid Build Coastguard Workertarget_link_libraries(benchmark PRIVATE Threads::Threads)
51*dbb99499SAndroid Build Coastguard Worker
52*dbb99499SAndroid Build Coastguard Workertarget_link_libraries(benchmark PRIVATE ${BENCHMARK_CXX_LIBRARIES})
53*dbb99499SAndroid Build Coastguard Worker
54*dbb99499SAndroid Build Coastguard Workerif(HAVE_LIB_RT)
55*dbb99499SAndroid Build Coastguard Worker  target_link_libraries(benchmark PRIVATE rt)
56*dbb99499SAndroid Build Coastguard Workerendif(HAVE_LIB_RT)
57*dbb99499SAndroid Build Coastguard Worker
58*dbb99499SAndroid Build Coastguard Worker
59*dbb99499SAndroid Build Coastguard Worker# We need extra libraries on Windows
60*dbb99499SAndroid Build Coastguard Workerif(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
61*dbb99499SAndroid Build Coastguard Worker  target_link_libraries(benchmark PRIVATE shlwapi)
62*dbb99499SAndroid Build Coastguard Workerendif()
63*dbb99499SAndroid Build Coastguard Worker
64*dbb99499SAndroid Build Coastguard Worker# We need extra libraries on Solaris
65*dbb99499SAndroid Build Coastguard Workerif(${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
66*dbb99499SAndroid Build Coastguard Worker  target_link_libraries(benchmark PRIVATE kstat)
67*dbb99499SAndroid Build Coastguard Worker  set(BENCHMARK_PRIVATE_LINK_LIBRARIES -lkstat)
68*dbb99499SAndroid Build Coastguard Workerendif()
69*dbb99499SAndroid Build Coastguard Worker
70*dbb99499SAndroid Build Coastguard Workerif (NOT BUILD_SHARED_LIBS)
71*dbb99499SAndroid Build Coastguard Worker  target_compile_definitions(benchmark PUBLIC -DBENCHMARK_STATIC_DEFINE)
72*dbb99499SAndroid Build Coastguard Workerendif()
73*dbb99499SAndroid Build Coastguard Worker
74*dbb99499SAndroid Build Coastguard Worker# Benchmark main library
75*dbb99499SAndroid Build Coastguard Workeradd_library(benchmark_main "benchmark_main.cc")
76*dbb99499SAndroid Build Coastguard Workeradd_library(benchmark::benchmark_main ALIAS benchmark_main)
77*dbb99499SAndroid Build Coastguard Workerset_target_properties(benchmark_main PROPERTIES
78*dbb99499SAndroid Build Coastguard Worker  OUTPUT_NAME "benchmark_main"
79*dbb99499SAndroid Build Coastguard Worker  VERSION ${GENERIC_LIB_VERSION}
80*dbb99499SAndroid Build Coastguard Worker  SOVERSION ${GENERIC_LIB_SOVERSION}
81*dbb99499SAndroid Build Coastguard Worker  DEFINE_SYMBOL benchmark_EXPORTS
82*dbb99499SAndroid Build Coastguard Worker)
83*dbb99499SAndroid Build Coastguard Workertarget_link_libraries(benchmark_main PUBLIC benchmark::benchmark)
84*dbb99499SAndroid Build Coastguard Worker
85*dbb99499SAndroid Build Coastguard Workerset(generated_dir "${PROJECT_BINARY_DIR}")
86*dbb99499SAndroid Build Coastguard Worker
87*dbb99499SAndroid Build Coastguard Workerset(version_config "${generated_dir}/${PROJECT_NAME}ConfigVersion.cmake")
88*dbb99499SAndroid Build Coastguard Workerset(project_config "${generated_dir}/${PROJECT_NAME}Config.cmake")
89*dbb99499SAndroid Build Coastguard Workerset(pkg_config "${generated_dir}/${PROJECT_NAME}.pc")
90*dbb99499SAndroid Build Coastguard Workerset(pkg_config_main "${generated_dir}/${PROJECT_NAME}_main.pc")
91*dbb99499SAndroid Build Coastguard Workerset(targets_to_export benchmark benchmark_main)
92*dbb99499SAndroid Build Coastguard Workerset(targets_export_name "${PROJECT_NAME}Targets")
93*dbb99499SAndroid Build Coastguard Worker
94*dbb99499SAndroid Build Coastguard Workerset(namespace "${PROJECT_NAME}::")
95*dbb99499SAndroid Build Coastguard Worker
96*dbb99499SAndroid Build Coastguard Workerinclude(CMakePackageConfigHelpers)
97*dbb99499SAndroid Build Coastguard Worker
98*dbb99499SAndroid Build Coastguard Workerconfigure_package_config_file (
99*dbb99499SAndroid Build Coastguard Worker  ${PROJECT_SOURCE_DIR}/cmake/Config.cmake.in
100*dbb99499SAndroid Build Coastguard Worker  ${project_config}
101*dbb99499SAndroid Build Coastguard Worker  INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
102*dbb99499SAndroid Build Coastguard Worker  NO_SET_AND_CHECK_MACRO
103*dbb99499SAndroid Build Coastguard Worker  NO_CHECK_REQUIRED_COMPONENTS_MACRO
104*dbb99499SAndroid Build Coastguard Worker)
105*dbb99499SAndroid Build Coastguard Workerwrite_basic_package_version_file(
106*dbb99499SAndroid Build Coastguard Worker  "${version_config}" VERSION ${GENERIC_LIB_VERSION} COMPATIBILITY SameMajorVersion
107*dbb99499SAndroid Build Coastguard Worker)
108*dbb99499SAndroid Build Coastguard Worker
109*dbb99499SAndroid Build Coastguard Workerconfigure_file("${PROJECT_SOURCE_DIR}/cmake/benchmark.pc.in" "${pkg_config}" @ONLY)
110*dbb99499SAndroid Build Coastguard Workerconfigure_file("${PROJECT_SOURCE_DIR}/cmake/benchmark_main.pc.in" "${pkg_config_main}" @ONLY)
111*dbb99499SAndroid Build Coastguard Worker
112*dbb99499SAndroid Build Coastguard Workerexport (
113*dbb99499SAndroid Build Coastguard Worker  TARGETS ${targets_to_export}
114*dbb99499SAndroid Build Coastguard Worker  NAMESPACE "${namespace}"
115*dbb99499SAndroid Build Coastguard Worker  FILE ${generated_dir}/${targets_export_name}.cmake
116*dbb99499SAndroid Build Coastguard Worker)
117*dbb99499SAndroid Build Coastguard Worker
118*dbb99499SAndroid Build Coastguard Workerif (BENCHMARK_ENABLE_INSTALL)
119*dbb99499SAndroid Build Coastguard Worker  # Install target (will install the library to specified CMAKE_INSTALL_PREFIX variable)
120*dbb99499SAndroid Build Coastguard Worker  install(
121*dbb99499SAndroid Build Coastguard Worker    TARGETS ${targets_to_export}
122*dbb99499SAndroid Build Coastguard Worker    EXPORT ${targets_export_name}
123*dbb99499SAndroid Build Coastguard Worker    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
124*dbb99499SAndroid Build Coastguard Worker    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
125*dbb99499SAndroid Build Coastguard Worker    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
126*dbb99499SAndroid Build Coastguard Worker    INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
127*dbb99499SAndroid Build Coastguard Worker
128*dbb99499SAndroid Build Coastguard Worker  install(
129*dbb99499SAndroid Build Coastguard Worker    DIRECTORY "${PROJECT_SOURCE_DIR}/include/benchmark"
130*dbb99499SAndroid Build Coastguard Worker              "${PROJECT_BINARY_DIR}/include/benchmark"
131*dbb99499SAndroid Build Coastguard Worker    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
132*dbb99499SAndroid Build Coastguard Worker    FILES_MATCHING PATTERN "*.*h")
133*dbb99499SAndroid Build Coastguard Worker
134*dbb99499SAndroid Build Coastguard Worker  install(
135*dbb99499SAndroid Build Coastguard Worker      FILES "${project_config}" "${version_config}"
136*dbb99499SAndroid Build Coastguard Worker      DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")
137*dbb99499SAndroid Build Coastguard Worker
138*dbb99499SAndroid Build Coastguard Worker  install(
139*dbb99499SAndroid Build Coastguard Worker      FILES "${pkg_config}" "${pkg_config_main}"
140*dbb99499SAndroid Build Coastguard Worker      DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
141*dbb99499SAndroid Build Coastguard Worker
142*dbb99499SAndroid Build Coastguard Worker  install(
143*dbb99499SAndroid Build Coastguard Worker      EXPORT "${targets_export_name}"
144*dbb99499SAndroid Build Coastguard Worker      NAMESPACE "${namespace}"
145*dbb99499SAndroid Build Coastguard Worker      DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")
146*dbb99499SAndroid Build Coastguard Workerendif()
147*dbb99499SAndroid Build Coastguard Worker
148*dbb99499SAndroid Build Coastguard Workerif (BENCHMARK_ENABLE_DOXYGEN)
149*dbb99499SAndroid Build Coastguard Worker  find_package(Doxygen REQUIRED)
150*dbb99499SAndroid Build Coastguard Worker  set(DOXYGEN_QUIET YES)
151*dbb99499SAndroid Build Coastguard Worker  set(DOXYGEN_RECURSIVE YES)
152*dbb99499SAndroid Build Coastguard Worker  set(DOXYGEN_GENERATE_HTML YES)
153*dbb99499SAndroid Build Coastguard Worker  set(DOXYGEN_GENERATE_MAN NO)
154*dbb99499SAndroid Build Coastguard Worker  set(DOXYGEN_MARKDOWN_SUPPORT YES)
155*dbb99499SAndroid Build Coastguard Worker  set(DOXYGEN_BUILTIN_STL_SUPPORT YES)
156*dbb99499SAndroid Build Coastguard Worker  set(DOXYGEN_EXTRACT_PACKAGE YES)
157*dbb99499SAndroid Build Coastguard Worker  set(DOXYGEN_EXTRACT_STATIC YES)
158*dbb99499SAndroid Build Coastguard Worker  set(DOXYGEN_SHOW_INCLUDE_FILES YES)
159*dbb99499SAndroid Build Coastguard Worker  set(DOXYGEN_BINARY_TOC YES)
160*dbb99499SAndroid Build Coastguard Worker  set(DOXYGEN_TOC_EXPAND YES)
161*dbb99499SAndroid Build Coastguard Worker  set(DOXYGEN_USE_MDFILE_AS_MAINPAGE "index.md")
162*dbb99499SAndroid Build Coastguard Worker  doxygen_add_docs(benchmark_doxygen
163*dbb99499SAndroid Build Coastguard Worker    docs
164*dbb99499SAndroid Build Coastguard Worker    include
165*dbb99499SAndroid Build Coastguard Worker    src
166*dbb99499SAndroid Build Coastguard Worker    ALL
167*dbb99499SAndroid Build Coastguard Worker    WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
168*dbb99499SAndroid Build Coastguard Worker    COMMENT "Building documentation with Doxygen.")
169*dbb99499SAndroid Build Coastguard Worker  if (BENCHMARK_ENABLE_INSTALL AND BENCHMARK_INSTALL_DOCS)
170*dbb99499SAndroid Build Coastguard Worker    install(
171*dbb99499SAndroid Build Coastguard Worker      DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/html/"
172*dbb99499SAndroid Build Coastguard Worker      DESTINATION ${CMAKE_INSTALL_DOCDIR})
173*dbb99499SAndroid Build Coastguard Worker  endif()
174*dbb99499SAndroid Build Coastguard Workerelse()
175*dbb99499SAndroid Build Coastguard Worker  if (BENCHMARK_ENABLE_INSTALL AND BENCHMARK_INSTALL_DOCS)
176*dbb99499SAndroid Build Coastguard Worker    install(
177*dbb99499SAndroid Build Coastguard Worker      DIRECTORY "${PROJECT_SOURCE_DIR}/docs/"
178*dbb99499SAndroid Build Coastguard Worker      DESTINATION ${CMAKE_INSTALL_DOCDIR})
179*dbb99499SAndroid Build Coastguard Worker  endif()
180*dbb99499SAndroid Build Coastguard Workerendif()
181