• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1cmake_minimum_required(VERSION 3.12)
2
3include(FetchContent)
4
5set(CMAKE_CXX_STANDARD 11)
6set(CMAKE_CXX_STANDARD_REQUIRED ON)
7set(CMAKE_CXX_EXTENSIONS ON)
8enable_language(CXX)
9
10# Search for Google benchmark package
11find_package(benchmark QUIET)
12if(NOT benchmark_FOUND)
13    # Fetch google benchmark source code from official repository
14    set(BENCHMARK_ENABLE_TESTING OFF)
15    FetchContent_Declare(benchmark
16        GIT_REPOSITORY https://github.com/google/benchmark.git)
17    FetchContent_MakeAvailable(benchmark)
18    FetchContent_GetProperties(benchmark)
19
20    if(NOT benchmark_POPULATED)
21        FetchContent_Populate(benchmark)
22    endif()
23endif()
24
25add_executable(benchmark_zlib
26    benchmark_adler32.cc
27    benchmark_adler32_copy.cc
28    benchmark_compare256.cc
29    benchmark_crc32.cc
30    benchmark_main.cc
31    benchmark_slidehash.cc
32    )
33
34target_include_directories(benchmark_zlib PRIVATE
35    ${CMAKE_SOURCE_DIR}
36    ${CMAKE_BINARY_DIR}
37    ${benchmark_SOURCE_DIR}/benchmark/include)
38
39target_link_libraries(benchmark_zlib zlibstatic benchmark::benchmark)
40if(WIN32)
41    target_link_libraries(benchmark_zlib shlwapi)
42endif()
43
44if(ZLIB_ENABLE_TESTS)
45    add_test(NAME benchmark_zlib
46        COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:benchmark_zlib>)
47endif()
48
49if(WITH_BENCHMARK_APPS)
50    option(BUILD_ALT_BENCH "Link against alternative zlib implementation" OFF)
51
52    # Search for libpng package
53    find_package(PNG QUIET)
54
55    if(NOT PNG_FOUND)
56        FetchContent_Declare(PNG
57            GIT_REPOSITORY https://github.com/glennrp/libpng.git)
58        FetchContent_MakeAvailable(PNG)
59        FetchContent_GetProperties(PNG)
60
61        if(NOT PNG_POPULATED)
62            FetchContent_Populate(PNG)
63        endif()
64    endif()
65
66    set(BENCH_APP_SRCS
67        benchmark_png_encode.cc
68        benchmark_png_decode.cc
69        benchmark_main.cc
70    )
71
72    add_executable(benchmark_zlib_apps ${BENCH_APP_SRCS})
73
74    if(DEFINED BUILD_ALT_BENCH)
75        set(ZLIB_ALT_LIB "libz.a" CACHE FILEPATH "Optional alternative zlib implementation (defaults to stock zlib)")
76        add_executable(benchmark_zlib_apps_alt ${BENCH_APP_SRCS})
77        target_link_libraries(benchmark_zlib_apps_alt libpng.a ${ZLIB_ALT_LIB} benchmark::benchmark)
78        target_compile_definitions(benchmark_zlib_apps_alt PRIVATE BUILD_ALT=1)
79        target_include_directories(benchmark_zlib_apps_alt PRIVATE
80            ${CMAKE_SOURCE_DIR}
81            ${CMAKE_BINARY_DIR}
82            ${PNG_INCLUDE_DIR}
83            ${benchmark_SOURCE_DIR}/benchmark/include)
84    endif()
85
86    target_include_directories(benchmark_zlib_apps PRIVATE
87        ${CMAKE_SOURCE_DIR}
88        ${CMAKE_BINARY_DIR}
89        ${PNG_INCLUDE_DIR}
90        ${benchmark_SOURCE_DIR}/benchmark/include)
91
92    # We need the static png library if we're statically linking to zlib,
93    # otherwise it will resolve these things in the system provided dynamic
94    # libraries (likely linked to stock zlib)
95    target_link_libraries(benchmark_zlib_apps libpng.a zlibstatic benchmark::benchmark)
96endif()
97