diff options
Diffstat (limited to 'neozip/test/benchmarks/CMakeLists.txt')
| -rw-r--r-- | neozip/test/benchmarks/CMakeLists.txt | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/neozip/test/benchmarks/CMakeLists.txt b/neozip/test/benchmarks/CMakeLists.txt new file mode 100644 index 0000000000..df6f5a7e69 --- /dev/null +++ b/neozip/test/benchmarks/CMakeLists.txt @@ -0,0 +1,126 @@ +cmake_minimum_required(VERSION 3.14...4.2.1) + +include(FetchContent) + +if(NOT DEFINED CMAKE_CXX_STANDARD) + set(CMAKE_CXX_STANDARD 11) +endif() +if(NOT DEFINED CMAKE_CXX_STANDARD_REQUIRED) + set(CMAKE_CXX_STANDARD_REQUIRED ON) +endif() +if(NOT DEFINED CMAKE_CXX_EXTENSIONS) + set(CMAKE_CXX_EXTENSIONS ON) +endif() + +# Search for Google benchmark package +find_package(benchmark QUIET) +if(NOT benchmark_FOUND) + # Fetch google benchmark source code from official repository + set(BENCHMARK_ENABLE_TESTING OFF) + + # Allow specifying alternative Google benchmark repository + if(NOT DEFINED GBENCHMARK_REPOSITORY) + set(GBENCHMARK_REPOSITORY https://github.com/google/benchmark.git) + endif() + if(NOT DEFINED GBENCHMARK_TAG) + set(GBENCHMARK_TAG v1.9.4) + endif() + + FetchContent_Declare(benchmark + GIT_REPOSITORY ${GBENCHMARK_REPOSITORY} + GIT_TAG ${GBENCHMARK_TAG} + ${ZNG_FetchContent_Declare_EXCLUDE_FROM_ALL}) + + ZNG_FetchContent_MakeAvailable(benchmark) +endif() + +# Public API benchmarks +set(BENCH_PUBLIC_SRCS + benchmark_compress.cc + benchmark_inflate.cc + benchmark_uncompress.cc + benchmark_main.cc + ) + +# Internal benchmarks +set(BENCH_INTERNAL_SRCS + benchmark_adler32.cc + benchmark_adler32_copy.cc + benchmark_compare256.cc + benchmark_compare256_rle.cc + benchmark_crc32.cc + benchmark_crc32_copy.cc + benchmark_deflate.cc + benchmark_insert_string.cc + benchmark_slidehash.cc + ) + +add_executable(benchmark_zlib ${BENCH_PUBLIC_SRCS}) + +target_compile_definitions(benchmark_zlib PRIVATE -DBENCHMARK_STATIC_DEFINE) +target_include_directories(benchmark_zlib PRIVATE + ${PROJECT_SOURCE_DIR} + ${PROJECT_BINARY_DIR} + ${benchmark_SOURCE_DIR}/benchmark/include) + +target_link_libraries(benchmark_zlib benchmark::benchmark) +if(ZLIB_LIBRARY) + target_link_libraries(benchmark_zlib ${ZLIB_LIBRARY}) +else() + target_sources(benchmark_zlib PRIVATE ${BENCH_INTERNAL_SRCS}) + target_link_libraries(benchmark_zlib zlib-ng-static) +endif() + +if(WIN32) + target_link_libraries(benchmark_zlib shlwapi) +endif() + +add_test(NAME benchmark_zlib + COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:benchmark_zlib> "--benchmark_min_time=0") + +if(WITH_BENCHMARK_APPS) + option(BUILD_ALT_BENCH "Link against alternative zlib implementation" OFF) + + # Search for libpng package + find_package(PNG QUIET) + + if(NOT PNG_FOUND) + FetchContent_Declare(PNG + GIT_REPOSITORY https://github.com/glennrp/libpng.git + ${ZNG_FetchContent_Declare_EXCLUDE_FROM_ALL}) + + ZNG_FetchContent_MakeAvailable(PNG) + set(PNG_INCLUDE_DIR ${png_SOURCE_DIR}) + endif() + + set(BENCH_APP_SRCS + benchmark_png_encode.cc + benchmark_png_decode.cc + benchmark_main.cc + ) + + add_executable(benchmark_zlib_apps ${BENCH_APP_SRCS}) + + if(DEFINED BUILD_ALT_BENCH) + set(ZLIB_ALT_LIB "libz.a" CACHE FILEPATH "Optional alternative zlib implementation (defaults to stock zlib)") + add_executable(benchmark_zlib_apps_alt ${BENCH_APP_SRCS}) + target_link_libraries(benchmark_zlib_apps_alt libpng.a ${ZLIB_ALT_LIB} benchmark::benchmark) + target_compile_definitions(benchmark_zlib_apps_alt PRIVATE BUILD_ALT=1) + target_include_directories(benchmark_zlib_apps_alt PRIVATE + ${PROJECT_SOURCE_DIR} + ${PROJECT_BINARY_DIR} + ${PNG_INCLUDE_DIR} + ${benchmark_SOURCE_DIR}/benchmark/include) + endif() + + target_include_directories(benchmark_zlib_apps PRIVATE + ${PROJECT_SOURCE_DIR} + ${PROJECT_BINARY_DIR} + ${PNG_INCLUDE_DIR} + ${benchmark_SOURCE_DIR}/benchmark/include) + + # We need the static png library if we're statically linking to zlib, + # otherwise it will resolve these things in the system provided dynamic + # libraries (likely linked to stock zlib) + target_link_libraries(benchmark_zlib_apps libpng.a zlib-ng-static benchmark::benchmark) +endif() |
