]> git.ipfire.org Git - thirdparty/zlib-ng.git/commitdiff
CMakeLists.txt, configure: match source order; .so's now identical on more platforms.
authorDan Kegel <dank@kegel.com>
Thu, 2 Jul 2020 17:21:50 +0000 (10:21 -0700)
committerHans Kristian Rosbach <hk-github@circlestorm.org>
Fri, 17 Jul 2020 13:34:32 +0000 (15:34 +0200)
Also:
- use same name for .so on CMake and configure in --zlib-compat case
- configure: merge i686 and x86_64 sections, since they were essentially identical
- pkgcheck.sh: verify resulting shared libraries are bit-for-bit identical
- pkgcheck.sh: use diffoscope if present to show differences in shared libraries

Don't install diffoscope in ci, since that slows down successful
runs; we can add it later if failures become common.

Fixes #638 (at least for the systems tested)

CMakeLists.txt
configure
test/pkgcheck.sh

index e18f3c0d36efba8b2d907289e2a87a25daa1681e..529020432738815611fabb3f9a11583568ff7557 100644 (file)
@@ -648,6 +648,13 @@ if(WITH_OPTIM)
         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)
@@ -659,13 +666,6 @@ if(WITH_OPTIM)
             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)
@@ -849,15 +849,15 @@ set(ZLIB_SRCS
     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
index 09b9f73ff545ecd04b67d08a80ee5ed7403d7bdf..ee7fbf8551e1f95cedce05aa1f63d0126213dd47 100755 (executable)
--- a/configure
+++ b/configure
@@ -902,7 +902,7 @@ fi
 
 # 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) {
@@ -1120,8 +1120,8 @@ ARCH_SHARED_OBJS=''
 
 # 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"
@@ -1135,31 +1135,11 @@ case "${ARCH}" in
             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
@@ -1175,37 +1155,25 @@ case "${ARCH}" in
                 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"
@@ -1214,46 +1182,12 @@ case "${ARCH}" in
                 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
     ;;
 
@@ -1444,8 +1378,8 @@ case "${ARCH}" in
                 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
     ;;
index fa25e40d49272a87e82e20cfa383f7acb7ad7406..4c757dff10a9510fa0d9c24c79755b03a9d5cd70 100644 (file)
@@ -9,8 +9,8 @@ If --zlib-compat, tests with zlib compatible builds.
 
 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,
@@ -18,22 +18,22 @@ and set the environment variables used by configure or cmake.
 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"
 
@@ -124,9 +124,6 @@ cd btmp1
     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
@@ -145,6 +142,16 @@ repack_ar() {
   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,
@@ -152,11 +159,14 @@ repack_ar() {
 # 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