@@ -25,32 +25,55 @@ option(ENABLE_SIMD_OPTIMIZATIONS "Enable all SIMD optimizations" OFF)
2525option (ENABLE_SIMD_AVX512 "Enable SIMD AXV512 optimizations" OFF )
2626option (USE_ZLIB_RABIN_KARP_HASH "Enable bitstream compatibility with canonical zlib" OFF )
2727option (BUILD_UNITTESTS "Enable standalone unit tests build" OFF )
28+ option (BUILD_MINIZIP_BIN "Enable building minzip_bin tool" OFF )
2829
2930if (USE_ZLIB_RABIN_KARP_HASH)
3031 add_definitions (-DUSE_ZLIB_RABIN_KARP_ROLLING_HASH)
3132endif ()
3233
33- # TODO(cavalcantii): add support for other OSes (e.g. Android, fuchsia, osx )
34- # and architectures (e.g. Arm ).
34+ # TODO(cavalcantii): add support for other OSes (e.g. Android, Fuchsia, etc )
35+ # and architectures (e.g. RISCV ).
3536if (ENABLE_SIMD_OPTIMIZATIONS)
36- add_definitions (-DINFLATE_CHUNK_SIMD_SSE2)
37- add_definitions (-DADLER32_SIMD_SSSE3)
38- add_definitions (-DINFLATE_CHUNK_READ_64LE)
39- add_definitions (-DCRC32_SIMD_SSE42_PCLMUL)
40- if (ENABLE_SIMD_AVX512)
41- add_definitions (-DCRC32_SIMD_AVX512_PCLMUL)
42- add_compile_options (-mvpclmulqdq -msse2 -mavx512f -mpclmul)
43- else ()
44- add_compile_options (-msse4.2 -mpclmul)
45- endif ()
46- add_definitions (-DDEFLATE_SLIDE_HASH_SSE2)
47- # Required by CPU features detection code.
48- add_definitions (-DX86_NOT_WINDOWS)
49- # Apparently some environments (e.g. CentOS) require to explicitly link
50- # with pthread and that is required by the CPU features detection code.
51- find_package (Threads REQUIRED)
52- SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread" )
53- SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread" )
37+ # Apparently some environments (e.g. CentOS) require to explicitly link
38+ # with pthread and that is required by the CPU features detection code.
39+ find_package (Threads REQUIRED)
40+ SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread" )
41+ SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread" )
42+
43+ if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" )
44+ add_definitions (-DINFLATE_CHUNK_SIMD_SSE2)
45+ add_definitions (-DADLER32_SIMD_SSSE3)
46+ add_definitions (-DINFLATE_CHUNK_READ_64LE)
47+ add_definitions (-DCRC32_SIMD_SSE42_PCLMUL)
48+ if (ENABLE_SIMD_AVX512)
49+ add_definitions (-DCRC32_SIMD_AVX512_PCLMUL)
50+ add_compile_options (-mvpclmulqdq -msse2 -mavx512f -mpclmul)
51+ else ()
52+ add_compile_options (-msse4.2 -mpclmul)
53+ endif ()
54+ add_definitions (-DDEFLATE_SLIDE_HASH_SSE2)
55+ # Required by CPU features detection code.
56+ add_definitions (-DX86_NOT_WINDOWS)
57+ endif ()
58+
59+ if ((CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64" ) OR
60+ (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" ))
61+ add_definitions (-DINFLATE_CHUNK_SIMD_NEON)
62+ add_definitions (-DADLER32_SIMD_NEON)
63+ add_definitions (-DINFLATE_CHUNK_READ_64LE)
64+ add_definitions (-DCRC32_ARMV8_CRC32)
65+ add_definitions (-DDEFLATE_SLIDE_HASH_NEON)
66+ # Required by CPU features detection code.
67+ if (APPLE )
68+ add_definitions (-DARMV8_OS_MACOS)
69+ endif ()
70+
71+ if (UNIX AND NOT APPLE )
72+ add_definitions (-DARMV8_OS_LINUX)
73+ endif ()
74+
75+ SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv8-a+crc+crypto" )
76+ endif ()
5477endif ()
5578
5679#
@@ -300,8 +323,11 @@ endif()
300323#============================================================================
301324# Minigzip tool
302325#============================================================================
303- add_executable (minizip_bin contrib/minizip/minizip.c contrib/minizip/ioapi.c
304- contrib/minizip/ioapi.h contrib/minizip/unzip.c
305- contrib/minizip/unzip.h contrib/minizip/zip.c contrib/minizip/zip.h
306- )
307- target_link_libraries (minizip_bin zlib)
326+ # TODO(cavalcantii): get it working on Windows.
327+ if (BUILD_MINIZIP_BIN)
328+ add_executable (minizip_bin contrib/minizip/minizip.c contrib/minizip/ioapi.c
329+ contrib/minizip/ioapi.h contrib/minizip/unzip.c
330+ contrib/minizip/unzip.h contrib/minizip/zip.c contrib/minizip/zip.h
331+ )
332+ target_link_libraries (minizip_bin zlib)
333+ endif ()
0 commit comments