endif()
elseif(CMAKE_C_COMPILER_ID MATCHES "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang")
# Enable warnings in GCC and Clang
- set(WARNFLAGS "-Wall")
- set(WARNFLAGS_MAINTAINER "-Wextra -Wpedantic")
- set(WARNFLAGS_DISABLE "-Wno-implicit-fallthrough")
+ set(WARNFLAGS "-Wall")
+ set(WARNFLAGS_MAINTAINER "-Wextra -Wpedantic")
+ set(WARNFLAGS_DISABLE "-Wno-implicit-fallthrough")
if(WITH_NATIVE_INSTRUCTIONS)
- if(BASEARCH_PPC_FOUND)
- set(NATIVEFLAG "-mcpu=native")
- else()
- set(NATIVEFLAG "-march=native")
- endif()
+ if(BASEARCH_PPC_FOUND)
+ set(NATIVEFLAG "-mcpu=native")
else()
- if(BASEARCH_ARM_FOUND)
- if("${ARCH}" MATCHES "arm" AND NOT CMAKE_C_FLAGS MATCHES "-mfloat-abi")
- # Auto-detect support for ARM floating point ABI
- check_c_compiler_flag(-mfloat-abi=softfp HAVE_FLOATABI_SOFTFP)
- if(HAVE_FLOATABI_SOFTFP)
- set(FLOATABI "-mfloat-abi=softfp")
- else()
- check_c_compiler_flag(-mfloat-abi=hard HAVE_FLOATABI_HARD)
- if(HAVE_FLOATABI_HARD)
- set(FLOATABI "-mfloat-abi=hard")
- endif()
- endif()
- if(FLOATABI)
- message(STATUS "ARM floating point arch: ${FLOATABI}")
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLOATABI}")
- else()
- message(STATUS "ARM floating point arch not auto-detected")
+ set(NATIVEFLAG "-march=native")
+ endif()
+ else()
+ if(BASEARCH_ARM_FOUND)
+ if("${ARCH}" MATCHES "arm" AND NOT CMAKE_C_FLAGS MATCHES "-mfloat-abi")
+ # Auto-detect support for ARM floating point ABI
+ check_c_compiler_flag(-mfloat-abi=softfp HAVE_FLOATABI_SOFTFP)
+ if(HAVE_FLOATABI_SOFTFP)
+ set(FLOATABI "-mfloat-abi=softfp")
+ else()
+ check_c_compiler_flag(-mfloat-abi=hard HAVE_FLOATABI_HARD)
+ if(HAVE_FLOATABI_HARD)
+ set(FLOATABI "-mfloat-abi=hard")
endif()
endif()
- endif()
- # Check whether -fno-lto is available
- set(CMAKE_REQUIRED_FLAGS "-fno-lto")
- check_c_source_compiles(
- "int main() { return 0; }"
- FNO_LTO_AVAILABLE FAIL_REGEX "not supported")
- set(CMAKE_REQUIRED_FLAGS)
- if(FNO_LTO_AVAILABLE)
- set(NOLTOFLAG "-fno-lto")
+ if(FLOATABI)
+ message(STATUS "ARM floating point arch: ${FLOATABI}")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLOATABI}")
+ else()
+ message(STATUS "ARM floating point arch not auto-detected")
+ endif()
endif()
endif()
+ # Check whether -fno-lto is available
+ set(CMAKE_REQUIRED_FLAGS "-fno-lto")
+ check_c_source_compiles(
+ "int main() { return 0; }"
+ FNO_LTO_AVAILABLE FAIL_REGEX "not supported")
+ set(CMAKE_REQUIRED_FLAGS)
+ if(FNO_LTO_AVAILABLE)
+ set(NOLTOFLAG "-fno-lto")
+ endif()
+ endif()
else()
if(WITH_NATIVE_INSTRUCTIONS)
message(STATUS "Ignoring WITH_NATIVE_INSTRUCTIONS; not implemented yet on this configuration")
if(WITH_ACLE AND NOT MSVC)
check_acle_intrinsics()
if(HAVE_ACLE_INTRIN)
- add_definitions(-DARM_ACLE_CRC_HASH)
- set(ACLE_SRCS ${ARCHDIR}/crc32_acle.c ${ARCHDIR}/insert_string_acle.c)
- set_property(SOURCE ${ACLE_SRCS} PROPERTY COMPILE_FLAGS "${ACLEFLAG} ${NOLTOFLAG}")
- list(APPEND ZLIB_ARCH_SRCS ${ACLE_SRCS})
- add_feature_info(ACLE_CRC 1 "Support ACLE optimized CRC hash generation, using \"${ACLEFLAG}\"")
- endif()
+ add_definitions(-DARM_ACLE_CRC_HASH)
+ set(ACLE_SRCS ${ARCHDIR}/crc32_acle.c ${ARCHDIR}/insert_string_acle.c)
+ set_property(SOURCE ${ACLE_SRCS} PROPERTY COMPILE_FLAGS "${ACLEFLAG} ${NOLTOFLAG}")
+ list(APPEND ZLIB_ARCH_SRCS ${ACLE_SRCS})
+ add_feature_info(ACLE_CRC 1 "Support ACLE optimized CRC hash generation, using \"${ACLEFLAG}\"")
+ endif()
endif()
if(WITH_NEON)
check_neon_intrinsics()
if(MFPU_NEON_AVAILABLE)
- add_definitions(-DARM_NEON_ADLER32 -DARM_NEON_CHUNKSET -DARM_NEON_SLIDEHASH)
- set(NEON_SRCS ${ARCHDIR}/adler32_neon.c ${ARCHDIR}/chunkset_neon.c ${ARCHDIR}/slide_neon.c)
- list(APPEND ZLIB_ARCH_SRCS ${NEON_SRCS})
- set_property(SOURCE ${NEON_SRCS} PROPERTY COMPILE_FLAGS "${NEONFLAG} ${NOLTOFLAG}")
- if(MSVC)
- add_definitions(-D__ARM_NEON__)
+ add_definitions(-DARM_NEON_ADLER32 -DARM_NEON_CHUNKSET -DARM_NEON_SLIDEHASH)
+ set(NEON_SRCS ${ARCHDIR}/adler32_neon.c ${ARCHDIR}/chunkset_neon.c ${ARCHDIR}/slide_neon.c)
+ list(APPEND ZLIB_ARCH_SRCS ${NEON_SRCS})
+ set_property(SOURCE ${NEON_SRCS} PROPERTY COMPILE_FLAGS "${NEONFLAG} ${NOLTOFLAG}")
+ if(MSVC)
+ add_definitions(-D__ARM_NEON__)
+ endif()
+ add_feature_info(NEON_ADLER32 1 "Support NEON instructions in adler32, using \"${NEONFLAG}\"")
+ add_feature_info(NEON_SLIDEHASH 1 "Support NEON instructions in slide_hash, using \"${NEONFLAG}\"")
endif()
- add_feature_info(NEON_ADLER32 1 "Support NEON instructions in adler32, using \"${NEONFLAG}\"")
- add_feature_info(NEON_SLIDEHASH 1 "Support NEON instructions in slide_hash, using \"${NEONFLAG}\"")
- endif()
endif()
elseif(BASEARCH_PPC_FOUND)
if(WITH_POWER8)
check_power8_intrinsics()
if(HAVE_POWER8_INTRIN)
- add_definitions(-DPOWER8)
- add_definitions(-DPOWER_FEATURES)
- add_definitions(-DPOWER8_VSX_ADLER32)
- add_definitions(-DPOWER8_VSX_SLIDEHASH)
- list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/power.h)
- list(APPEND ZLIB_ARCH_SRCS ${ARCHDIR}/power.c)
- set(POWER8_SRCS ${ARCHDIR}/adler32_power8.c ${ARCHDIR}/slide_power8.c)
- list(APPEND ZLIB_ARCH_SRCS ${POWER8_SRCS})
- set_property(SOURCE ${POWER8_SRCS} PROPERTY COMPILE_FLAGS "${POWER8FLAG} ${NOLTOFLAG}")
- endif()
+ add_definitions(-DPOWER8)
+ add_definitions(-DPOWER_FEATURES)
+ add_definitions(-DPOWER8_VSX_ADLER32)
+ add_definitions(-DPOWER8_VSX_SLIDEHASH)
+ list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/power.h)
+ list(APPEND ZLIB_ARCH_SRCS ${ARCHDIR}/power.c)
+ set(POWER8_SRCS ${ARCHDIR}/adler32_power8.c ${ARCHDIR}/slide_power8.c)
+ list(APPEND ZLIB_ARCH_SRCS ${POWER8_SRCS})
+ set_property(SOURCE ${POWER8_SRCS} PROPERTY COMPILE_FLAGS "${POWER8FLAG} ${NOLTOFLAG}")
+ endif()
endif()
elseif(BASEARCH_S360_FOUND)
if(WITH_DFLTCC_DEFLATE OR WITH_DFLTCC_INFLATE)
endif()
if(WITH_AVX2)
check_avx2_intrinsics()
- if(HAVE_AVX2_INTRIN)
- add_definitions(-DX86_AVX2 -DX86_AVX2_ADLER32 -DX86_AVX_CHUNKSET)
- set(AVX2_SRCS ${ARCHDIR}/slide_avx.c)
- add_feature_info(AVX2_SLIDEHASH 1 "Support AVX2 optimized slide_hash, using \"${AVX2FLAG}\"")
- list(APPEND AVX2_SRCS ${ARCHDIR}/chunkset_avx.c)
- add_feature_info(AVX_CHUNKSET 1 "Support AVX optimized chunkset, using \"${AVX2FLAG}\"")
- list(APPEND AVX2_SRCS ${ARCHDIR}/compare258_avx.c)
- add_feature_info(AVX2_COMPARE258 1 "Support AVX2 optimized compare258, using \"${AVX2FLAG}\"")
- list(APPEND AVX2_SRCS ${ARCHDIR}/adler32_avx.c)
- add_feature_info(AVX2_ADLER32 1 "Support AVX2-accelerated adler32, using \"${AVX2FLAG}\"")
- list(APPEND ZLIB_ARCH_SRCS ${AVX2_SRCS})
- set_property(SOURCE ${AVX2_SRCS} PROPERTY COMPILE_FLAGS "${AVX2FLAG} ${NOLTOFLAG}")
- endif()
+ if(HAVE_AVX2_INTRIN)
+ add_definitions(-DX86_AVX2 -DX86_AVX2_ADLER32 -DX86_AVX_CHUNKSET)
+ set(AVX2_SRCS ${ARCHDIR}/slide_avx.c)
+ add_feature_info(AVX2_SLIDEHASH 1 "Support AVX2 optimized slide_hash, using \"${AVX2FLAG}\"")
+ list(APPEND AVX2_SRCS ${ARCHDIR}/chunkset_avx.c)
+ add_feature_info(AVX_CHUNKSET 1 "Support AVX optimized chunkset, using \"${AVX2FLAG}\"")
+ list(APPEND AVX2_SRCS ${ARCHDIR}/compare258_avx.c)
+ add_feature_info(AVX2_COMPARE258 1 "Support AVX2 optimized compare258, using \"${AVX2FLAG}\"")
+ list(APPEND AVX2_SRCS ${ARCHDIR}/adler32_avx.c)
+ add_feature_info(AVX2_ADLER32 1 "Support AVX2-accelerated adler32, using \"${AVX2FLAG}\"")
+ list(APPEND ZLIB_ARCH_SRCS ${AVX2_SRCS})
+ set_property(SOURCE ${AVX2_SRCS} PROPERTY COMPILE_FLAGS "${AVX2FLAG} ${NOLTOFLAG}")
+ endif()
endif()
if(WITH_SSE4)
check_sse4_intrinsics()
if(HAVE_SSE42CRC_INLINE_ASM OR HAVE_SSE42CRC_INTRIN)
- add_definitions(-DX86_SSE42_CRC_HASH)
- set(SSE42_SRCS ${ARCHDIR}/insert_string_sse.c)
- add_feature_info(SSE42_CRC 1 "Support SSE4.2 optimized CRC hash generation, using \"${SSE4FLAG}\"")
- list(APPEND ZLIB_ARCH_SRCS ${SSE42_SRCS})
- set_property(SOURCE ${SSE42_SRCS} PROPERTY COMPILE_FLAGS "${SSE4FLAG} ${NOLTOFLAG}")
- if(HAVE_SSE42CRC_INTRIN)
- add_definitions(-DX86_SSE42_CRC_INTRIN)
+ add_definitions(-DX86_SSE42_CRC_HASH)
+ set(SSE42_SRCS ${ARCHDIR}/insert_string_sse.c)
+ add_feature_info(SSE42_CRC 1 "Support SSE4.2 optimized CRC hash generation, using \"${SSE4FLAG}\"")
+ list(APPEND ZLIB_ARCH_SRCS ${SSE42_SRCS})
+ set_property(SOURCE ${SSE42_SRCS} PROPERTY COMPILE_FLAGS "${SSE4FLAG} ${NOLTOFLAG}")
+ if(HAVE_SSE42CRC_INTRIN)
+ add_definitions(-DX86_SSE42_CRC_INTRIN)
+ endif()
+ endif()
+ if(HAVE_SSE42CMPSTR_INTRIN)
+ add_definitions(-DX86_SSE42_CMP_STR)
+ set(SSE42_SRCS ${ARCHDIR}/compare258_sse.c)
+ add_feature_info(SSE42_COMPARE258 1 "Support SSE4.2 optimized compare258, using \"${SSE4FLAG}\"")
+ list(APPEND ZLIB_ARCH_SRCS ${SSE42_SRCS})
+ set_property(SOURCE ${SSE42_SRCS} PROPERTY COMPILE_FLAGS "${SSE4FLAG} ${NOLTOFLAG}")
endif()
- endif()
- if(WITH_SSE4 AND HAVE_SSE42CMPSTR_INTRIN)
- add_definitions(-DX86_SSE42_CMP_STR)
- set(SSE42_SRCS ${ARCHDIR}/compare258_sse.c)
- add_feature_info(SSE42_COMPARE258 1 "Support SSE4.2 optimized compare258, using \"${SSE4FLAG}\"")
- list(APPEND ZLIB_ARCH_SRCS ${SSE42_SRCS})
- set_property(SOURCE ${SSE42_SRCS} PROPERTY COMPILE_FLAGS "${SSE4FLAG} ${NOLTOFLAG}")
- endif()
endif()
if(WITH_SSE2)
check_sse2_intrinsics()
if(HAVE_SSE2_INTRIN)
- add_definitions(-DX86_SSE2 -DX86_SSE2_CHUNKSET -DX86_SSE2_SLIDEHASH)
- set(SSE2_SRCS ${ARCHDIR}/chunkset_sse.c ${ARCHDIR}/slide_sse.c)
- list(APPEND ZLIB_ARCH_SRCS ${SSE2_SRCS})
- if(NOT ${ARCH} MATCHES "x86_64")
- set_property(SOURCE ${SSE2_SRCS} PROPERTY COMPILE_FLAGS "${SSE2FLAG} ${NOLTOFLAG}")
- add_feature_info(FORCE_SSE2 FORCE_SSE2 "Assume CPU is SSE2 capable")
- if(FORCE_SSE2)
- add_definitions(-DX86_NOCHECK_SSE2)
+ add_definitions(-DX86_SSE2 -DX86_SSE2_CHUNKSET -DX86_SSE2_SLIDEHASH)
+ set(SSE2_SRCS ${ARCHDIR}/chunkset_sse.c ${ARCHDIR}/slide_sse.c)
+ list(APPEND ZLIB_ARCH_SRCS ${SSE2_SRCS})
+ if(NOT ${ARCH} MATCHES "x86_64")
+ set_property(SOURCE ${SSE2_SRCS} PROPERTY COMPILE_FLAGS "${SSE2FLAG} ${NOLTOFLAG}")
+ add_feature_info(FORCE_SSE2 FORCE_SSE2 "Assume CPU is SSE2 capable")
+ if(FORCE_SSE2)
+ add_definitions(-DX86_NOCHECK_SSE2)
+ endif()
endif()
endif()
endif()
- endif()
if(WITH_SSSE3)
check_ssse3_intrinsics()
if(HAVE_SSSE3_INTRIN)
- add_definitions(-DX86_SSSE3 -DX86_SSSE3_ADLER32)
- set(SSSE3_SRCS ${ARCHDIR}/adler32_ssse3.c)
- add_feature_info(SSSE3_ADLER32 1 "Support SSSE3-accelerated adler32, using \"${SSSE3FLAG}\"")
- list(APPEND ZLIB_ARCH_SRCS ${SSSE3_SRCS})
- set_property(SOURCE ${SSSE3_SRCS} PROPERTY COMPILE_FLAGS "${SSSE3FLAG} ${NOLTOFLAG}")
- endif()
+ add_definitions(-DX86_SSSE3 -DX86_SSSE3_ADLER32)
+ set(SSSE3_SRCS ${ARCHDIR}/adler32_ssse3.c)
+ add_feature_info(SSSE3_ADLER32 1 "Support SSSE3-accelerated adler32, using \"${SSSE3FLAG}\"")
+ list(APPEND ZLIB_ARCH_SRCS ${SSSE3_SRCS})
+ set_property(SOURCE ${SSSE3_SRCS} PROPERTY COMPILE_FLAGS "${SSSE3FLAG} ${NOLTOFLAG}")
+ endif()
endif()
if(WITH_PCLMULQDQ AND WITH_SSSE3 AND WITH_SSE4)
check_pclmulqdq_intrinsics()
if(HAVE_PCLMULQDQ_INTRIN AND HAVE_SSSE3_INTRIN)
- add_definitions(-DX86_PCLMULQDQ_CRC)
- set(PCLMULQDQ_SRCS ${ARCHDIR}/crc_folding.c)
- add_feature_info(PCLMUL_CRC 1 "Support CRC hash generation using PCLMULQDQ, using \"${SSSE3FLAG} ${SSE4FLAG} ${PCLMULFLAG}\"")
- list(APPEND ZLIB_ARCH_SRCS ${PCLMULQDQ_SRCS})
- set_property(SOURCE ${PCLMULQDQ_SRCS} PROPERTY COMPILE_FLAGS "${SSSE3FLAG} ${SSE4FLAG} ${PCLMULFLAG} ${NOLTOFLAG}")
+ add_definitions(-DX86_PCLMULQDQ_CRC)
+ set(PCLMULQDQ_SRCS ${ARCHDIR}/crc_folding.c)
+ add_feature_info(PCLMUL_CRC 1 "Support CRC hash generation using PCLMULQDQ, using \"${SSSE3FLAG} ${SSE4FLAG} ${PCLMULFLAG}\"")
+ list(APPEND ZLIB_ARCH_SRCS ${PCLMULQDQ_SRCS})
+ set_property(SOURCE ${PCLMULQDQ_SRCS} PROPERTY COMPILE_FLAGS "${SSSE3FLAG} ${SSE4FLAG} ${PCLMULFLAG} ${NOLTOFLAG}")
+ endif()
endif()
endif()
endif()
-endif()
message(STATUS "Architecture-specific source files: ${ZLIB_ARCH_SRCS}")