1*86ee64e7SAndroid Build Coastguard Workercmake_minimum_required(VERSION 2.4.4...3.15.0) 2*86ee64e7SAndroid Build Coastguard Workerset(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON) 3*86ee64e7SAndroid Build Coastguard Worker 4*86ee64e7SAndroid Build Coastguard Workerproject(zlib C) 5*86ee64e7SAndroid Build Coastguard Worker 6*86ee64e7SAndroid Build Coastguard Workerset(VERSION "1.3.0.1") 7*86ee64e7SAndroid Build Coastguard Worker 8*86ee64e7SAndroid Build Coastguard Workerset(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation directory for executables") 9*86ee64e7SAndroid Build Coastguard Workerset(INSTALL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE PATH "Installation directory for libraries") 10*86ee64e7SAndroid Build Coastguard Workerset(INSTALL_INC_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE PATH "Installation directory for headers") 11*86ee64e7SAndroid Build Coastguard Workerset(INSTALL_MAN_DIR "${CMAKE_INSTALL_PREFIX}/share/man" CACHE PATH "Installation directory for manual pages") 12*86ee64e7SAndroid Build Coastguard Workerset(INSTALL_PKGCONFIG_DIR "${CMAKE_INSTALL_PREFIX}/share/pkgconfig" CACHE PATH "Installation directory for pkgconfig (.pc) files") 13*86ee64e7SAndroid Build Coastguard Worker 14*86ee64e7SAndroid Build Coastguard Workerinclude(CheckTypeSize) 15*86ee64e7SAndroid Build Coastguard Workerinclude(CheckFunctionExists) 16*86ee64e7SAndroid Build Coastguard Workerinclude(CheckIncludeFile) 17*86ee64e7SAndroid Build Coastguard Workerinclude(CheckCSourceCompiles) 18*86ee64e7SAndroid Build Coastguard Workerenable_testing() 19*86ee64e7SAndroid Build Coastguard Worker 20*86ee64e7SAndroid Build Coastguard Workercheck_include_file(sys/types.h HAVE_SYS_TYPES_H) 21*86ee64e7SAndroid Build Coastguard Workercheck_include_file(stdint.h HAVE_STDINT_H) 22*86ee64e7SAndroid Build Coastguard Workercheck_include_file(stddef.h HAVE_STDDEF_H) 23*86ee64e7SAndroid Build Coastguard Worker 24*86ee64e7SAndroid Build Coastguard Workeroption(ENABLE_SIMD_OPTIMIZATIONS "Enable all SIMD optimizations" OFF) 25*86ee64e7SAndroid Build Coastguard Workeroption(ENABLE_SIMD_AVX512 "Enable SIMD AXV512 optimizations" OFF) 26*86ee64e7SAndroid Build Coastguard Workeroption(USE_ZLIB_RABIN_KARP_HASH "Enable bitstream compatibility with canonical zlib" OFF) 27*86ee64e7SAndroid Build Coastguard Workeroption(BUILD_UNITTESTS "Enable standalone unit tests build" OFF) 28*86ee64e7SAndroid Build Coastguard Workeroption(BUILD_MINIZIP_BIN "Enable building minzip_bin tool" OFF) 29*86ee64e7SAndroid Build Coastguard Workeroption(BUILD_ZPIPE "Enable building zpipe tool" OFF) 30*86ee64e7SAndroid Build Coastguard Workeroption(BUILD_MINIGZIP "Enable building minigzip tool" OFF) 31*86ee64e7SAndroid Build Coastguard Worker 32*86ee64e7SAndroid Build Coastguard Workerif (USE_ZLIB_RABIN_KARP_HASH) 33*86ee64e7SAndroid Build Coastguard Worker add_definitions(-DUSE_ZLIB_RABIN_KARP_ROLLING_HASH) 34*86ee64e7SAndroid Build Coastguard Workerendif() 35*86ee64e7SAndroid Build Coastguard Worker 36*86ee64e7SAndroid Build Coastguard Worker# TODO(cavalcantii): add support for other OSes (e.g. Android, Fuchsia, etc) 37*86ee64e7SAndroid Build Coastguard Worker# and architectures (e.g. RISCV). 38*86ee64e7SAndroid Build Coastguard Workerif (ENABLE_SIMD_OPTIMIZATIONS) 39*86ee64e7SAndroid Build Coastguard Worker # Apparently some environments (e.g. CentOS) require to explicitly link 40*86ee64e7SAndroid Build Coastguard Worker # with pthread and that is required by the CPU features detection code. 41*86ee64e7SAndroid Build Coastguard Worker find_package (Threads REQUIRED) 42*86ee64e7SAndroid Build Coastguard Worker SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread") 43*86ee64e7SAndroid Build Coastguard Worker SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread") 44*86ee64e7SAndroid Build Coastguard Worker 45*86ee64e7SAndroid Build Coastguard Worker if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") 46*86ee64e7SAndroid Build Coastguard Worker add_definitions(-DINFLATE_CHUNK_SIMD_SSE2) 47*86ee64e7SAndroid Build Coastguard Worker add_definitions(-DADLER32_SIMD_SSSE3) 48*86ee64e7SAndroid Build Coastguard Worker add_definitions(-DINFLATE_CHUNK_READ_64LE) 49*86ee64e7SAndroid Build Coastguard Worker add_definitions(-DCRC32_SIMD_SSE42_PCLMUL) 50*86ee64e7SAndroid Build Coastguard Worker if (ENABLE_SIMD_AVX512) 51*86ee64e7SAndroid Build Coastguard Worker add_definitions(-DCRC32_SIMD_AVX512_PCLMUL) 52*86ee64e7SAndroid Build Coastguard Worker add_compile_options(-mvpclmulqdq -msse2 -mavx512f -mpclmul) 53*86ee64e7SAndroid Build Coastguard Worker else() 54*86ee64e7SAndroid Build Coastguard Worker add_compile_options(-msse4.2 -mpclmul) 55*86ee64e7SAndroid Build Coastguard Worker endif() 56*86ee64e7SAndroid Build Coastguard Worker add_definitions(-DDEFLATE_SLIDE_HASH_SSE2) 57*86ee64e7SAndroid Build Coastguard Worker # Required by CPU features detection code. 58*86ee64e7SAndroid Build Coastguard Worker add_definitions(-DX86_NOT_WINDOWS) 59*86ee64e7SAndroid Build Coastguard Worker endif() 60*86ee64e7SAndroid Build Coastguard Worker 61*86ee64e7SAndroid Build Coastguard Worker if ((CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64") OR 62*86ee64e7SAndroid Build Coastguard Worker (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")) 63*86ee64e7SAndroid Build Coastguard Worker add_definitions(-DINFLATE_CHUNK_SIMD_NEON) 64*86ee64e7SAndroid Build Coastguard Worker add_definitions(-DADLER32_SIMD_NEON) 65*86ee64e7SAndroid Build Coastguard Worker add_definitions(-DINFLATE_CHUNK_READ_64LE) 66*86ee64e7SAndroid Build Coastguard Worker add_definitions(-DCRC32_ARMV8_CRC32) 67*86ee64e7SAndroid Build Coastguard Worker add_definitions(-DDEFLATE_SLIDE_HASH_NEON) 68*86ee64e7SAndroid Build Coastguard Worker # Required by CPU features detection code. 69*86ee64e7SAndroid Build Coastguard Worker if (APPLE) 70*86ee64e7SAndroid Build Coastguard Worker add_definitions(-DARMV8_OS_MACOS) 71*86ee64e7SAndroid Build Coastguard Worker endif() 72*86ee64e7SAndroid Build Coastguard Worker 73*86ee64e7SAndroid Build Coastguard Worker if (UNIX AND NOT APPLE) 74*86ee64e7SAndroid Build Coastguard Worker add_definitions(-DARMV8_OS_LINUX) 75*86ee64e7SAndroid Build Coastguard Worker endif() 76*86ee64e7SAndroid Build Coastguard Worker 77*86ee64e7SAndroid Build Coastguard Worker SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv8-a+crc+crypto") 78*86ee64e7SAndroid Build Coastguard Worker endif() 79*86ee64e7SAndroid Build Coastguard Worker 80*86ee64e7SAndroid Build Coastguard Worker if (CMAKE_SYSTEM_PROCESSOR STREQUAL "riscv64") 81*86ee64e7SAndroid Build Coastguard Worker add_definitions(-DRISCV_RVV) 82*86ee64e7SAndroid Build Coastguard Worker add_definitions(-DDEFLATE_SLIDE_HASH_RVV) 83*86ee64e7SAndroid Build Coastguard Worker add_definitions(-DADLER32_SIMD_RVV) 84*86ee64e7SAndroid Build Coastguard Worker 85*86ee64e7SAndroid Build Coastguard Worker # TODO(cavalcantii): add remaining flags as we port optimizations to RVV. 86*86ee64e7SAndroid Build Coastguard Worker # chunk_copy is required for READ64 and unconditional decode of literals. 87*86ee64e7SAndroid Build Coastguard Worker add_definitions(-DINFLATE_CHUNK_GENERIC) 88*86ee64e7SAndroid Build Coastguard Worker add_definitions(-DINFLATE_CHUNK_READ_64LE) 89*86ee64e7SAndroid Build Coastguard Worker 90*86ee64e7SAndroid Build Coastguard Worker # Tested with clang-17, unaligned loads are required by read64 & chunk_copy. 91*86ee64e7SAndroid Build Coastguard Worker # TODO(cavalcantii): replace internal clang flags for -munaligned-access 92*86ee64e7SAndroid Build Coastguard Worker # when we have a newer compiler available. 93*86ee64e7SAndroid Build Coastguard Worker SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --target=riscv64-unknown-linux-gnu -march=rv64gcv -Xclang -target-feature -Xclang +unaligned-scalar-mem") 94*86ee64e7SAndroid Build Coastguard Worker endif() 95*86ee64e7SAndroid Build Coastguard Worker 96*86ee64e7SAndroid Build Coastguard Workerendif() 97*86ee64e7SAndroid Build Coastguard Worker 98*86ee64e7SAndroid Build Coastguard Worker# 99*86ee64e7SAndroid Build Coastguard Worker# Check to see if we have large file support 100*86ee64e7SAndroid Build Coastguard Worker# 101*86ee64e7SAndroid Build Coastguard Workerset(CMAKE_REQUIRED_DEFINITIONS -D_LARGEFILE64_SOURCE=1) 102*86ee64e7SAndroid Build Coastguard Worker# We add these other definitions here because CheckTypeSize.cmake 103*86ee64e7SAndroid Build Coastguard Worker# in CMake 2.4.x does not automatically do so and we want 104*86ee64e7SAndroid Build Coastguard Worker# compatibility with CMake 2.4.x. 105*86ee64e7SAndroid Build Coastguard Workerif(HAVE_SYS_TYPES_H) 106*86ee64e7SAndroid Build Coastguard Worker list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_SYS_TYPES_H) 107*86ee64e7SAndroid Build Coastguard Workerendif() 108*86ee64e7SAndroid Build Coastguard Workerif(HAVE_STDINT_H) 109*86ee64e7SAndroid Build Coastguard Worker list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_STDINT_H) 110*86ee64e7SAndroid Build Coastguard Workerendif() 111*86ee64e7SAndroid Build Coastguard Workerif(HAVE_STDDEF_H) 112*86ee64e7SAndroid Build Coastguard Worker list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_STDDEF_H) 113*86ee64e7SAndroid Build Coastguard Workerendif() 114*86ee64e7SAndroid Build Coastguard Workercheck_type_size(off64_t OFF64_T) 115*86ee64e7SAndroid Build Coastguard Workerif(HAVE_OFF64_T) 116*86ee64e7SAndroid Build Coastguard Worker add_definitions(-D_LARGEFILE64_SOURCE=1) 117*86ee64e7SAndroid Build Coastguard Workerendif() 118*86ee64e7SAndroid Build Coastguard Workerset(CMAKE_REQUIRED_DEFINITIONS) # clear variable 119*86ee64e7SAndroid Build Coastguard Worker 120*86ee64e7SAndroid Build Coastguard Worker# 121*86ee64e7SAndroid Build Coastguard Worker# Check for fseeko 122*86ee64e7SAndroid Build Coastguard Worker# 123*86ee64e7SAndroid Build Coastguard Workercheck_function_exists(fseeko HAVE_FSEEKO) 124*86ee64e7SAndroid Build Coastguard Workerif(NOT HAVE_FSEEKO) 125*86ee64e7SAndroid Build Coastguard Worker add_definitions(-DNO_FSEEKO) 126*86ee64e7SAndroid Build Coastguard Workerendif() 127*86ee64e7SAndroid Build Coastguard Worker 128*86ee64e7SAndroid Build Coastguard Worker# 129*86ee64e7SAndroid Build Coastguard Worker# Check for unistd.h 130*86ee64e7SAndroid Build Coastguard Worker# 131*86ee64e7SAndroid Build Coastguard Workercheck_include_file(unistd.h Z_HAVE_UNISTD_H) 132*86ee64e7SAndroid Build Coastguard Worker 133*86ee64e7SAndroid Build Coastguard Workerif(MSVC) 134*86ee64e7SAndroid Build Coastguard Worker set(CMAKE_DEBUG_POSTFIX "d") 135*86ee64e7SAndroid Build Coastguard Worker add_definitions(-D_CRT_SECURE_NO_DEPRECATE) 136*86ee64e7SAndroid Build Coastguard Worker add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE) 137*86ee64e7SAndroid Build Coastguard Worker include_directories(${CMAKE_CURRENT_SOURCE_DIR}) 138*86ee64e7SAndroid Build Coastguard Workerendif() 139*86ee64e7SAndroid Build Coastguard Worker 140*86ee64e7SAndroid Build Coastguard Workerif(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR) 141*86ee64e7SAndroid Build Coastguard Worker # If we're doing an out of source build and the user has a zconf.h 142*86ee64e7SAndroid Build Coastguard Worker # in their source tree... 143*86ee64e7SAndroid Build Coastguard Worker if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h) 144*86ee64e7SAndroid Build Coastguard Worker message(STATUS "Renaming") 145*86ee64e7SAndroid Build Coastguard Worker message(STATUS " ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h") 146*86ee64e7SAndroid Build Coastguard Worker message(STATUS "to 'zconf.h.included' because this file is included with zlib") 147*86ee64e7SAndroid Build Coastguard Worker message(STATUS "but CMake generates it automatically in the build directory.") 148*86ee64e7SAndroid Build Coastguard Worker file(RENAME ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.included) 149*86ee64e7SAndroid Build Coastguard Worker endif() 150*86ee64e7SAndroid Build Coastguard Workerendif() 151*86ee64e7SAndroid Build Coastguard Worker 152*86ee64e7SAndroid Build Coastguard Workerset(ZLIB_PC ${CMAKE_CURRENT_BINARY_DIR}/zlib.pc) 153*86ee64e7SAndroid Build Coastguard Workerconfigure_file( ${CMAKE_CURRENT_SOURCE_DIR}/zlib.pc.cmakein 154*86ee64e7SAndroid Build Coastguard Worker ${ZLIB_PC} @ONLY) 155*86ee64e7SAndroid Build Coastguard Workerconfigure_file( ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.cmakein 156*86ee64e7SAndroid Build Coastguard Worker ${CMAKE_CURRENT_BINARY_DIR}/zconf.h @ONLY) 157*86ee64e7SAndroid Build Coastguard Workerinclude_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}) 158*86ee64e7SAndroid Build Coastguard Worker 159*86ee64e7SAndroid Build Coastguard Worker 160*86ee64e7SAndroid Build Coastguard Worker#============================================================================ 161*86ee64e7SAndroid Build Coastguard Worker# zlib 162*86ee64e7SAndroid Build Coastguard Worker#============================================================================ 163*86ee64e7SAndroid Build Coastguard Worker 164*86ee64e7SAndroid Build Coastguard Workerset(ZLIB_PUBLIC_HDRS 165*86ee64e7SAndroid Build Coastguard Worker ${CMAKE_CURRENT_BINARY_DIR}/zconf.h 166*86ee64e7SAndroid Build Coastguard Worker zlib.h 167*86ee64e7SAndroid Build Coastguard Worker) 168*86ee64e7SAndroid Build Coastguard Workerset(ZLIB_PRIVATE_HDRS 169*86ee64e7SAndroid Build Coastguard Worker crc32.h 170*86ee64e7SAndroid Build Coastguard Worker deflate.h 171*86ee64e7SAndroid Build Coastguard Worker gzguts.h 172*86ee64e7SAndroid Build Coastguard Worker inffast.h 173*86ee64e7SAndroid Build Coastguard Worker inffixed.h 174*86ee64e7SAndroid Build Coastguard Worker inflate.h 175*86ee64e7SAndroid Build Coastguard Worker inftrees.h 176*86ee64e7SAndroid Build Coastguard Worker trees.h 177*86ee64e7SAndroid Build Coastguard Worker zutil.h 178*86ee64e7SAndroid Build Coastguard Worker) 179*86ee64e7SAndroid Build Coastguard Workerset(ZLIB_SRCS 180*86ee64e7SAndroid Build Coastguard Worker adler32.c 181*86ee64e7SAndroid Build Coastguard Worker compress.c 182*86ee64e7SAndroid Build Coastguard Worker crc32.c 183*86ee64e7SAndroid Build Coastguard Worker deflate.c 184*86ee64e7SAndroid Build Coastguard Worker gzclose.c 185*86ee64e7SAndroid Build Coastguard Worker gzlib.c 186*86ee64e7SAndroid Build Coastguard Worker gzread.c 187*86ee64e7SAndroid Build Coastguard Worker gzwrite.c 188*86ee64e7SAndroid Build Coastguard Worker inflate.c 189*86ee64e7SAndroid Build Coastguard Worker infback.c 190*86ee64e7SAndroid Build Coastguard Worker inftrees.c 191*86ee64e7SAndroid Build Coastguard Worker inffast.c 192*86ee64e7SAndroid Build Coastguard Worker trees.c 193*86ee64e7SAndroid Build Coastguard Worker uncompr.c 194*86ee64e7SAndroid Build Coastguard Worker zutil.c 195*86ee64e7SAndroid Build Coastguard Worker) 196*86ee64e7SAndroid Build Coastguard Worker 197*86ee64e7SAndroid Build Coastguard Worker 198*86ee64e7SAndroid Build Coastguard Worker#============================================================================ 199*86ee64e7SAndroid Build Coastguard Worker# Update list of source files if optimizations were enabled 200*86ee64e7SAndroid Build Coastguard Worker#============================================================================ 201*86ee64e7SAndroid Build Coastguard Workerif (ENABLE_SIMD_OPTIMIZATIONS) 202*86ee64e7SAndroid Build Coastguard Worker if (CMAKE_SYSTEM_PROCESSOR STREQUAL "riscv64") 203*86ee64e7SAndroid Build Coastguard Worker message("RISCVV: Add optimizations.") 204*86ee64e7SAndroid Build Coastguard Worker list(REMOVE_ITEM ZLIB_SRCS inflate.c) 205*86ee64e7SAndroid Build Coastguard Worker list(APPEND ZLIB_PRIVATE_HDRS ${CMAKE_CURRENT_SOURCE_DIR}/adler32_simd.h) 206*86ee64e7SAndroid Build Coastguard Worker list(APPEND ZLIB_PRIVATE_HDRS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/optimizations/chunkcopy.h) 207*86ee64e7SAndroid Build Coastguard Worker list(APPEND ZLIB_PRIVATE_HDRS ${CMAKE_CURRENT_SOURCE_DIR}/cpu_features.h) 208*86ee64e7SAndroid Build Coastguard Worker 209*86ee64e7SAndroid Build Coastguard Worker list(APPEND ZLIB_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/adler32_simd.c) 210*86ee64e7SAndroid Build Coastguard Worker list(APPEND ZLIB_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/optimizations/inffast_chunk.c) 211*86ee64e7SAndroid Build Coastguard Worker list(APPEND ZLIB_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/optimizations/inflate.c) 212*86ee64e7SAndroid Build Coastguard Worker list(APPEND ZLIB_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/cpu_features.c) 213*86ee64e7SAndroid Build Coastguard Worker else() 214*86ee64e7SAndroid Build Coastguard Worker list(REMOVE_ITEM ZLIB_SRCS inflate.c) 215*86ee64e7SAndroid Build Coastguard Worker 216*86ee64e7SAndroid Build Coastguard Worker list(APPEND ZLIB_PRIVATE_HDRS ${CMAKE_CURRENT_SOURCE_DIR}/adler32_simd.h) 217*86ee64e7SAndroid Build Coastguard Worker list(APPEND ZLIB_PRIVATE_HDRS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/optimizations/chunkcopy.h) 218*86ee64e7SAndroid Build Coastguard Worker list(APPEND ZLIB_PRIVATE_HDRS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/optimizations/inffast_chunk.h) 219*86ee64e7SAndroid Build Coastguard Worker list(APPEND ZLIB_PRIVATE_HDRS ${CMAKE_CURRENT_SOURCE_DIR}/cpu_features.h) 220*86ee64e7SAndroid Build Coastguard Worker list(APPEND ZLIB_PRIVATE_HDRS ${CMAKE_CURRENT_SOURCE_DIR}/crc32_simd.h) 221*86ee64e7SAndroid Build Coastguard Worker 222*86ee64e7SAndroid Build Coastguard Worker list(APPEND ZLIB_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/adler32_simd.c) 223*86ee64e7SAndroid Build Coastguard Worker list(APPEND ZLIB_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/optimizations/inffast_chunk.c) 224*86ee64e7SAndroid Build Coastguard Worker list(APPEND ZLIB_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/contrib/optimizations/inflate.c) 225*86ee64e7SAndroid Build Coastguard Worker list(APPEND ZLIB_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/cpu_features.c) 226*86ee64e7SAndroid Build Coastguard Worker list(APPEND ZLIB_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/crc32_simd.c) 227*86ee64e7SAndroid Build Coastguard Worker list(APPEND ZLIB_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/crc_folding.c) 228*86ee64e7SAndroid Build Coastguard Worker endif() 229*86ee64e7SAndroid Build Coastguard Workerendif() 230*86ee64e7SAndroid Build Coastguard Worker 231*86ee64e7SAndroid Build Coastguard Worker# parse the full version number from zlib.h and include in ZLIB_FULL_VERSION 232*86ee64e7SAndroid Build Coastguard Workerfile(READ ${CMAKE_CURRENT_SOURCE_DIR}/zlib.h _zlib_h_contents) 233*86ee64e7SAndroid Build Coastguard Workerstring(REGEX REPLACE ".*#define[ \t]+ZLIB_VERSION[ \t]+\"([-0-9A-Za-z.]+)\".*" 234*86ee64e7SAndroid Build Coastguard Worker "\\1" ZLIB_FULL_VERSION ${_zlib_h_contents}) 235*86ee64e7SAndroid Build Coastguard Worker 236*86ee64e7SAndroid Build Coastguard Workerif(MINGW) 237*86ee64e7SAndroid Build Coastguard Worker # This gets us DLL resource information when compiling on MinGW. 238*86ee64e7SAndroid Build Coastguard Worker if(NOT CMAKE_RC_COMPILER) 239*86ee64e7SAndroid Build Coastguard Worker set(CMAKE_RC_COMPILER windres.exe) 240*86ee64e7SAndroid Build Coastguard Worker endif() 241*86ee64e7SAndroid Build Coastguard Worker 242*86ee64e7SAndroid Build Coastguard Worker add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj 243*86ee64e7SAndroid Build Coastguard Worker COMMAND ${CMAKE_RC_COMPILER} 244*86ee64e7SAndroid Build Coastguard Worker -D GCC_WINDRES 245*86ee64e7SAndroid Build Coastguard Worker -I ${CMAKE_CURRENT_SOURCE_DIR} 246*86ee64e7SAndroid Build Coastguard Worker -I ${CMAKE_CURRENT_BINARY_DIR} 247*86ee64e7SAndroid Build Coastguard Worker -o ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj 248*86ee64e7SAndroid Build Coastguard Worker -i ${CMAKE_CURRENT_SOURCE_DIR}/win32/zlib1.rc) 249*86ee64e7SAndroid Build Coastguard Worker set(ZLIB_DLL_SRCS ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj) 250*86ee64e7SAndroid Build Coastguard Workerendif(MINGW) 251*86ee64e7SAndroid Build Coastguard Worker 252*86ee64e7SAndroid Build Coastguard Workeradd_library(zlib SHARED ${ZLIB_SRCS} ${ZLIB_DLL_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) 253*86ee64e7SAndroid Build Coastguard Workeradd_library(zlibstatic STATIC ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) 254*86ee64e7SAndroid Build Coastguard Workerset_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL) 255*86ee64e7SAndroid Build Coastguard Workerset_target_properties(zlib PROPERTIES SOVERSION 1) 256*86ee64e7SAndroid Build Coastguard Worker 257*86ee64e7SAndroid Build Coastguard Workerif(NOT CYGWIN) 258*86ee64e7SAndroid Build Coastguard Worker # This property causes shared libraries on Linux to have the full version 259*86ee64e7SAndroid Build Coastguard Worker # encoded into their final filename. We disable this on Cygwin because 260*86ee64e7SAndroid Build Coastguard Worker # it causes cygz-${ZLIB_FULL_VERSION}.dll to be created when cygz.dll 261*86ee64e7SAndroid Build Coastguard Worker # seems to be the default. 262*86ee64e7SAndroid Build Coastguard Worker # 263*86ee64e7SAndroid Build Coastguard Worker # This has no effect with MSVC, on that platform the version info for 264*86ee64e7SAndroid Build Coastguard Worker # the DLL comes from the resource file win32/zlib1.rc 265*86ee64e7SAndroid Build Coastguard Worker set_target_properties(zlib PROPERTIES VERSION ${ZLIB_FULL_VERSION}) 266*86ee64e7SAndroid Build Coastguard Workerendif() 267*86ee64e7SAndroid Build Coastguard Worker 268*86ee64e7SAndroid Build Coastguard Workerif(UNIX) 269*86ee64e7SAndroid Build Coastguard Worker # On unix-like platforms the library is almost always called libz 270*86ee64e7SAndroid Build Coastguard Worker set_target_properties(zlib zlibstatic PROPERTIES OUTPUT_NAME z) 271*86ee64e7SAndroid Build Coastguard Worker if(NOT APPLE) 272*86ee64e7SAndroid Build Coastguard Worker set_target_properties(zlib PROPERTIES LINK_FLAGS "-Wl,--version-script,\"${CMAKE_CURRENT_SOURCE_DIR}/zlib.map\"") 273*86ee64e7SAndroid Build Coastguard Worker endif() 274*86ee64e7SAndroid Build Coastguard Workerelseif(BUILD_SHARED_LIBS AND WIN32) 275*86ee64e7SAndroid Build Coastguard Worker # Creates zlib1.dll when building shared library version 276*86ee64e7SAndroid Build Coastguard Worker set_target_properties(zlib PROPERTIES SUFFIX "1.dll") 277*86ee64e7SAndroid Build Coastguard Workerendif() 278*86ee64e7SAndroid Build Coastguard Worker 279*86ee64e7SAndroid Build Coastguard Workerif(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL ) 280*86ee64e7SAndroid Build Coastguard Worker install(TARGETS zlib zlibstatic 281*86ee64e7SAndroid Build Coastguard Worker RUNTIME DESTINATION "${INSTALL_BIN_DIR}" 282*86ee64e7SAndroid Build Coastguard Worker ARCHIVE DESTINATION "${INSTALL_LIB_DIR}" 283*86ee64e7SAndroid Build Coastguard Worker LIBRARY DESTINATION "${INSTALL_LIB_DIR}" ) 284*86ee64e7SAndroid Build Coastguard Workerendif() 285*86ee64e7SAndroid Build Coastguard Workerif(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL ) 286*86ee64e7SAndroid Build Coastguard Worker install(FILES ${ZLIB_PUBLIC_HDRS} DESTINATION "${INSTALL_INC_DIR}") 287*86ee64e7SAndroid Build Coastguard Workerendif() 288*86ee64e7SAndroid Build Coastguard Workerif(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL ) 289*86ee64e7SAndroid Build Coastguard Worker install(FILES zlib.3 DESTINATION "${INSTALL_MAN_DIR}/man3") 290*86ee64e7SAndroid Build Coastguard Workerendif() 291*86ee64e7SAndroid Build Coastguard Workerif(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL ) 292*86ee64e7SAndroid Build Coastguard Worker install(FILES ${ZLIB_PC} DESTINATION "${INSTALL_PKGCONFIG_DIR}") 293*86ee64e7SAndroid Build Coastguard Workerendif() 294*86ee64e7SAndroid Build Coastguard Worker 295*86ee64e7SAndroid Build Coastguard Worker#============================================================================ 296*86ee64e7SAndroid Build Coastguard Worker# Benchmarker 297*86ee64e7SAndroid Build Coastguard Worker#============================================================================ 298*86ee64e7SAndroid Build Coastguard Workerenable_language(CXX) 299*86ee64e7SAndroid Build Coastguard Workerset(CMAKE_CXX_STANDARD 14) # workaround for older compilers (e.g. g++ 5.4). 300*86ee64e7SAndroid Build Coastguard Workeradd_executable(zlib_bench contrib/bench/zlib_bench.cc) 301*86ee64e7SAndroid Build Coastguard Workertarget_link_libraries(zlib_bench zlib) 302*86ee64e7SAndroid Build Coastguard Worker 303*86ee64e7SAndroid Build Coastguard Worker#============================================================================ 304*86ee64e7SAndroid Build Coastguard Worker# Unit Tests 305*86ee64e7SAndroid Build Coastguard Worker#============================================================================ 306*86ee64e7SAndroid Build Coastguard Workerif (BUILD_UNITTESTS) 307*86ee64e7SAndroid Build Coastguard Worker include (ExternalProject) 308*86ee64e7SAndroid Build Coastguard Worker set_directory_properties(PROPERTIES EP_PREFIX ${CMAKE_BINARY_DIR}/third_party) 309*86ee64e7SAndroid Build Coastguard Worker ExternalProject_add( 310*86ee64e7SAndroid Build Coastguard Worker googletest 311*86ee64e7SAndroid Build Coastguard Worker GIT_REPOSITORY https://github.com/google/googletest.git 312*86ee64e7SAndroid Build Coastguard Worker GIT_TAG d1467f5813f4d363cfd11aba99c4e9fe47a85e99 313*86ee64e7SAndroid Build Coastguard Worker UPDATE_COMMAND "" 314*86ee64e7SAndroid Build Coastguard Worker INSTALL_COMMAND "" 315*86ee64e7SAndroid Build Coastguard Worker LOG_DOWNLOAD ON 316*86ee64e7SAndroid Build Coastguard Worker LOG_CONFIGURE ON 317*86ee64e7SAndroid Build Coastguard Worker LOG_BUILD ON 318*86ee64e7SAndroid Build Coastguard Worker ) 319*86ee64e7SAndroid Build Coastguard Worker 320*86ee64e7SAndroid Build Coastguard Worker # gtest includedir 321*86ee64e7SAndroid Build Coastguard Worker ExternalProject_Get_Property(googletest source_dir) 322*86ee64e7SAndroid Build Coastguard Worker set(GTEST_INCLUDE_DIRS 323*86ee64e7SAndroid Build Coastguard Worker ${source_dir}/googletest/include 324*86ee64e7SAndroid Build Coastguard Worker ${source_dir}/googletest/include/gtest 325*86ee64e7SAndroid Build Coastguard Worker ) 326*86ee64e7SAndroid Build Coastguard Worker 327*86ee64e7SAndroid Build Coastguard Worker # gtest library 328*86ee64e7SAndroid Build Coastguard Worker ExternalProject_Get_Property(googletest binary_dir) 329*86ee64e7SAndroid Build Coastguard Worker set(GTEST_LIBRARY_PATH ${binary_dir}/lib/${CMAKE_FIND_LIBRARY_PREFIXES}gtest.a) 330*86ee64e7SAndroid Build Coastguard Worker set(GTEST_LIBRARY gtest) 331*86ee64e7SAndroid Build Coastguard Worker add_library(${GTEST_LIBRARY} UNKNOWN IMPORTED) 332*86ee64e7SAndroid Build Coastguard Worker set_property(TARGET ${GTEST_LIBRARY} PROPERTY IMPORTED_LOCATION ${GTEST_LIBRARY_PATH}) 333*86ee64e7SAndroid Build Coastguard Worker add_dependencies(${GTEST_LIBRARY} googletest) 334*86ee64e7SAndroid Build Coastguard Worker 335*86ee64e7SAndroid Build Coastguard Worker set(UTEST_SRC 336*86ee64e7SAndroid Build Coastguard Worker ${CMAKE_CURRENT_SOURCE_DIR}/contrib/tests/infcover.cc 337*86ee64e7SAndroid Build Coastguard Worker ${CMAKE_CURRENT_SOURCE_DIR}/contrib/tests/infcover.h 338*86ee64e7SAndroid Build Coastguard Worker ${CMAKE_CURRENT_SOURCE_DIR}/contrib/tests/utils_unittest.cc 339*86ee64e7SAndroid Build Coastguard Worker ${CMAKE_CURRENT_SOURCE_DIR}/contrib/tests/standalone_test_runner.cc 340*86ee64e7SAndroid Build Coastguard Worker ${CMAKE_CURRENT_SOURCE_DIR}/google/compression_utils_portable.cc 341*86ee64e7SAndroid Build Coastguard Worker ) 342*86ee64e7SAndroid Build Coastguard Worker 343*86ee64e7SAndroid Build Coastguard Worker add_compile_definitions(CMAKE_STANDALONE_UNITTESTS) 344*86ee64e7SAndroid Build Coastguard Worker 345*86ee64e7SAndroid Build Coastguard Worker add_executable(zlib_unittests ${UTEST_SRC}) 346*86ee64e7SAndroid Build Coastguard Worker target_include_directories(zlib_unittests PUBLIC ${GTEST_INCLUDE_DIRS}) 347*86ee64e7SAndroid Build Coastguard Worker target_include_directories(zlib_unittests PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/google) 348*86ee64e7SAndroid Build Coastguard Worker 349*86ee64e7SAndroid Build Coastguard Worker target_link_libraries(zlib_unittests ${GTEST_LIBRARY}) 350*86ee64e7SAndroid Build Coastguard Worker target_link_libraries(zlib_unittests zlib) 351*86ee64e7SAndroid Build Coastguard Worker # Needed by gtest 352*86ee64e7SAndroid Build Coastguard Worker target_link_libraries(zlib_unittests pthread) 353*86ee64e7SAndroid Build Coastguard Workerendif() 354*86ee64e7SAndroid Build Coastguard Worker 355*86ee64e7SAndroid Build Coastguard Worker#============================================================================ 356*86ee64e7SAndroid Build Coastguard Worker# Minizip tool 357*86ee64e7SAndroid Build Coastguard Worker#============================================================================ 358*86ee64e7SAndroid Build Coastguard Worker# TODO(cavalcantii): get it working on Windows. 359*86ee64e7SAndroid Build Coastguard Workerif (BUILD_MINIZIP_BIN) 360*86ee64e7SAndroid Build Coastguard Worker add_executable(minizip_bin contrib/minizip/minizip.c contrib/minizip/ioapi.c 361*86ee64e7SAndroid Build Coastguard Worker contrib/minizip/ioapi.h contrib/minizip/unzip.c 362*86ee64e7SAndroid Build Coastguard Worker contrib/minizip/unzip.h contrib/minizip/zip.c contrib/minizip/zip.h 363*86ee64e7SAndroid Build Coastguard Worker ) 364*86ee64e7SAndroid Build Coastguard Worker target_link_libraries(minizip_bin zlib) 365*86ee64e7SAndroid Build Coastguard Workerendif() 366*86ee64e7SAndroid Build Coastguard Worker 367*86ee64e7SAndroid Build Coastguard Worker#============================================================================ 368*86ee64e7SAndroid Build Coastguard Worker# zpipe tool 369*86ee64e7SAndroid Build Coastguard Worker#============================================================================ 370*86ee64e7SAndroid Build Coastguard Workerif (BUILD_ZPIPE) 371*86ee64e7SAndroid Build Coastguard Worker add_executable(zpipe examples/zpipe.c) 372*86ee64e7SAndroid Build Coastguard Worker target_link_libraries(zpipe zlib) 373*86ee64e7SAndroid Build Coastguard Workerendif() 374*86ee64e7SAndroid Build Coastguard Worker#============================================================================ 375*86ee64e7SAndroid Build Coastguard Worker# MiniGzip tool 376*86ee64e7SAndroid Build Coastguard Worker#============================================================================ 377*86ee64e7SAndroid Build Coastguard Workerif (BUILD_MINIGZIP) 378*86ee64e7SAndroid Build Coastguard Worker add_executable(minigzip_bin test/minigzip.c) 379*86ee64e7SAndroid Build Coastguard Worker target_link_libraries(minigzip_bin zlib) 380*86ee64e7SAndroid Build Coastguard Workerendif() 381