• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Allow the source files to find headers in src/
2include_directories(${PROJECT_SOURCE_DIR}/src)
3
4if (DEFINED BENCHMARK_CXX_LINKER_FLAGS)
5  list(APPEND CMAKE_SHARED_LINKER_FLAGS ${BENCHMARK_CXX_LINKER_FLAGS})
6  list(APPEND CMAKE_MODULE_LINKER_FLAGS ${BENCHMARK_CXX_LINKER_FLAGS})
7endif()
8
9file(GLOB
10  SOURCE_FILES
11    *.cc
12    ${PROJECT_SOURCE_DIR}/include/benchmark/*.h
13    ${CMAKE_CURRENT_SOURCE_DIR}/*.h)
14file(GLOB BENCHMARK_MAIN "benchmark_main.cc")
15foreach(item ${BENCHMARK_MAIN})
16  list(REMOVE_ITEM SOURCE_FILES "${item}")
17endforeach()
18
19add_library(benchmark ${SOURCE_FILES})
20set_target_properties(benchmark PROPERTIES
21  OUTPUT_NAME "benchmark"
22  VERSION ${GENERIC_LIB_VERSION}
23  SOVERSION ${GENERIC_LIB_SOVERSION}
24)
25target_include_directories(benchmark PUBLIC
26    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
27    )
28
29# Link threads.
30target_link_libraries(benchmark  ${BENCHMARK_CXX_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
31find_library(LIBRT rt)
32if(LIBRT)
33  target_link_libraries(benchmark ${LIBRT})
34endif()
35
36# We need extra libraries on Windows
37if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
38  target_link_libraries(benchmark Shlwapi)
39endif()
40
41# We need extra libraries on Solaris
42if(${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
43  target_link_libraries(benchmark kstat)
44endif()
45
46# Benchmark main library
47add_library(benchmark_main "benchmark_main.cc")
48set_target_properties(benchmark_main PROPERTIES
49  OUTPUT_NAME "benchmark_main"
50  VERSION ${GENERIC_LIB_VERSION}
51  SOVERSION ${GENERIC_LIB_SOVERSION}
52)
53target_include_directories(benchmark PUBLIC
54    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
55    )
56target_link_libraries(benchmark_main benchmark)
57
58set(include_install_dir "include")
59set(lib_install_dir "lib/")
60set(bin_install_dir "bin/")
61set(config_install_dir "lib/cmake/${PROJECT_NAME}")
62set(pkgconfig_install_dir "lib/pkgconfig")
63
64set(generated_dir "${CMAKE_CURRENT_BINARY_DIR}/generated")
65
66set(version_config "${generated_dir}/${PROJECT_NAME}ConfigVersion.cmake")
67set(project_config "${generated_dir}/${PROJECT_NAME}Config.cmake")
68set(pkg_config "${generated_dir}/${PROJECT_NAME}.pc")
69set(targets_export_name "${PROJECT_NAME}Targets")
70
71set(namespace "${PROJECT_NAME}::")
72
73include(CMakePackageConfigHelpers)
74write_basic_package_version_file(
75  "${version_config}" VERSION ${GENERIC_LIB_VERSION} COMPATIBILITY SameMajorVersion
76)
77
78configure_file("${PROJECT_SOURCE_DIR}/cmake/Config.cmake.in" "${project_config}" @ONLY)
79configure_file("${PROJECT_SOURCE_DIR}/cmake/benchmark.pc.in" "${pkg_config}" @ONLY)
80
81if (BENCHMARK_ENABLE_INSTALL)
82  # Install target (will install the library to specified CMAKE_INSTALL_PREFIX variable)
83  install(
84    TARGETS benchmark benchmark_main
85    EXPORT ${targets_export_name}
86    ARCHIVE DESTINATION ${lib_install_dir}
87    LIBRARY DESTINATION ${lib_install_dir}
88    RUNTIME DESTINATION ${bin_install_dir}
89    INCLUDES DESTINATION ${include_install_dir})
90
91  install(
92    DIRECTORY "${PROJECT_SOURCE_DIR}/include/benchmark"
93    DESTINATION ${include_install_dir}
94    FILES_MATCHING PATTERN "*.*h")
95
96  install(
97      FILES "${project_config}" "${version_config}"
98      DESTINATION "${config_install_dir}")
99
100  install(
101      FILES "${pkg_config}"
102      DESTINATION "${pkgconfig_install_dir}")
103
104  install(
105      EXPORT "${targets_export_name}"
106      NAMESPACE "${namespace}"
107      DESTINATION "${config_install_dir}")
108endif()
109