diff options
Diffstat (limited to 'benchmark/CMakeLists.txt')
-rw-r--r-- | benchmark/CMakeLists.txt | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/benchmark/CMakeLists.txt b/benchmark/CMakeLists.txt new file mode 100644 index 000000000000..0f9061aa3cd3 --- /dev/null +++ b/benchmark/CMakeLists.txt @@ -0,0 +1,128 @@ + +# 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/) |