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