• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2019 Hans Dembinski
2# Distributed under the Boost Software License, Version 1.0.
3# See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt
4
5include(BoostFetch)
6
7# setup for google benchmark
8set(CMAKE_BUILD_TYPE Release) # ok, only set in local scope
9option(BENCHMARK_ENABLE_TESTING "" OFF)
10boost_fetch(google/benchmark)
11
12function(add_benchmark NAME)
13
14  cmake_parse_arguments(PARSE_ARGV 1 _ "" "" ";INCLUDE_DIRECTORIES;LINK_LIBRARIES;COMPILE_OPTIONS")
15
16  if(__UNPARSED_ARGUMENTS)
17    message(AUTHOR_WARNING "add_benchmark: extra arguments ignored: ${__UNPARSED_ARGUMENTS}")
18  endif()
19
20  set(SOURCE ${NAME})
21  set(NAME benchmark_${NAME})
22
23  if(DEFINED BUILD_TESTING AND NOT BUILD_TESTING)
24    return()
25  endif()
26
27  add_executable(${NAME} ${SOURCE})
28  target_include_directories(${NAME} PRIVATE ${__INCLUDE_DIRECTORIES})
29  target_link_libraries(${NAME} PRIVATE Boost::histogram benchmark_main ${__LINK_LIBRARIES})
30  target_compile_options(${NAME} PRIVATE -DNDEBUG -O3 -march=native -funsafe-math-optimizations ${__COMPILE_OPTIONS})
31
32endfunction()
33
34add_benchmark(axis_size)
35add_benchmark(axis_index)
36add_benchmark(histogram_filling)
37add_benchmark(histogram_iteration)
38
39find_package(Threads)
40if (Threads_FOUND)
41  add_benchmark(histogram_parallel_filling)
42endif()
43
44find_package(GSL)
45if (GSL_FOUND)
46  add_benchmark(
47    histogram_filling_gsl
48    INCLUDE_DIRECTORIES ${GSL_INCLUDE_DIRS}
49    LINK_LIBRARIES ${GSL_LIBRARIES})
50endif()
51
52find_package(ROOT QUIET)
53if (ROOT_FOUND)
54  add_benchmark(
55    histogram_filling_root
56    INCLUDE_DIRECTORIES ${ROOT_INCLUDE_DIRS}
57    LINK_LIBRARIES ${ROOT_LIBRARIES}
58    COMPILE_OPTIONS -frtti -fexceptions
59  )
60  # add ROOT linker flags? ${ROOT_EXE_LINKER_FLAGS}
61endif()
62