-# Copyright Louis Dionne 2013-2016
+# Copyright Louis Dionne 2013-2017
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
return()
endif()
-# Check for the MPL11 library, which can be measured in some benchmarks
+# Some benchmarks depend on those libraries
find_package(MPL11)
-if (MPL11_FOUND)
- include_directories(${MPL11_INCLUDE_DIR})
-endif()
-
-# Check for the Meta library, which can be measured in some benchmarks
find_package(Meta)
-if (Meta_FOUND)
- include_directories(${Meta_INCLUDE_DIR})
-endif()
-boost_hana_append_flag(BOOST_HANA_HAS_FTEMPLATE_DEPTH -ftemplate-depth=-1)
-include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+include(CheckCXXCompilerFlag)
+check_cxx_compiler_flag(-ftemplate-depth=-1 BOOST_HANA_HAS_FTEMPLATE_DEPTH)
##############################################################################
# Configure the measure.rb script
foreach(benchmark IN LISTS BOOST_HANA_BENCHMARKS)
boost_hana_target_name_for(target ${benchmark} ".erb.json")
get_filename_component(directory "${benchmark}" DIRECTORY)
- file(GLOB cpp_files ${directory}/*.erb.cpp)
+ file(GLOB cpp_files "${directory}/*.erb.cpp")
configure_file("${benchmark}" "${CMAKE_CURRENT_BINARY_DIR}/${target}.erb.json" @ONLY)
- file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${target}.measure.cpp "")
- add_executable(${target}.measure EXCLUDE_FROM_ALL ${CMAKE_CURRENT_BINARY_DIR}/${target}.measure.cpp)
- target_link_libraries(${target}.measure hana)
+ file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${target}.measure.cpp" "")
+ add_executable(${target}.measure EXCLUDE_FROM_ALL "${CMAKE_CURRENT_BINARY_DIR}/${target}.measure.cpp")
+ target_include_directories(${target}.measure PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}")
+ if (MPL11_FOUND)
+ target_include_directories(${target}.measure PRIVATE "${MPL11_INCLUDE_DIR}")
+ endif()
+ if (Meta_FOUND)
+ target_include_directories(${target}.measure PRIVATE "${Meta_INCLUDE_DIR}")
+ endif()
+ if (Boost_FOUND)
+ target_link_libraries(${target}.measure PRIVATE Boost::boost)
+ endif()
+ boost_hana_set_test_properties(${target}.measure)
+ if (BOOST_HANA_HAS_FTEMPLATE_DEPTH)
+ target_compile_options(${target}.measure PRIVATE -ftemplate-depth=-1)
+ endif()
set_target_properties(${target}.measure PROPERTIES RULE_LAUNCH_COMPILE "${CMAKE_CURRENT_BINARY_DIR}/measure.rb")
set_property(TARGET ${target}.measure APPEND PROPERTY INCLUDE_DIRECTORIES "${directory}")
add_custom_target(${target}.measure.run COMMAND ${target}.measure)
add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${target}.json"
- COMMAND ${RUBY_EXECUTABLE} -r tilt -r ${CMAKE_CURRENT_BINARY_DIR}/measure.rb
+ COMMAND ${RUBY_EXECUTABLE} -r tilt -r "${CMAKE_CURRENT_BINARY_DIR}/measure.rb"
-e "MEASURE_FILE = '${CMAKE_CURRENT_BINARY_DIR}/${target}.measure.cpp'"
-e "MEASURE_TARGET = '${target}.measure'"
-e "json = Tilt::ERBTemplate.new('${CMAKE_CURRENT_BINARY_DIR}/${target}.erb.json').render"
-e "File.open('${CMAKE_CURRENT_BINARY_DIR}/${target}.json', 'w') { |f| f.write(json) } "
WORKING_DIRECTORY ${directory}
- DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${target}.erb.json ${cpp_files}
+ DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${target}.erb.json" ${cpp_files}
VERBATIM USES_TERMINAL
COMMENT "Generating dataset for ${target}"
)