129 lines
3.6 KiB
Text
129 lines
3.6 KiB
Text
|
|
||
|
# Config
|
||
|
# ======
|
||
|
|
||
|
option(CHECK_BENCHMARKS "Run benchmarks on check target" off)
|
||
|
option(BENCHMARK_DISABLE_GC "Disable gc during a measurement")
|
||
|
|
||
|
set(BENCHMARK_PARAM "N:1000" CACHE STRING "Benchmark parameters")
|
||
|
set(BENCHMARK_SAMPLES "20" CACHE STRING "Benchmark samples")
|
||
|
|
||
|
# Dependencies
|
||
|
# ============
|
||
|
|
||
|
find_package(RRB)
|
||
|
|
||
|
if (NOT RRB_FOUND)
|
||
|
message(STATUS "Disabling benchmarks")
|
||
|
return()
|
||
|
endif()
|
||
|
|
||
|
# These are expected to be in the include path, the nix-shell
|
||
|
# environment installs them:
|
||
|
#
|
||
|
# https://github.com/marcusz/steady
|
||
|
# https://github.com/deepsea-inria/chunkedseq.git
|
||
|
# https://github.com/rsms/immutable-cpp.git
|
||
|
|
||
|
# Targets
|
||
|
# =======
|
||
|
|
||
|
add_custom_target(benchmarks
|
||
|
COMMENT "Build all benchmarks.")
|
||
|
|
||
|
execute_process(
|
||
|
COMMAND git log -1 --format=%h
|
||
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||
|
OUTPUT_VARIABLE immer_git_commit_hash
|
||
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||
|
|
||
|
execute_process(
|
||
|
COMMAND git status --porcelain
|
||
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||
|
OUTPUT_VARIABLE immer_git_status
|
||
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||
|
|
||
|
if (NOT immer_git_status STREQUAL "")
|
||
|
set(immer_git_commit_hash "${immer_git_commit_hash}+")
|
||
|
endif()
|
||
|
|
||
|
site_name(immer_hostname)
|
||
|
|
||
|
get_filename_component(immer_compiler_name "${CMAKE_CXX_COMPILER}" NAME)
|
||
|
|
||
|
set(immer_benchmark_report_base_dir "${CMAKE_SOURCE_DIR}/reports")
|
||
|
set(immer_benchmark_report_dir "${immer_benchmark_report_base_dir}/report_\
|
||
|
${immer_git_commit_hash}_\
|
||
|
${immer_hostname}_\
|
||
|
${immer_compiler_name}_\
|
||
|
${BENCHMARK_PARAM}_\
|
||
|
s${BENCHMARK_SAMPLES}")
|
||
|
|
||
|
if(DISABLE_FREE_LIST)
|
||
|
set(immer_benchmark_report_dir "${immer_benchmark_report_dir}_nofl")
|
||
|
endif()
|
||
|
|
||
|
if(DISABLE_THREAD_SAFETY)
|
||
|
set(immer_benchmark_report_dir "${immer_benchmark_report_dir}_nots")
|
||
|
endif()
|
||
|
|
||
|
if(BENCHMARK_DISABLE_GC)
|
||
|
set(immer_benchmark_report_dir "${immer_benchmark_report_dir}_nogc")
|
||
|
endif()
|
||
|
|
||
|
if(CHECK_BENCHMARKS)
|
||
|
add_dependencies(check benchmarks)
|
||
|
endif()
|
||
|
|
||
|
add_custom_target(benchmark-report-dir
|
||
|
COMMAND ${CMAKE_COMMAND}
|
||
|
-E make_directory ${immer_benchmark_report_dir})
|
||
|
|
||
|
file(GLOB_RECURSE immer_benchmarks "*.cpp")
|
||
|
foreach(_file IN LISTS immer_benchmarks)
|
||
|
immer_target_name_for(_target _output "${_file}")
|
||
|
add_executable(${_target} EXCLUDE_FROM_ALL "${_file}")
|
||
|
set_target_properties(${_target} PROPERTIES OUTPUT_NAME ${_output})
|
||
|
add_dependencies(benchmarks ${_target})
|
||
|
add_dependencies(${_target} benchmark-report-dir)
|
||
|
target_compile_options(${_target} PUBLIC -Wno-unused-function)
|
||
|
target_compile_definitions(${_target} PUBLIC
|
||
|
NONIUS_RUNNER
|
||
|
IMMER_BENCHMARK_LIBRRB=1
|
||
|
IMMER_BENCHMARK_STEADY=1
|
||
|
IMMER_BENCHMARK_EXPERIMENTAL=0
|
||
|
IMMER_BENCHMARK_DISABLE_GC=${BENCHMARK_DISABLE_GC}
|
||
|
IMMER_BENCHMARK_BOOST_COROUTINE=${ENABLE_BOOST_COROUTINE})
|
||
|
target_link_libraries(${_target} PUBLIC
|
||
|
immer-dev
|
||
|
${RRB_LIBRARIES})
|
||
|
target_include_directories(${_target} SYSTEM PUBLIC
|
||
|
${RRB_INCLUDE_DIR})
|
||
|
if(CHECK_BENCHMARKS)
|
||
|
add_test("benchmark/${_output}" "${CMAKE_SOURCE_DIR}/tools/with-tee.bash"
|
||
|
${immer_benchmark_report_dir}/${_target}.out
|
||
|
"${CMAKE_CURRENT_BINARY_DIR}/${_output}" -v
|
||
|
-t ${_target}
|
||
|
-r html
|
||
|
-s ${BENCHMARK_SAMPLES}
|
||
|
-p ${BENCHMARK_PARAM}
|
||
|
-o ${immer_benchmark_report_dir}/${_target}.html)
|
||
|
endif()
|
||
|
endforeach()
|
||
|
|
||
|
set(immer_ssh_method
|
||
|
ssh -p 5488
|
||
|
-o StrictHostKeyChecking=no
|
||
|
-i ${CMAKE_SOURCE_DIR}/tools/travis/ssh-key)
|
||
|
|
||
|
add_custom_target(upload-benchmark-reports
|
||
|
COMMAND
|
||
|
rsync -av -e \"${immer_ssh_method}\"
|
||
|
${immer_benchmark_report_base_dir}
|
||
|
raskolnikov@sinusoid.es:public/misc/immer/)
|
||
|
|
||
|
add_custom_target(copy-benchmark-reports
|
||
|
COMMAND
|
||
|
rsync -av ${immer_benchmark_report_base_dir}
|
||
|
~/public/misc/immer/)
|