blob: cfcb360b5cc0becf51fb2c48ff322aa31b2304c7 [file] [log] [blame]
cmake_minimum_required(VERSION 3.12)
include(FetchContent)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS ON)
enable_language(CXX)
# 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.7.0)
endif()
FetchContent_Declare(benchmark
GIT_REPOSITORY ${GBENCHMARK_REPOSITORY}
GIT_TAG ${GBENCHMARK_TAG})
FetchContent_GetProperties(benchmark)
if(NOT benchmark_POPULATED)
FetchContent_Populate(benchmark)
add_subdirectory(${benchmark_SOURCE_DIR} ${benchmark_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()
endif()
add_executable(benchmark_zlib
benchmark_adler32.cc
benchmark_adler32_copy.cc
benchmark_compare256.cc
benchmark_crc32.cc
benchmark_main.cc
benchmark_slidehash.cc
)
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 zlibstatic benchmark::benchmark)
if(WIN32)
target_link_libraries(benchmark_zlib shlwapi)
endif()
if(ZLIB_ENABLE_TESTS)
add_test(NAME benchmark_zlib
COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:benchmark_zlib>)
endif()
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)
FetchContent_GetProperties(PNG)
if(NOT PNG_POPULATED)
FetchContent_Populate(PNG)
add_subdirectory(${PNG_SOURCE_DIR} ${PNG_BINARY_DIR})
endif()
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 zlibstatic benchmark::benchmark)
endif()