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