Blob Blame History Raw
INCLUDE(CheckLibraryExists)
INCLUDE(ExternalProject)

option(HDR_HISTOGRAM_BUILD_BENCHMARK "Build benchmark" OFF)

if (HDR_HISTOGRAM_BUILD_BENCHMARK)
    if (UNIX)
        ExternalProject_Add(
                google_benchmark
                URL ${CMAKE_CURRENT_SOURCE_DIR}/../lib/benchmark-1.5.0.zip
                URL_MD5 1af48846917b9730bee1848f6e38f563
                CMAKE_ARGS -DBENCHMARK_ENABLE_TESTING=OFF -DBENCHMARK_ENABLE_INSTALL=OFF
                SOURCE_DIR        "${CMAKE_CURRENT_BINARY_DIR}/googlebenchmark-src"
                BINARY_DIR        "${CMAKE_CURRENT_BINARY_DIR}/googlebenchmark-build"
                INSTALL_COMMAND   ""
        )

        ExternalProject_Get_Property(google_benchmark source_dir)
        set(GOOGLE_BENCHMARK_SOURCE_DIR ${source_dir})
        ExternalProject_Get_Property(google_benchmark binary_dir)
        set(GOOGLE_BENCHMARK_BINARY_DIR ${binary_dir})

        set(BENCHMARK_ENABLE_TESTING OFF CACHE BOOL "Suppressing benchmark's tests" FORCE)
        add_executable(hdr_histogram_benchmark hdr_histogram_benchmark.cpp)
        target_include_directories(hdr_histogram_benchmark PUBLIC ${GOOGLE_BENCHMARK_SOURCE_DIR}/include)
        target_link_directories(hdr_histogram_benchmark PUBLIC ${GOOGLE_BENCHMARK_BINARY_DIR}/src)
        target_link_libraries(hdr_histogram_benchmark benchmark)
        target_link_libraries(hdr_histogram_benchmark hdr_histogram_static m z pthread)
    else()
        message(WARNING
              "google.benchmark - microbenchmarks disabled on WIN32 platforms")
    endif()
endif()

add_executable(hdr_histogram_test hdr_histogram_test.c minunit.c)
add_executable(hdr_histogram_atomic_test hdr_histogram_atomic_test.c minunit.c)
add_executable(hdr_histogram_log_test hdr_histogram_log_test.c minunit.c)
add_executable(hdr_atomic_test hdr_atomic_test.c minunit.c hdr_test_util.h)

add_executable(perftest hdr_histogram_perf.c)

if (WIN32)
    add_library(z STATIC IMPORTED)
    set_property(TARGET z PROPERTY IMPORTED_LOCATION ${ZLIB_LIBRARIES})

    target_link_libraries(hdr_histogram_test hdr_histogram_static ws2_32)
    target_link_libraries(hdr_histogram_atomic_test hdr_histogram_static ws2_32)
    target_link_libraries(hdr_histogram_log_test hdr_histogram_static z ws2_32)
    target_link_libraries(perftest hdr_histogram_static z ws2_32)
    target_link_libraries(hdr_atomic_test z ws2_32)
else()
    target_link_libraries(hdr_histogram_test hdr_histogram_static m)
    target_link_libraries(hdr_histogram_atomic_test hdr_histogram_static m)
    target_link_libraries(hdr_histogram_log_test hdr_histogram_static m z)
    target_link_libraries(perftest hdr_histogram_static m z)
    target_link_libraries(hdr_atomic_test z)
endif()

CHECK_LIBRARY_EXISTS(rt clock_gettime "" RT_EXISTS)
if (RT_EXISTS)
    target_link_libraries(hdr_histogram_log_test rt)
    target_link_libraries(perftest rt)
endif (RT_EXISTS)

install(TARGETS hdr_histogram_test DESTINATION bin)
install(TARGETS hdr_histogram_atomic_test DESTINATION bin)
install(TARGETS hdr_histogram_log_test DESTINATION bin)
install(TARGETS perftest DESTINATION bin)

add_test(Histogram hdr_histogram_test)
add_test(HistogramAtomic hdr_histogram_atomic_test)
add_test(HistogramLogging hdr_histogram_log_test)
add_test(Atomic hdr_atomic_test)

if (UNIX)
    add_executable(hdr_histogram_atomic_concurrency_test hdr_histogram_atomic_concurrency_test.c minunit.c)
    target_link_libraries(hdr_histogram_atomic_concurrency_test hdr_histogram_static m pthread)
    add_test(HistogramAtomicConcurrency hdr_histogram_atomic_concurrency_test)
endif()

configure_file(jHiccup-2.0.1.logV0.hlog jHiccup-2.0.1.logV0.hlog COPYONLY)
configure_file(jHiccup-2.0.6.logV1.hlog jHiccup-2.0.6.logV1.hlog COPYONLY)
configure_file(jHiccup-2.0.7S.logV2.hlog jHiccup-2.0.7S.logV2.hlog COPYONLY)
configure_file(jHiccup-2.0.7S.logV3.hlog jHiccup-2.0.7S.logV3.hlog COPYONLY)