Skip to content

Commit 901c06a

Browse files
committed
Add add_umf_benchmark() to remove duplicated code in benchmarks CMakeLists
Signed-off-by: Lukasz Dorau <[email protected]>
1 parent 69cdec6 commit 901c06a

File tree

1 file changed

+72
-65
lines changed

1 file changed

+72
-65
lines changed

benchmark/CMakeLists.txt

Lines changed: 72 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -2,92 +2,99 @@
22
# Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT.
33
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
44

5-
include(FindThreads)
6-
75
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
86
message(WARNING "The benchmarks SHOULD NOT be run in the Debug build type!")
97
endif()
108

9+
if (UMF_BUILD_BENCHMARKS_MT)
10+
include(FindThreads)
11+
endif()
12+
13+
function(add_umf_benchmark)
14+
# NAME - a name of the benchmark
15+
# SRCS - source files
16+
# LIBS - libraries to be linked with
17+
# LIBDIRS - directories of libraries to be linked with
18+
set(oneValueArgs NAME)
19+
set(multiValueArgs SRCS LIBS LIBDIRS)
20+
cmake_parse_arguments(ARG "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
21+
22+
set(BENCH_NAME umf-bench-${ARG_NAME})
23+
24+
set(BENCH_LIBS umf ${ARG_LIBS})
25+
26+
add_umf_executable(NAME ${BENCH_NAME} SRCS ${ARG_SRCS} LIBS ${BENCH_LIBS})
27+
28+
target_include_directories(${BENCH_NAME} PRIVATE
29+
${UMF_CMAKE_SOURCE_DIR}/include
30+
${UMF_CMAKE_SOURCE_DIR}/src/utils)
31+
32+
target_link_directories(${BENCH_NAME} PRIVATE ${ARG_LIBDIRS})
33+
34+
add_test(NAME ${BENCH_NAME}
35+
COMMAND ${BENCH_NAME}
36+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
37+
38+
# Benchmark passes if it prints "PASSED" in the output,
39+
# because ubench of scalable pool fails if the confidence interval
40+
# exceeds maximum permitted 2.5%.
41+
set_tests_properties(${BENCH_NAME} PROPERTIES
42+
LABELS "benchmark"
43+
PASS_REGULAR_EXPRESSION "PASSED")
44+
45+
if(WINDOWS)
46+
# append PATH to DLLs
47+
set(DLL_PATH_LIST "PATH=path_list_append:../bin/$<CONFIG>")
48+
if(LIBHWLOC_DLL_DIRS)
49+
set(DLL_PATH_LIST "${DLL_PATH_LIST};PATH=path_list_append:${LIBHWLOC_DLL_DIRS}")
50+
endif()
51+
set_property(TEST ${BENCH_NAME} PROPERTY ENVIRONMENT_MODIFICATION "${DLL_PATH_LIST}")
52+
endif()
53+
54+
if (UMF_BUILD_OS_MEMORY_PROVIDER)
55+
target_compile_definitions(${BENCH_NAME} PRIVATE UMF_BUILD_OS_MEMORY_PROVIDER=1)
56+
endif()
57+
if (UMF_BUILD_LIBUMF_POOL_DISJOINT)
58+
target_compile_definitions(${BENCH_NAME} PRIVATE UMF_BUILD_LIBUMF_POOL_DISJOINT=1)
59+
endif()
60+
if (UMF_BUILD_LIBUMF_POOL_JEMALLOC)
61+
target_compile_definitions(${BENCH_NAME} PRIVATE UMF_BUILD_LIBUMF_POOL_JEMALLOC=1)
62+
endif()
63+
if (UMF_BUILD_LIBUMF_POOL_SCALABLE)
64+
target_compile_definitions(${BENCH_NAME} PRIVATE UMF_BUILD_LIBUMF_POOL_SCALABLE=1)
65+
endif()
66+
endfunction()
67+
68+
# optional libraries
1169
if(UMF_BUILD_LIBUMF_POOL_DISJOINT)
1270
set(LIBS_OPTIONAL ${LIBS_OPTIONAL} disjoint_pool)
1371
endif()
14-
1572
if(UMF_BUILD_LIBUMF_POOL_JEMALLOC)
1673
set(LIBS_OPTIONAL ${LIBS_OPTIONAL} jemalloc_pool)
1774
endif()
18-
1975
if(UMF_BUILD_LIBUMF_POOL_SCALABLE)
2076
set(LIBS_OPTIONAL ${LIBS_OPTIONAL} scalable_pool)
2177
endif()
22-
23-
add_executable(ubench ubench.c)
24-
2578
if(LINUX)
26-
set(LIBS_LINUX m)
79+
set(LIBS_OPTIONAL ${LIBS_OPTIONAL} m)
2780
endif()
28-
29-
add_dependencies(ubench
30-
umf
31-
${LIBS_OPTIONAL})
32-
3381
if(UMF_BUILD_OS_MEMORY_PROVIDER)
3482
set(LIBS_OPTIONAL ${LIBS_OPTIONAL} ${LIBHWLOC_LIBRARIES})
3583
set(LIB_DIRS_OPTIONAL ${LIB_DIRS_OPTIONAL} ${LIBHWLOC_LIBRARY_DIRS})
3684
endif()
3785

38-
target_include_directories(ubench PRIVATE ${UMF_CMAKE_SOURCE_DIR}/include/ ${UMF_CMAKE_SOURCE_DIR}/src/utils/)
86+
# BENCHMARKS
3987

40-
target_link_directories(ubench PRIVATE ${LIB_DIRS_OPTIONAL})
41-
42-
target_link_libraries(ubench
43-
umf
44-
${LIBS_OPTIONAL}
45-
${CMAKE_THREAD_LIBS_INIT}
46-
${LIBS_LINUX})
88+
add_umf_benchmark(
89+
NAME ubench
90+
SRCS ubench.c
91+
LIBS ${LIBS_OPTIONAL}
92+
LIBDIRS ${LIB_DIRS_OPTIONAL})
4793

4894
if (UMF_BUILD_BENCHMARKS_MT)
49-
add_executable(multithread_bench multithread.cpp)
50-
target_link_directories(multithread_bench PRIVATE ${LIB_DIRS_OPTIONAL})
51-
target_link_libraries(multithread_bench
52-
umf
53-
${LIBS_OPTIONAL}
54-
${CMAKE_THREAD_LIBS_INIT}
55-
${LIBS_LINUX})
56-
target_include_directories(multithread_bench PRIVATE ${UMF_CMAKE_SOURCE_DIR}/include/)
57-
endif()
58-
59-
if (UMF_BUILD_OS_MEMORY_PROVIDER)
60-
target_compile_definitions(ubench PRIVATE UMF_BUILD_OS_MEMORY_PROVIDER=1)
61-
62-
if (UMF_BUILD_BENCHMARKS_MT)
63-
target_compile_definitions(multithread_bench PRIVATE UMF_BUILD_OS_MEMORY_PROVIDER=1)
64-
endif()
65-
endif()
66-
67-
if (UMF_BUILD_OS_MEMORY_PROVIDER)
68-
target_compile_definitions(ubench PRIVATE UMF_BUILD_OS_MEMORY_PROVIDER=1)
69-
endif()
70-
71-
if (UMF_BUILD_LIBUMF_POOL_DISJOINT)
72-
target_compile_definitions(ubench PRIVATE UMF_BUILD_LIBUMF_POOL_DISJOINT=1)
73-
74-
if (UMF_BUILD_BENCHMARKS_MT)
75-
target_compile_definitions(multithread_bench PRIVATE UMF_BUILD_LIBUMF_POOL_DISJOINT=1)
76-
endif()
77-
endif()
78-
79-
if (UMF_BUILD_LIBUMF_POOL_JEMALLOC)
80-
target_compile_definitions(ubench PRIVATE UMF_BUILD_LIBUMF_POOL_JEMALLOC=1)
81-
82-
if (UMF_BUILD_BENCHMARKS_MT)
83-
target_compile_definitions(multithread_bench PRIVATE UMF_BUILD_LIBUMF_POOL_JEMALLOC=1)
84-
endif()
85-
endif()
86-
87-
if (UMF_BUILD_LIBUMF_POOL_SCALABLE)
88-
target_compile_definitions(ubench PRIVATE UMF_BUILD_LIBUMF_POOL_SCALABLE=1)
89-
90-
if (UMF_BUILD_BENCHMARKS_MT)
91-
target_compile_definitions(multithread_bench PRIVATE UMF_BUILD_LIBUMF_POOL_SCALABLE=1)
92-
endif()
95+
add_umf_benchmark(
96+
NAME multithreaded
97+
SRCS multithread.cpp
98+
LIBS ${LIBS_OPTIONAL} ${CMAKE_THREAD_LIBS_INIT}
99+
LIBDIRS ${LIB_DIRS_OPTIONAL})
93100
endif()

0 commit comments

Comments
 (0)