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