@@ -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