@@ -54,6 +54,7 @@ cmake_dependent_option(WITH_GTEST "Build gtest_zlib" ON "ZLIB_ENABLE_TESTS" OFF)
5454cmake_dependent_option (WITH_FUZZERS "Build test/fuzz" OFF "ZLIB_ENABLE_TESTS" OFF )
5555cmake_dependent_option (WITH_BENCHMARKS "Build test/benchmarks" OFF "ZLIB_ENABLE_TESTS" OFF )
5656cmake_dependent_option (WITH_BENCHMARK_APPS "Build application benchmarks" OFF "WITH_BENCHMARKS" OFF )
57+ cmake_dependent_option (WITH_ALL_FALLBACKS "Build all generic fallback functions (Useful for Gbench)" OFF "WITH_BENCHMARKS" OFF )
5758
5859if (WITH_GTEST OR WITH_FUZZERS OR WITH_BENCHMARKS)
5960 enable_language (CXX )
@@ -1168,6 +1169,13 @@ if(WITH_OPTIM)
11681169 endif ()
11691170 endif ()
11701171 endif ()
1172+ else ()
1173+ # If WITH_OPTIM is disabled, we need all the fallbacks.
1174+ set (WITH_ALL_FALLBACKS ON )
1175+ endif ()
1176+
1177+ if (WITH_ALL_FALLBACKS)
1178+ add_definitions (-DWITH_ALL_FALLBACKS )
11711179endif ()
11721180
11731181message (STATUS "Architecture-specific source files: ${ZLIB_ARCH_SRCS} " )
@@ -1275,14 +1283,6 @@ set(ZLIB_PRIVATE_HDRS
12751283 zutil_p.h
12761284)
12771285set (ZLIB_SRCS
1278- arch/generic/adler32_c.c
1279- arch/generic/adler32_fold_c.c
1280- arch/generic/chunkset_c.c
1281- arch/generic/compare256_c.c
1282- arch/generic/crc32_braid_c.c
1283- arch/generic/crc32_c.c
1284- arch/generic/crc32_fold_c.c
1285- arch/generic/slide_hash_c.c
12861286 adler32.c
12871287 compress.c
12881288 crc32.c
@@ -1306,6 +1306,37 @@ set(ZLIB_SRCS
13061306 zutil.c
13071307)
13081308
1309+ set (ZLIB_ALL_FALLBACK_SRCS
1310+ arch/generic/adler32_c.c
1311+ arch/generic/adler32_fold_c.c
1312+ arch/generic/crc32_braid_c.c
1313+ arch/generic/crc32_c.c
1314+ arch/generic/crc32_fold_c.c
1315+ arch/generic/slide_hash_c.c
1316+ arch/generic/chunkset_c.c
1317+ arch/generic/compare256_c.c
1318+ )
1319+
1320+ if (WITH_ALL_FALLBACKS)
1321+ list (APPEND ZLIB_GENERIC_SRCS ${ZLIB_ALL_FALLBACK_SRCS} )
1322+ elseif (${ARCH} STREQUAL "x86_64" AND WITH_SSE2)
1323+ # x86_64 always has SSE2, so let the SSE2 functions act as fallbacks.
1324+ list (APPEND ZLIB_GENERIC_SRCS
1325+ arch/generic/adler32_c.c
1326+ arch/generic/adler32_fold_c.c
1327+ arch/generic/crc32_braid_c.c
1328+ arch/generic/crc32_c.c
1329+ arch/generic/crc32_fold_c.c
1330+ )
1331+
1332+ # x86_64 does not need compare256 fallback if we have BUILTIN_CTZ
1333+ if (NOT HAVE_BUILTIN_CTZ)
1334+ list (APPEND ZLIB_GENERIC_SRCS arch/generic/compare256_c.c)
1335+ endif ()
1336+ else ()
1337+ list (APPEND ZLIB_GENERIC_SRCS ${ZLIB_ALL_FALLBACK_SRCS} )
1338+ endif ()
1339+
13091340if (WITH_CRC32_CHORBA)
13101341 list (APPEND ZLIB_SRCS arch/generic/crc32_chorba_c.c)
13111342endif ()
@@ -1324,7 +1355,7 @@ set(ZLIB_GZFILE_SRCS
13241355 gzwrite.c
13251356)
13261357
1327- set (ZLIB_ALL_SRCS ${ZLIB_SRCS} ${ZLIB_ARCH_HDRS} ${ZLIB_ARCH_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS} )
1358+ set (ZLIB_ALL_SRCS ${ZLIB_GENERIC_SRCS} ${ ZLIB_SRCS} ${ZLIB_ARCH_HDRS} ${ZLIB_ARCH_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS} )
13281359if (WITH_GZFILEOP)
13291360 list (APPEND ZLIB_ALL_SRCS ${ZLIB_GZFILE_PRIVATE_HDRS} ${ZLIB_GZFILE_SRCS} )
13301361endif ()
0 commit comments