brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.2 KiB · 0357dcc Raw
178 lines · plain
1# Allow the source files to find headers in src/2include(GNUInstallDirs)3include_directories(${PROJECT_SOURCE_DIR}/src)4 5if (DEFINED BENCHMARK_CXX_LINKER_FLAGS)6  list(APPEND CMAKE_SHARED_LINKER_FLAGS ${BENCHMARK_CXX_LINKER_FLAGS})7  list(APPEND CMAKE_MODULE_LINKER_FLAGS ${BENCHMARK_CXX_LINKER_FLAGS})8endif()9 10file(GLOB11  SOURCE_FILES12    *.cc13    ${PROJECT_SOURCE_DIR}/include/benchmark/*.h14    ${CMAKE_CURRENT_SOURCE_DIR}/*.h)15file(GLOB BENCHMARK_MAIN "benchmark_main.cc")16foreach(item ${BENCHMARK_MAIN})17  list(REMOVE_ITEM SOURCE_FILES "${item}")18endforeach()19 20add_library(benchmark ${SOURCE_FILES})21add_library(benchmark::benchmark ALIAS benchmark)22set_target_properties(benchmark PROPERTIES23  OUTPUT_NAME "benchmark"24  VERSION ${GENERIC_LIB_VERSION}25  SOVERSION ${GENERIC_LIB_SOVERSION}26)27target_include_directories(benchmark PUBLIC28  $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>29)30 31set_property(32  SOURCE benchmark.cc33  APPEND34  PROPERTY COMPILE_DEFINITIONS35  BENCHMARK_VERSION="${VERSION}"36)37 38# libpfm, if available39if (PFM_FOUND)40  target_link_libraries(benchmark PRIVATE PFM::libpfm)41  target_compile_definitions(benchmark PRIVATE -DHAVE_LIBPFM)42endif()43 44# pthread affinity, if available45if(HAVE_PTHREAD_AFFINITY)46  target_compile_definitions(benchmark PRIVATE -DBENCHMARK_HAS_PTHREAD_AFFINITY)47endif()48 49# Link threads.50target_link_libraries(benchmark PRIVATE Threads::Threads)51 52target_link_libraries(benchmark PRIVATE ${BENCHMARK_CXX_LIBRARIES})53 54if(HAVE_LIB_RT)55  target_link_libraries(benchmark PRIVATE rt)56endif(HAVE_LIB_RT)57 58 59# We need extra libraries on Windows60if("${CMAKE_SYSTEM_NAME}" MATCHES "Windows")61  target_link_libraries(benchmark PRIVATE shlwapi)62endif()63 64# We need extra libraries on Solaris65if("${CMAKE_SYSTEM_NAME}" MATCHES "SunOS")66  target_link_libraries(benchmark PRIVATE kstat)67endif()68 69if (NOT BUILD_SHARED_LIBS)70  target_compile_definitions(benchmark PUBLIC -DBENCHMARK_STATIC_DEFINE)71endif()72 73# Benchmark main library74add_library(benchmark_main "benchmark_main.cc")75add_library(benchmark::benchmark_main ALIAS benchmark_main)76set_target_properties(benchmark_main PROPERTIES77  OUTPUT_NAME "benchmark_main"78  VERSION ${GENERIC_LIB_VERSION}79  SOVERSION ${GENERIC_LIB_SOVERSION}80  DEFINE_SYMBOL benchmark_EXPORTS81)82target_link_libraries(benchmark_main PUBLIC benchmark::benchmark)83 84set(generated_dir "${PROJECT_BINARY_DIR}")85 86set(version_config "${generated_dir}/${PROJECT_NAME}ConfigVersion.cmake")87set(project_config "${generated_dir}/${PROJECT_NAME}Config.cmake")88set(pkg_config "${generated_dir}/${PROJECT_NAME}.pc")89set(targets_to_export benchmark benchmark_main)90set(targets_export_name "${PROJECT_NAME}Targets")91 92set(namespace "${PROJECT_NAME}::")93 94include(CMakePackageConfigHelpers)95 96configure_package_config_file (97  ${PROJECT_SOURCE_DIR}/cmake/Config.cmake.in98  ${project_config}99  INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}100  NO_SET_AND_CHECK_MACRO101  NO_CHECK_REQUIRED_COMPONENTS_MACRO102)103write_basic_package_version_file(104  "${version_config}" VERSION ${GENERIC_LIB_VERSION} COMPATIBILITY SameMajorVersion105)106 107configure_file("${PROJECT_SOURCE_DIR}/cmake/benchmark.pc.in" "${pkg_config}" @ONLY)108 109export (110  TARGETS ${targets_to_export}111  NAMESPACE "${namespace}"112  FILE ${generated_dir}/${targets_export_name}.cmake113)114 115if (BENCHMARK_ENABLE_INSTALL)116  # Install target (will install the library to specified CMAKE_INSTALL_PREFIX variable)117  install(118    TARGETS ${targets_to_export}119    EXPORT ${targets_export_name}120    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}121    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}122    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}123    INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})124 125  install(126    DIRECTORY "${PROJECT_SOURCE_DIR}/include/benchmark"127              "${PROJECT_BINARY_DIR}/include/benchmark"128    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}129    FILES_MATCHING PATTERN "*.*h")130 131  install(132      FILES "${project_config}" "${version_config}"133      DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")134 135  install(136      FILES "${pkg_config}"137      DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")138 139  install(140      EXPORT "${targets_export_name}"141      NAMESPACE "${namespace}"142      DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")143endif()144 145if (BENCHMARK_ENABLE_DOXYGEN)146  find_package(Doxygen REQUIRED)147  set(DOXYGEN_QUIET YES)148  set(DOXYGEN_RECURSIVE YES)149  set(DOXYGEN_GENERATE_HTML YES)150  set(DOXYGEN_GENERATE_MAN NO)151  set(DOXYGEN_MARKDOWN_SUPPORT YES)152  set(DOXYGEN_BUILTIN_STL_SUPPORT YES)153  set(DOXYGEN_EXTRACT_PACKAGE YES)154  set(DOXYGEN_EXTRACT_STATIC YES)155  set(DOXYGEN_SHOW_INCLUDE_FILES YES)156  set(DOXYGEN_BINARY_TOC YES)157  set(DOXYGEN_TOC_EXPAND YES)158  set(DOXYGEN_USE_MDFILE_AS_MAINPAGE "index.md")159  doxygen_add_docs(benchmark_doxygen160    docs161    include162    src163    ALL164    WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}165    COMMENT "Building documentation with Doxygen.")166  if (BENCHMARK_ENABLE_INSTALL AND BENCHMARK_INSTALL_DOCS)167    install(168      DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/html/"169      DESTINATION ${CMAKE_INSTALL_DOCDIR})170  endif()171else()172  if (BENCHMARK_ENABLE_INSTALL AND BENCHMARK_INSTALL_DOCS)173    install(174      DIRECTORY "${PROJECT_SOURCE_DIR}/docs/"175      DESTINATION ${CMAKE_INSTALL_DOCDIR})176  endif()177endif()178