add_definitions(-DARM_CPUID)
list(APPEND ZLIB_ARCH_HDRS ${ARCHDIR}/arm.h)
list(APPEND ZLIB_ARCH_SRCS ${ARCHDIR}/armfeature.c)
+ if(WITH_ACLE AND NOT MSVC)
+ 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}")
+ list(APPEND ZLIB_ARCH_SRCS ${ACLE_SRCS})
+ add_feature_info(ACLE_CRC 1 "Support ACLE optimized CRC hash generation, using \"${ACLEFLAG}\"")
+ endif()
if(WITH_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)
add_feature_info(NEON_ALDER32 1 "Support NEON instructions in adler32, using \"${NEONFLAG}\"")
add_feature_info(NEON_SLIDEHASH 1 "Support NEON instructions in slide_hash, using \"${NEONFLAG}\"")
endif()
- if(WITH_ACLE AND NOT MSVC)
- 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}")
- list(APPEND ZLIB_ARCH_SRCS ${ACLE_SRCS})
- add_feature_info(ACLE_CRC 1 "Support ACLE optimized CRC hash generation, using \"${ACLEFLAG}\"")
- endif()
elseif(BASEARCH_PPC_FOUND)
if(WITH_POWER8 AND HAVE_POWER8)
add_definitions(-DPOWER8)
compress.c
crc32.c
deflate.c
- deflate_quick.c
deflate_fast.c
deflate_medium.c
+ deflate_quick.c
deflate_slow.c
functable.c
- inflate.c
infback.c
- inftrees.c
inffast.c
+ inflate.c
+ inftrees.c
insert_string.c
trees.c
uncompr.c
# Check for SSE2 intrinsics
case "${ARCH}" in
- i386 | i486 | i586 | i686)
+ i386 | i486 | i586 | i686 | x86_64)
cat > $test.c << EOF
#include <immintrin.h>
int main(void) {
# Set ARCH specific FLAGS
case "${ARCH}" in
- # x86 specific optimizations
- i386 | i486 | i586 | i686)
+ # x86/amd64 specific optimizations
+ i386 | i486 | i586 | i686 |x86_64)
ARCHDIR=arch/x86
CFLAGS="${CFLAGS} -DUNALIGNED_OK -DUNALIGNED64_OK"
ARCH_STATIC_OBJS="${ARCH_STATIC_OBJS} x86.o"
ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} x86.lo"
- if test ${HAVE_SSE2_INTRIN} -eq 1; then
- CFLAGS="${CFLAGS} -DX86_SSE2 -DX86_SSE2_CHUNKSET"
- SFLAGS="${SFLAGS} -DX86_SSE2 -DX86_SSE2_CHUNKSET"
- ARCH_STATIC_OBJS="${ARCH_STATIC_OBJS} chunkset_sse.o slide_sse.o"
- ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} chunkset_sse.lo slide_sse.lo"
-
- if test $forcesse2 -eq 1; then
- CFLAGS="${CFLAGS} -DX86_NOCHECK_SSE2"
- SFLAGS="${SFLAGS} -DX86_NOCHECK_SSE2"
- fi
- fi
-
- if test ${HAVE_SSSE3_INTRIN} -eq 1; then
- CFLAGS="${CFLAGS} -DX86_SSSE3 -DX86_SSSE3_ADLER32"
- SFLAGS="${SFLAGS} -DX86_SSSE3 -DX86_SSSE3_ADLER32"
- ARCH_STATIC_OBJS="${ARCH_STATIC_OBJS} adler32_ssse3.o"
- ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} adler32_ssse3.lo"
- fi
-
- if test ${HAVE_SSE42CMPSTR_INTRIN} -eq 1; then
- CFLAGS="${CFLAGS} -DX86_SSE42_CMP_STR"
- SFLAGS="${SFLAGS} -DX86_SSE42_CMP_STR"
-
- ARCH_STATIC_OBJS="${ARCH_STATIC_OBJS} compare258_sse.o"
- ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} compare258_sse.lo"
+ if test ${HAVE_AVX2_INTRIN} -eq 1; then
+ CFLAGS="${CFLAGS} -DX86_AVX2 -DX86_AVX2_ADLER32"
+ SFLAGS="${SFLAGS} -DX86_AVX2 -DX86_AVX2_ADLER32"
+ ARCH_STATIC_OBJS="${ARCH_STATIC_OBJS} slide_avx.o compare258_avx.o adler32_avx.o"
+ ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} slide_avx.lo compare258_avx.lo adler32_avx.lo"
fi
if test ${HAVE_SSE42CRC_INTRIN} -eq 1 || test ${HAVE_SSE42CRC_INLINE_ASM} -eq 1; then
ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} insert_string_sse.lo"
fi
- if test ${HAVE_AVX2_INTRIN} -eq 1; then
- CFLAGS="${CFLAGS} -DX86_AVX2 -DX86_AVX2_ADLER32"
- SFLAGS="${SFLAGS} -DX86_AVX2 -DX86_AVX2_ADLER32"
- ARCH_STATIC_OBJS="${ARCH_STATIC_OBJS} compare258_avx.o slide_avx.o adler32_avx.o"
- ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} compare258_avx.lo slide_avx.lo adler32_avx.lo"
- fi
+ if test ${HAVE_SSE42CMPSTR_INTRIN} -eq 1; then
+ CFLAGS="${CFLAGS} -DX86_SSE42_CMP_STR"
+ SFLAGS="${SFLAGS} -DX86_SSE42_CMP_STR"
- if test ${HAVE_PCLMULQDQ_INTRIN} -eq 1; then
- CFLAGS="${CFLAGS} -DX86_PCLMULQDQ_CRC"
- SFLAGS="${SFLAGS} -DX86_PCLMULQDQ_CRC"
- ARCH_STATIC_OBJS="${ARCH_STATIC_OBJS} crc_folding.o"
- ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} crc_folding.lo"
+ ARCH_STATIC_OBJS="${ARCH_STATIC_OBJS} compare258_sse.o"
+ ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} compare258_sse.lo"
fi
- fi
- ;;
-
- # x86_64 specific optimizations
- x86_64)
- ARCHDIR=arch/x86
-
- CFLAGS="${CFLAGS} -DUNALIGNED_OK -DUNALIGNED64_OK"
- SFLAGS="${SFLAGS} -DUNALIGNED_OK -DUNALIGNED64_OK"
-
- # Enable arch-specific optimizations
- if test $without_optimizations -eq 0; then
- CFLAGS="${CFLAGS} -DX86_CPUID -DX86_SSE2 -DX86_SSE2_CHUNKSET"
- SFLAGS="${SFLAGS} -DX86_CPUID -DX86_SSE2 -DX86_SSE2_CHUNKSET"
+ if test ${HAVE_SSE2_INTRIN} -eq 1; then
+ CFLAGS="${CFLAGS} -DX86_SSE2 -DX86_SSE2_CHUNKSET"
+ SFLAGS="${SFLAGS} -DX86_SSE2 -DX86_SSE2_CHUNKSET"
+ ARCH_STATIC_OBJS="${ARCH_STATIC_OBJS} chunkset_sse.o slide_sse.o"
+ ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} chunkset_sse.lo slide_sse.lo"
- ARCH_STATIC_OBJS="${ARCH_STATIC_OBJS} x86.o chunkset_sse.o slide_sse.o"
- ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} x86.lo chunkset_sse.lo slide_sse.lo"
+ if test $forcesse2 -eq 1; then
+ CFLAGS="${CFLAGS} -DX86_NOCHECK_SSE2"
+ SFLAGS="${SFLAGS} -DX86_NOCHECK_SSE2"
+ fi
+ fi
if test ${HAVE_SSSE3_INTRIN} -eq 1; then
CFLAGS="${CFLAGS} -DX86_SSSE3 -DX86_SSSE3_ADLER32"
ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} adler32_ssse3.lo"
fi
- if test ${HAVE_SSE42CRC_INTRIN} -eq 1; then
- CFLAGS="${CFLAGS} -DX86_SSE42_CRC_INTRIN"
- SFLAGS="${SFLAGS} -DX86_SSE42_CRC_INTRIN"
- fi
-
if test ${HAVE_PCLMULQDQ_INTRIN} -eq 1; then
CFLAGS="${CFLAGS} -DX86_PCLMULQDQ_CRC"
SFLAGS="${SFLAGS} -DX86_PCLMULQDQ_CRC"
ARCH_STATIC_OBJS="${ARCH_STATIC_OBJS} crc_folding.o"
ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} crc_folding.lo"
fi
-
- if test ${HAVE_AVX2_INTRIN} -eq 1; then
- CFLAGS="${CFLAGS} -DX86_AVX2 -DX86_AVX2_ADLER32"
- SFLAGS="${SFLAGS} -DX86_AVX2 -DX86_AVX2_ADLER32"
- ARCH_STATIC_OBJS="${ARCH_STATIC_OBJS} compare258_avx.o slide_avx.o adler32_avx.o"
- ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} compare258_avx.lo slide_avx.lo adler32_avx.lo"
- fi
-
- if test ${HAVE_SSE42CMPSTR_INTRIN} -eq 1; then
- CFLAGS="${CFLAGS} -DX86_SSE42_CMP_STR"
- SFLAGS="${SFLAGS} -DX86_SSE42_CMP_STR"
-
- ARCH_STATIC_OBJS="${ARCH_STATIC_OBJS} compare258_sse.o"
- ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} compare258_sse.lo"
- fi
-
- if test ${HAVE_SSE42CRC_INTRIN} -eq 1 || test ${HAVE_SSE42CRC_INLINE_ASM} -eq 1; then
- CFLAGS="${CFLAGS} -DX86_SSE42_CRC_HASH"
- SFLAGS="${SFLAGS} -DX86_SSE42_CRC_HASH"
-
- if test ${HAVE_SSE42CRC_INTRIN} -eq 1; then
- CFLAGS="${CFLAGS} -DX86_SSE42_CRC_INTRIN"
- SFLAGS="${SFLAGS} -DX86_SSE42_CRC_INTRIN"
- fi
-
- ARCH_STATIC_OBJS="${ARCH_STATIC_OBJS} insert_string_sse.o"
- ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} insert_string_sse.lo"
- fi
-
fi
;;
CFLAGS="${CFLAGS} -DPOWER8 -DPOWER_FEATURES -DPOWER8_VSX_ADLER32 -DPOWER8_VSX_SLIDEHASH"
SFLAGS="${SFLAGS} -DPOWER8 -DPOWER_FEATURES -DPOWER8_VSX_ADLER32 -DPOWER8_VSX_SLIDEHASH"
- ARCH_STATIC_OBJS="${ARCH_STATIC_OBJS} adler32_power8.o power.o slide_hash_power8.o"
- ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} adler32_power8.lo power.lo slide_hash_power8.lo"
+ ARCH_STATIC_OBJS="${ARCH_STATIC_OBJS} power.o adler32_power8.o slide_hash_power8.o"
+ ARCH_SHARED_OBJS="${ARCH_SHARED_OBJS} power.lo adler32_power8.lo slide_hash_power8.lo"
fi
fi
;;
To build the 32 bit version for the current 64 bit arch:
-$ sudo apt install ninja-build gcc-multilib
-$ export CMAKE_ARGS="-DCMAKE_C_FLAGS=-m32" LDFLAGS=-m32
+$ sudo apt install ninja-build diffoscope gcc-multilib
+$ export CMAKE_ARGS="-DCMAKE_C_FLAGS=-m32" CFLAGS=-m32 LDFLAGS=-m32
$ sh test/pkgcheck.sh
To cross-build, install the appropriate qemu and gcc packages,
On Ubuntu, for example (values taken from .github/workflows/pkgconf.yml):
arm HF:
-$ sudo apt install ninja-build qemu gcc-arm-linux-gnueabihf libc6-dev-armhf-cross
+$ sudo apt install ninja-build diffoscope qemu gcc-arm-linux-gnueabihf libc6-dev-armhf-cross
$ export CHOST=arm-linux-gnueabihf
$ export CMAKE_ARGS="-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm.cmake -DCMAKE_C_COMPILER_TARGET=${CHOST}"
aarch64:
-$ sudo apt install ninja-build qemu gcc-aarch64-linux-gnu libc6-dev-arm64-cross
+$ sudo apt install ninja-build diffoscope qemu gcc-aarch64-linux-gnu libc6-dev-arm64-cross
$ export CHOST=aarch64-linux-gnu
$ export CMAKE_ARGS="-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-aarch64.cmake -DCMAKE_C_COMPILER_TARGET=${CHOST}"
ppc (32 bit big endian):
-$ sudo apt install ninja-build qemu gcc-powerpc-linux-gnu libc6-dev-powerpc-cross
+$ sudo apt install ninja-build diffoscope qemu gcc-powerpc-linux-gnu libc6-dev-powerpc-cross
$ export CHOST=powerpc-linux-gnu
$ export CMAKE_ARGS="-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc.cmake"
ppc64le:
-$ sudo apt install ninja-build qemu gcc-powerpc64le-linux-gnu libc6-dev-ppc64el-cross
+$ sudo apt install ninja-build diffoscope qemu gcc-powerpc64le-linux-gnu libc6-dev-ppc64el-cross
$ export CHOST=powerpc64le-linux-gnu
$ export CMAKE_ARGS="-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc64le.cmake"
export LDFLAGS="-Wl,-headerpad_max_install_names"
;;
esac
- # Use same flags as cmake did.
- CFLAGS="$(awk -F= '/CMAKE_C_FLAGS:/ {print $2}' < ../btmp2/CMakeCache.txt | tr '\012' ' ')"
- export CFLAGS
../configure $CONFIGURE_ARGS
make
make install
fi
}
+case $(uname) in
+Darwin)
+ # Remove the build uuid.
+ dylib1=$(find pkgtmp1 -type f -name '*.dylib*')
+ dylib2=$(find pkgtmp2 -type f -name '*.dylib*')
+ strip -x -no_uuid "$dylib1"
+ strip -x -no_uuid "$dylib2"
+ ;;
+esac
+
# The ar on newer systems defaults to -D (i.e. deterministic),
# but FreeBSD 12.1, Debian 8, and Ubuntu 14.04 seem to not do that.
# I had trouble passing -D safely to the ar inside CMakeLists.txt,
# Also, cmake uses different .o suffix anyway...
repack_ar
-if diff --exclude '*.dylib*' --exclude '*.so*' -Nur pkgtmp1 pkgtmp2
+if diff -Nur pkgtmp1 pkgtmp2
then
echo pkgcheck-cmake-bits-identical PASS
else
echo pkgcheck-cmake-bits-identical FAIL
+ dylib1=$(find pkgtmp1 -type f -name '*.dylib*' -print -o -type f -name '*.so.*' -print)
+ dylib2=$(find pkgtmp2 -type f -name '*.dylib*' -print -o -type f -name '*.so.*' -print)
+ diffoscope $dylib1 $dylib2 | cat
exit 1
fi