From 29e926eee87ecc6ae8b36daacdb32df2cef4015a6f169107be61e50fe8815076 Mon Sep 17 00:00:00 2001 From: OBS User unknown Date: Mon, 30 Dec 2024 19:49:28 +0000 Subject: [PATCH] [info=04f3caff52d71154ac40d11564546762787031b336dcbd4461dd309136fa4cb8] OBS-URL: https://build.opensuse.org/package/show/science/xxhash?expand=0&rev=32 --- .gitattributes | 23 ++++ .gitignore | 1 + Makefile | 10 ++ _scmsync.obsinfo | 4 + build.specials.obscpio | 3 + cpu-1135g7 | 111 +++++++++++++++++ inline.patch | 32 +++++ test-tools-do-not-override-cflags.patch | 16 +++ xh.cpp | 18 +++ xxHash-0.8.2.tar.gz | 3 + xxhash.changes | 158 ++++++++++++++++++++++++ xxhash.spec | 112 +++++++++++++++++ 12 files changed, 491 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 _scmsync.obsinfo create mode 100644 build.specials.obscpio create mode 100644 cpu-1135g7 create mode 100644 inline.patch create mode 100644 test-tools-do-not-override-cflags.patch create mode 100644 xh.cpp create mode 100644 xxHash-0.8.2.tar.gz create mode 100644 xxhash.changes create mode 100644 xxhash.spec diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9b03811 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,23 @@ +## Default LFS +*.7z filter=lfs diff=lfs merge=lfs -text +*.bsp filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.gem filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.jar filter=lfs diff=lfs merge=lfs -text +*.lz filter=lfs diff=lfs merge=lfs -text +*.lzma filter=lfs diff=lfs merge=lfs -text +*.obscpio filter=lfs diff=lfs merge=lfs -text +*.oxt filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.rpm filter=lfs diff=lfs merge=lfs -text +*.tbz filter=lfs diff=lfs merge=lfs -text +*.tbz2 filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.txz filter=lfs diff=lfs merge=lfs -text +*.whl filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57affb6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.osc diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..f58d25a --- /dev/null +++ b/Makefile @@ -0,0 +1,10 @@ +SHELL=/bin/bash + +test: xh linux-6.6.1.tar linux-6.6.2.tar linux-6.6.3.tar linux-6.6.4.tar linux-6.6.5.tar + cat linux-6.*.tar{,,,,,,,} | time ./xh + +%.tar: + wget -O- https://cdn.kernel.org/pub/linux/kernel/v6.x/$@.xz | xz -cd >$@ + +xh: xh.cpp + g++ -o xh xh.cpp -lxxhash -Wall -O2 -g diff --git a/_scmsync.obsinfo b/_scmsync.obsinfo new file mode 100644 index 0000000..86bdc4d --- /dev/null +++ b/_scmsync.obsinfo @@ -0,0 +1,4 @@ +mtime: 1735588143 +commit: 04f3caff52d71154ac40d11564546762787031b336dcbd4461dd309136fa4cb8 +url: https://src.opensuse.org/jengelh/xxhash +revision: master diff --git a/build.specials.obscpio b/build.specials.obscpio new file mode 100644 index 0000000..5253a94 --- /dev/null +++ b/build.specials.obscpio @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:485792ab4096a362be4925eb5030059972f4c96d771fa100bfb0ca37a49a41cc +size 264 diff --git a/cpu-1135g7 b/cpu-1135g7 new file mode 100644 index 0000000..68c96a3 --- /dev/null +++ b/cpu-1135g7 @@ -0,0 +1,111 @@ + +=== test === + +standard openSUSE xxhash packages of today + +$ make +cat linux-6.*.tar{,,,,,,,} | time ./xh +5df8e93736b5a2bddd0b324a455b61fc +3.24user 6.69system 0:13.69elapsed 72%CPU (0avgtext+0avgdata 3824maxresident)k +0inputs+0outputs (0major+178minor)pagefaults 0swaps +14:04 f3:../xx/xxhash $ make +cat linux-6.*.tar{,,,,,,,} | time ./xh +5df8e93736b5a2bddd0b324a455b61fc +3.29user 6.05system 0:13.04elapsed 71%CPU (0avgtext+0avgdata 3720maxresident)k +0inputs+0outputs (0major+178minor)pagefaults 0swaps +14:05 f3:../xx/xxhash $ make +cat linux-6.*.tar{,,,,,,,} | time ./xh +5df8e93736b5a2bddd0b324a455b61fc +3.20user 6.29system 0:13.19elapsed 72%CPU (0avgtext+0avgdata 3664maxresident)k +0inputs+0outputs (0major+177minor)pagefaults 0swaps +14:05 f3:../xx/xxhash $ make +cat linux-6.*.tar{,,,,,,,} | time ./xh +5df8e93736b5a2bddd0b324a455b61fc +3.38user 5.91system 0:12.89elapsed 72%CPU (0avgtext+0avgdata 3712maxresident)k +0inputs+0outputs (0major+178minor)pagefaults 0swaps + +Mean/Spread: 13.20 ± 0.31 sec (2.3% error) + + +=== switch packages === + +# rpm -U ... + + +=== verify AVX512 is now in use === + +Watch this space closely. + +$ gdb xh +Reading symbols from xh... +(gdb) b main +Breakpoint 1 at 0x4010b0: file xh.cpp, line 7. +(gdb) r ) at dl-init.c:74 +#2 call_init (l=, argc=1, argv=0x7fffffffd988, env=0x7fffffffd998) at dl-init.c:26 +#3 0x00007ffff7fca63c in _dl_init (main_map=0x7ffff7fbe000, argc=1, argv=0x7fffffffd988, env=0x7fffffffd998) at dl-init.c:121 +#4 0x00007ffff7fe2ba0 in _dl_start_user () from /lib64/ld-linux-x86-64.so.2 +#5 0x0000000000000001 in ?? () +#6 0x00007fffffffde8c in ?? () +#7 0x0000000000000000 in ?? () +(gdb) n +707 int vecID = XXH_featureTest(); +(gdb) +719 XXH_g_dispatch = XXH_kDispatch[vecID]; +(gdb) p vecID +$1 = 3 [= XXH_AVX512!] + + +=== test === + +$ make test +cat linux-6.*.tar{,,,,,,,} | time ./xh +5df8e93736b5a2bddd0b324a455b61fc +3.37user 6.16system 0:13.23elapsed 72%CPU (0avgtext+0avgdata 3708maxresident)k +0inputs+0outputs (0major+177minor)pagefaults 0swaps +14:07 f3:../xx/xxhash $ make test +cat linux-6.*.tar{,,,,,,,} | time ./xh +5df8e93736b5a2bddd0b324a455b61fc +3.23user 6.27system 0:13.27elapsed 71%CPU (0avgtext+0avgdata 3664maxresident)k +0inputs+0outputs (0major+176minor)pagefaults 0swaps +14:07 f3:../xx/xxhash $ make test +cat linux-6.*.tar{,,,,,,,} | time ./xh +5df8e93736b5a2bddd0b324a455b61fc +3.26user 6.77system 0:13.75elapsed 73%CPU (0avgtext+0avgdata 3712maxresident)k +0inputs+0outputs (0major+178minor)pagefaults 0swaps +14:07 f3:../xx/xxhash $ make test +cat linux-6.*.tar{,,,,,,,} | time ./xh +5df8e93736b5a2bddd0b324a455b61fc +3.19user 6.07system 0:12.96elapsed 71%CPU (0avgtext+0avgdata 3712maxresident)k +0inputs+0outputs (0major+178minor)pagefaults 0swaps + +Mean/Spread: 13.30 ± 0.34s (2.5% error) + +== Lessons learned == + +Prerequisite for good measurement: + * consistent(!) error rate (4 individual measurements is a bit on the low side, but ... anyway) + +Result: + * The observed 13.2s mean is within the margin of measurement error of the 13.3 mean and viceversa + +Conclusion: + * DISPATCH=1 made no impact on this machine diff --git a/inline.patch b/inline.patch new file mode 100644 index 0000000..17111e2 --- /dev/null +++ b/inline.patch @@ -0,0 +1,32 @@ +From: Jan Engelhardt +Date: 2024-09-04 17:08:46.573623857 +0200 +References: https://github.com/Cyan4973/xxHash/issues/943 + +Ditch forced inlining, gcc-14 does not like it when combined with -Og. +(gcc-13 was fine.) And I want everyone to be able to use -Og. + +In function 'void XXH3_hashLong_internal_loop(xxh_u64*, const xxh_u8*, size_t, const xxh_u8*, size_t, XXH3_f_accumulate, XXH3_f_scrambleAcc)', + inlined from 'XXH_NAMESPACEXXH128_hash_t XXH3_hashLong_128b_internal(const void*, size_t, const xxh_u8*, size_t, XXH3_f_accumulate, XXH3_f_scrambleAcc)' at /usr/include/xxhash.h:6416:32, + inlined from 'XXH_NAMESPACEXXH128_hash_t XXH3_hashLong_128b_default(const void*, size_t, XXH64_hash_t, const void*, size_t)' at /usr/include/xxhash.h:6442:39: +/usr/include/xxhash.h:5364:18: error: inlining failed in call to 'always_inline' 'void XXH3_accumulate_scalar(xxh_u64*, const xxh_u8*, const xxh_u8*, size_t)': function not considered for inlining + 5364 | XXH_FORCE_INLINE XXH3_ACCUMULATE_TEMPLATE(scalar) +/usr/include/xxhash.h:5544:14: note: called from here + 5544 | f_acc(acc, input + n*block_len, secret, nbStripesPerBlock); + +--- + xxhash.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: xxHash-0.8.2/xxhash.h +=================================================================== +--- xxHash-0.8.2.orig/xxhash.h ++++ xxHash-0.8.2/xxhash.h +@@ -2107,7 +2107,7 @@ static void* XXH_memcpy(void* dest, cons + # define XXH_NO_INLINE static + /* enable inlining hints */ + #elif defined(__GNUC__) || defined(__clang__) +-# define XXH_FORCE_INLINE static __inline__ __attribute__((always_inline, unused)) ++# define XXH_FORCE_INLINE static __inline__ __attribute__((unused)) + # define XXH_NO_INLINE static __attribute__((noinline)) + #elif defined(_MSC_VER) /* Visual Studio */ + # define XXH_FORCE_INLINE static __forceinline diff --git a/test-tools-do-not-override-cflags.patch b/test-tools-do-not-override-cflags.patch new file mode 100644 index 0000000..cf6250a --- /dev/null +++ b/test-tools-do-not-override-cflags.patch @@ -0,0 +1,16 @@ +From: Bruno Pitrus +Date: 2024-05-05 19:35:03+0000 + +--- xxHash-0.8.2/Makefile.old 2023-07-21 12:01:35.000000000 +0200 ++++ xxHash-0.8.2/Makefile 2024-05-05 21:19:32.265851133 +0200 +@@ -450,8 +450,8 @@ test-all: test test32 test-unicode clang + + .PHONY: test-tools + test-tools: +- CFLAGS=-Werror $(MAKE) -C tests/bench +- CFLAGS=-Werror $(MAKE) -C tests/collisions ++ $(MAKE) -C tests/bench ++ $(MAKE) -C tests/collisions + + .PHONY: test-xxh-nnn-sums + test-xxh-nnn-sums: xxhsum_and_links diff --git a/xh.cpp b/xh.cpp new file mode 100644 index 0000000..54d136e --- /dev/null +++ b/xh.cpp @@ -0,0 +1,18 @@ +#include +#include +#include + +int main() +{ + auto state = XXH3_createState(); + XXH3_128bits_reset(state); + char buffer[1048576]; + ssize_t count; + while ((count = read(STDIN_FILENO, buffer, sizeof(buffer))) > 0) + XXH3_128bits_update(state, buffer, count); + XXH128_canonical_t canon{}; + XXH128_canonicalFromHash(&canon, XXH3_128bits_digest(state)); + for (auto u : canon.digest) + printf("%02x", u); + printf("\n"); +} diff --git a/xxHash-0.8.2.tar.gz b/xxHash-0.8.2.tar.gz new file mode 100644 index 0000000..7a46e9e --- /dev/null +++ b/xxHash-0.8.2.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:baee0c6afd4f03165de7a4e67988d16f0f2b257b51d0e3cb91909302a26a79c4 +size 1141188 diff --git a/xxhash.changes b/xxhash.changes new file mode 100644 index 0000000..4eecbe6 --- /dev/null +++ b/xxhash.changes @@ -0,0 +1,158 @@ +------------------------------------------------------------------- +Tue Sep 3 02:11:09 UTC 2024 - Jan Engelhardt + +- Add inline.patch to resolve FTBFS on gcc-14 + -Og. + +------------------------------------------------------------------- +Sun May 5 19:35:03 UTC 2024 - Bruno Pitrus + +- Fix ftbfs with gcc14: + * use correct optflags also in %check + * add test-tools-do-not-override-cflags.patch +- Execute more tests + +------------------------------------------------------------------- +Thu Nov 30 14:43:11 UTC 2023 - Guillaume GARDET + +- Make use of openSUSE build flags + +------------------------------------------------------------------- +Fri Nov 3 10:00:32 UTC 2023 - Jan Engelhardt + +- Update to release 0.8.2 + * ARM NEON speed improvements; on M1 Pro it is +20% speed for + XXH3 and XXH128 (from 30.0 GB/s to 36 GB/s). + * Added support for ARM's SVE vector extension. + * Resolved some issues with XXH3's s390x vector implementation. +- Delete xxhash-avoid-armv6-unaligned-access.patch (should be + fixed by c0dd448b), delete 836f4e735cf368542f14005e41d2f84ec29dfd60.patch + (merged), delete 15ce80f9f2760609d8cc68cea76d3f3217ab70e1.patch + (merged) + +------------------------------------------------------------------- +Wed Mar 8 21:28:23 UTC 2023 - Michael Gorse + +- Add 15ce80f9f2760609d8cc68cea76d3f3217ab70e1.patch: fix build + failure on ppc64le when using gcc 7 (boo#1208794). + +------------------------------------------------------------------- +Mon Dec 20 10:27:32 UTC 2021 - Dirk Müller + +- fix racy check execution + +------------------------------------------------------------------- +Thu Dec 2 22:20:24 UTC 2021 - Dirk Müller + +- update to 0.8.1: + * perf : much improved performance for XXH3 streaming variants, notably on + gcc and msvc + * perf : improved XXH64 speed and latency on small inputs + * perf : small XXH32 speed and latency improvement on small inputs of random + size + * perf : minor stack usage improvement for XXH32 and XXH64 + * api : new experimental variants XXH3_*_withSecretandSeed() + * api : update XXH3_generateSecret(), can no generate secret of any size (>= + XXH3_SECRET_SIZE_MIN) + * cli : xxhsum can now generate and check XXH3 checksums, using command `-H3` + * build: can build xxhash without XXH3, with new build macro XXH_NO_XXH3 + * build: fix xxh_x86dispatch build with MSVC, by @apankrat + * build: XXH_INLINE_ALL can always be used safely, even after XXH_NAMESPACE + or a previous XXH_INLINE_ALL + * build: improved PPC64LE vector support + * install: fix pkgconfig + * install: compatibility with Haiku + * doc : code comments made compatible with doxygen + * misc : XXH_ACCEPT_NULL_INPUT_POINTER is no longer necessary, all functions + can accept NULL input pointers, as long as size == 0 + * misc : complete refactor of CI tests on Github Actions, offering much + larger coverage + * misc : xxhsum code base split into multiple specialized units, within + directory cli/ +- add 836f4e735cf368542f14005e41d2f84ec29dfd60.patch (fix manpage installation) + +------------------------------------------------------------------- +Tue Jul 6 17:15:34 CEST 2021 - ro@suse.de + +- add patch xxhash-avoid-armv6-unaligned-access.patch + do not expect unaligned accesses to work on armv6, it breaks + in our build setup using aarch64 kernels + +------------------------------------------------------------------- +Mon Aug 3 05:43:31 UTC 2020 - Ismail Dönmez + +- Update to version 0.8.0 + * api : stabilize XXH3 + * cli : xxhsum can produce BSD-style lines, with command --tag + * cli : xxhsum can parse and check BSD-style lines, using command --check + * cli : xxhsum - accepts console input + * cli : xxhsum accepts -- separator + * cli : fix : print correct default algo for symlinked helpers +- Add BR on c++_compiler, needed for test programs + +------------------------------------------------------------------- +Wed Dec 18 23:57:43 UTC 2019 - Stefan Brüns + +- Enable test suite run in %check + +------------------------------------------------------------------- +Tue Dec 17 13:17:59 UTC 2019 - Michał Rostecki + +- Update to version 0.7.2 + * Fixed collision ratio of XXH128 for some specific input lengths + * Improved VSX and NEON variants + * Improved performance of scalar code path (XXH_VECTOR=0), + * xxhsum: can generate 128-bit hash with command -H2 (note: for + experimental purposes only! XXH128 is not yet frozen) + * xxhsum: option -q removes status notifications + +------------------------------------------------------------------- +Thu Sep 26 10:06:43 UTC 2019 - simmphonie@opensuse.org + +- update to version 0.7.1 + - XXH3 updates: + * Secret first : the algorithm computation can be altered by + providing a "secret", which is any blob of bytes, of + size >= XXH3_SECRET_SIZE_MIN. + * seed is still available, and acts as a secret generator + * As a consequence of these changes, note that new return + values of XXH3 are not compatible with v0.7.0 + * updated ARM NEON variant + * Streaming implementation is available + * Improve compatibility and performance with Visual Studio + * Better integration when using XXH_INLINE_ALL : do not pollute + host namespace, use its own macros, such as XXH_ASSERT(), XXH_ALIGN, etc. + * 128-bits variant provide helper function, for comparison of hashes. + - general improvements: + * Better clang generation of rotl instruction + * XXH_REROLL build macro, to reduce binary size + * Improved cmake script + * Full benchmark program provided in /tests/bench + +- update to version 0.7.0 + - Add XXH3 hash algorithm + +------------------------------------------------------------------- +Thu Dec 6 09:25:19 UTC 2018 - Michał Rostecki + +- Remove false information from description - xxHash does not + derive from Argon2 algorithm. + +------------------------------------------------------------------- +Mon Dec 3 21:20:05 UTC 2018 - Jan Engelhardt + +- Trim bias from description + +------------------------------------------------------------------- +Tue Oct 16 20:10:06 UTC 2018 - t.gruner@katodev.de + +- update to version 0.6.5 + - Improved performance on small keys, thanks to suggestions from Jens Bauer + - New build macro, XXH_INLINE_ALL, extremely effective for small keys of fixed length (see this article for details) + - XXH32() : better performance on OS-X clang by disabling auto-vectorization + - Improved benchmark measurements accuracy on small keys + - Included xxHash specification document + +------------------------------------------------------------------- +Sun Jan 21 18:49:27 UTC 2018 - bugs@vdm-design.de + +- Initial package of version 0.6.4 diff --git a/xxhash.spec b/xxhash.spec new file mode 100644 index 0000000..5c7bca6 --- /dev/null +++ b/xxhash.spec @@ -0,0 +1,112 @@ +# +# spec file for package xxhash +# +# Copyright (c) 2024 SUSE LLC +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via https://bugs.opensuse.org/ +# + + +Name: xxhash +Version: 0.8.2 +Release: 0 +Summary: Non-cryptographic hash algorithm +License: BSD-2-Clause AND GPL-2.0-only +Group: Productivity/Security +URL: https://github.com/Cyan4973/xxHash +Source0: https://github.com/Cyan4973/xxHash/archive/v%{version}.tar.gz#/xxHash-%{version}.tar.gz +Patch1: test-tools-do-not-override-cflags.patch +Patch2: inline.patch +BuildRequires: gcc-c++ +BuildRequires: pkg-config +%{?suse_build_hwcaps_libs} + +%description +xxHash is a hash algorithm. It completes the SMHasher test suite which +evaluates collision, dispersion and randomness qualities of hash functions. +Hashes are identical on all platforms. + +%package -n libxxhash0 +Summary: Non-cryptographic hash algorithm +License: BSD-2-Clause +Group: System/Libraries + +%description -n libxxhash0 +xxHash is a hash algorithm. It completes the SMHasher test suite which +evaluates collision, dispersion and randomness qualities of hash functions. +Hashes are identical on all platforms. + +%package devel +Summary: Headers for xxHash, a non-cryptographic hash algorithm +License: BSD-2-Clause +Group: Development/Libraries/C and C++ +Requires: %{name} = %{version} +Requires: libxxhash0 = %{version} + +%description devel +Headers and other development files for xxHash. + +%prep +%autosetup -p1 -n xxHash-%{version} + +%build +# ALLOW_AVX just means "we guarantee we policed our %%optflags". +export CFLAGS="%{optflags} -DXXH_X86DISPATCH_ALLOW_AVX=1 -Og" +export CXXFLAGS="$CFLAGS" +export LDFLAGS="%{?build_ldflags}" +export DISPATCH=1 +# DISPATCH=1 if you want AVX2/AVX512. But it does not seem to perform any +# better than the lowest-denomimation code on at least the 1135G7 and 5950X +# CPUs, and for both LP64 as well as ILP32 — it seems to be all within margin +# of error. +%make_build prefix=%{_prefix} libdir=%{_libdir} + +%install +export CFLAGS="%{optflags} -DXXH_X86DISPATCH_ALLOW_AVX=1 -Og" +export CXXFLAGS="%{optflags}" +export LDFLAGS="%{?build_ldflags}" +export DISPATCH=1 +%make_install prefix=%{_prefix} libdir=%{_libdir} +rm -rf %{buildroot}%{_libdir}/libxxhash.a + +%check +export CFLAGS="%{optflags} -DXXH_X86DISPATCH_ALLOW_AVX=1" +export CXXFLAGS="%{optflags}" +export LDFLAGS="%{?build_ldflags}" +export DISPATCH=1 +# not safe for parallel execution as it removes xxhash.o and recreates it with different flags +# the list is taken from test-all with non-working/irrelevant ones (such as ones that change the toolchain) removed +%make_build -j1 test test-unicode listL120 trailingWhitespace test-xxh-nnn-sums + +%ldconfig_scriptlets -n libxxhash0 + +%files +%license LICENSE +%doc README.md +%{_bindir}/xxhsum +%{_bindir}/xxh32sum +%{_bindir}/xxh64sum +%{_bindir}/xxh128sum +%{_mandir}/man1/xxh32sum.* +%{_mandir}/man1/xxh64sum.* +%{_mandir}/man1/xxh128sum.* +%{_mandir}/man1/xxhsum.* + +%files -n libxxhash0 +%{_libdir}/libxxhash.so.* + +%files devel +%{_includedir}/* +%{_libdir}/pkgconfig/libxxhash.pc +%{_libdir}/libxxhash.so + +%changelog