]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/hana/benchmark/CMakeLists.txt
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / hana / benchmark / CMakeLists.txt
1 # Copyright Louis Dionne 2013-2016
2 # Distributed under the Boost Software License, Version 1.0.
3 # (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
4
5 ##############################################################################
6 # Required packages, gems and caveats
7 ##############################################################################
8 find_package(Ruby 2.1)
9 if(NOT ${RUBY_FOUND})
10 message(WARNING "Ruby >= 2.1 was not found; the benchmarks will be unavailable.")
11 return()
12 endif()
13
14 # Check for the 'ruby-progressbar' and 'tilt' gems
15 execute_process(COMMAND ${RUBY_EXECUTABLE} -r ruby-progressbar -r tilt -e ""
16 RESULT_VARIABLE __BOOST_HANA_MISSING_GEMS
17 OUTPUT_QUIET ERROR_QUIET)
18 if(${__BOOST_HANA_MISSING_GEMS})
19 message(WARNING
20 "The 'ruby-progressbar' and/or 'tilt' gems were not found; "
21 "the benchmarks will be unavailable."
22 "Use `gem install ruby-progressbar tilt` to install the missing gems.")
23 return()
24 endif()
25
26 # Check for the MPL11 library, which can be measured in some benchmarks
27 find_package(MPL11)
28 if (MPL11_FOUND)
29 include_directories(${MPL11_INCLUDE_DIR})
30 endif()
31
32 # Check for the Meta library, which can be measured in some benchmarks
33 find_package(Meta)
34 if (Meta_FOUND)
35 include_directories(${Meta_INCLUDE_DIR})
36 endif()
37
38 boost_hana_append_flag(BOOST_HANA_HAS_FTEMPLATE_DEPTH -ftemplate-depth=-1)
39 include_directories(${CMAKE_CURRENT_SOURCE_DIR})
40
41 ##############################################################################
42 # Configure the measure.rb script
43 ##############################################################################
44 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/measure.in.rb #input
45 ${CMAKE_CURRENT_BINARY_DIR}/measure.rb #output
46 @ONLY)
47
48 ##############################################################################
49 # Add the benchmarks
50 ##############################################################################
51 add_custom_target(benchmarks COMMENT "Generate all the benchmarks.")
52
53 add_custom_target(travis_compiler_slug USES_TERMINAL
54 COMMAND ${CMAKE_COMMAND} -E echo "travis_compiler_slug: $<LOWER_CASE:${CMAKE_CXX_COMPILER_ID}-${CMAKE_CXX_COMPILER_VERSION}>")
55 add_custom_target(travis_config_slug USES_TERMINAL
56 COMMAND ${CMAKE_COMMAND} -E echo "travis_config_slug: $<LOWER_CASE:$<CONFIG>>")
57
58 file(GLOB_RECURSE BOOST_HANA_BENCHMARKS *.erb.json)
59 foreach(benchmark IN LISTS BOOST_HANA_BENCHMARKS)
60 boost_hana_target_name_for(target ${benchmark} ".erb.json")
61 get_filename_component(directory "${benchmark}" DIRECTORY)
62 file(GLOB cpp_files ${directory}/*.erb.cpp)
63 configure_file("${benchmark}" "${CMAKE_CURRENT_BINARY_DIR}/${target}.erb.json" @ONLY)
64
65 file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${target}.measure.cpp "")
66 add_executable(${target}.measure EXCLUDE_FROM_ALL ${CMAKE_CURRENT_BINARY_DIR}/${target}.measure.cpp)
67 target_link_libraries(${target}.measure hana)
68 set_target_properties(${target}.measure PROPERTIES RULE_LAUNCH_COMPILE "${CMAKE_CURRENT_BINARY_DIR}/measure.rb")
69 set_property(TARGET ${target}.measure APPEND PROPERTY INCLUDE_DIRECTORIES "${directory}")
70 add_custom_target(${target}.measure.run COMMAND ${target}.measure)
71
72 add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${target}.json"
73 COMMAND ${RUBY_EXECUTABLE} -r tilt -r ${CMAKE_CURRENT_BINARY_DIR}/measure.rb
74 -e "MEASURE_FILE = '${CMAKE_CURRENT_BINARY_DIR}/${target}.measure.cpp'"
75 -e "MEASURE_TARGET = '${target}.measure'"
76 -e "json = Tilt::ERBTemplate.new('${CMAKE_CURRENT_BINARY_DIR}/${target}.erb.json').render"
77 -e "File.open('${CMAKE_CURRENT_BINARY_DIR}/${target}.json', 'w') { |f| f.write(json) } "
78 WORKING_DIRECTORY ${directory}
79 DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${target}.erb.json ${cpp_files}
80 VERBATIM USES_TERMINAL
81 COMMENT "Generating dataset for ${target}"
82 )
83
84 add_custom_target(${target} DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${target}.json")
85 add_dependencies(benchmarks ${target})
86 endforeach()