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  FOLDER "Utils"
25)
26target_include_directories(benchmark PUBLIC
27    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
28    )
29
30# Link threads.
31target_link_libraries(benchmark  ${BENCHMARK_CXX_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
32find_library(LIBRT rt)
33if(LIBRT)
34  target_link_libraries(benchmark ${LIBRT})
35endif()
36
37# We need extra libraries on Windows
38if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
39  target_link_libraries(benchmark shlwapi)
40endif()
41
42# We need extra libraries on Solaris
43if(${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
44  target_link_libraries(benchmark kstat)
45endif()
46
47# Benchmark main library
48add_library(benchmark_main "benchmark_main.cc")
49set_target_properties(benchmark_main PROPERTIES
50  OUTPUT_NAME "benchmark_main"
51  VERSION ${GENERIC_LIB_VERSION}
52  SOVERSION ${GENERIC_LIB_SOVERSION}
53  FOLDER "Utils"
54)
55target_include_directories(benchmark PUBLIC
56    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>
57    )
58target_link_libraries(benchmark_main benchmark)
59
60set(include_install_dir "include")
61set(lib_install_dir "lib/")
62set(bin_install_dir "bin/")
63set(config_install_dir "lib/cmake/${PROJECT_NAME}")
64set(pkgconfig_install_dir "lib/pkgconfig")
65
66set(generated_dir "${CMAKE_CURRENT_BINARY_DIR}/generated")
67
68set(version_config "${generated_dir}/${PROJECT_NAME}ConfigVersion.cmake")
69set(project_config "${generated_dir}/${PROJECT_NAME}Config.cmake")
70set(pkg_config "${generated_dir}/${PROJECT_NAME}.pc")
71set(targets_export_name "${PROJECT_NAME}Targets")
72
73set(namespace "${PROJECT_NAME}::")
74
75include(CMakePackageConfigHelpers)
76write_basic_package_version_file(
77    "${version_config}" VERSION ${GIT_VERSION} COMPATIBILITY SameMajorVersion
78)
79
80configure_file("${PROJECT_SOURCE_DIR}/cmake/Config.cmake.in" "${project_config}" @ONLY)
81configure_file("${PROJECT_SOURCE_DIR}/cmake/benchmark.pc.in" "${pkg_config}" @ONLY)
82
83if (BENCHMARK_ENABLE_INSTALL)
84  # Install target (will install the library to specified CMAKE_INSTALL_PREFIX variable)
85  install(
86    TARGETS benchmark benchmark_main
87    EXPORT ${targets_export_name}
88    ARCHIVE DESTINATION ${lib_install_dir}
89    LIBRARY DESTINATION ${lib_install_dir}
90    RUNTIME DESTINATION ${bin_install_dir}
91    INCLUDES DESTINATION ${include_install_dir})
92
93  install(
94    DIRECTORY "${PROJECT_SOURCE_DIR}/include/benchmark"
95    DESTINATION ${include_install_dir}
96    FILES_MATCHING PATTERN "*.*h")
97
98  install(
99      FILES "${project_config}" "${version_config}"
100      DESTINATION "${config_install_dir}")
101
102  install(
103      FILES "${pkg_config}"
104      DESTINATION "${pkgconfig_install_dir}")
105
106  install(
107      EXPORT "${targets_export_name}"
108      NAMESPACE "${namespace}"
109      DESTINATION "${config_install_dir}")
110endif()
111