1
0
mirror of https://github.com/BLAKE3-team/BLAKE3 synced 2025-01-21 15:50:01 +01:00
Commit Graph

204 Commits

Author SHA1 Message Date
Jack O'Connor
81f772a4cd version 1.5.5
Changes since 1.5.4:
- `b3sum --check` now supports checkfiles with Windows-style newlines.
  `b3sum` still emits Unix-style newlines, even on Windows, but
  sometimes text editors or version control tools will swap them.
- The "digest" feature (deleted in v1.5.2) has been added back to the
  `blake3` crate. This is for backwards compatibility only, and it's
  insta-deprecated. All callers should prefer the "traits-preview"
  feature.
2024-11-26 18:16:20 -08:00
Francesco Gazzetta
aa3e8ec32a build(CMake): Fix pkg-config for absolute CMAKE_INSTALL_*DIR
CMAKE_INSTALL_*DIR can be absolute, and in that case ${prefix} should
not be prepended.

See https://github.com/jtojnar/cmake-snips/?tab=readme-ov-file#concatenating-paths-when-building-pkg-config-files
2024-10-08 14:05:58 +02:00
Jack O'Connor
95e42b84fc version 1.5.4
Changes since 1.5.3:
- Initial implementation of SIMD acceleration for the XOF (i.e.
  blake3::Hasher::finalize_xof). This brings long output performance
  into line with long input performance. Currently AVX-512-only and
  Unix-only.
- Add build support for "gnullvm" targets (Clang on Windows).
- The "zeroize" feature no longer depends on proc-macros and syn.
2024-08-19 10:41:29 -07:00
Jack O'Connor
4cc34b0e85 defined(__unix__) -> !defined(_WIN32) 2024-08-19 09:41:40 -07:00
Jack O'Connor
dcff6b65ac delete portable::xof_many and blake3_xof_many_portable 2024-08-18 17:43:58 -07:00
Jack O'Connor
5c4c351a1a make xof_many fall back to compress_xof instead of portable code 2024-08-18 11:32:23 -07:00
Jack O'Connor
93c989afee test that xof_many doesn't write more blocks than requested 2024-08-18 10:50:43 -07:00
Jack O'Connor
47f9283a93 mark blake3_xof_many_avx512 Unix-only in Rust and C 2024-08-15 16:54:56 -07:00
Jack O'Connor
bb2c530bb0 fix a warning in the blake3_c_rust_bindings tests 2024-08-15 16:12:33 -07:00
Jack O'Connor
e74172acc3 integrate xof_many with the Rust implementation and with Rust and C tests 2024-08-15 16:02:10 -07:00
Jack O'Connor
80b83effbd add an intrinsics implementation of blake3_xof_many_avx512 2024-08-15 16:02:10 -07:00
Samuel Neves
a3ca51ff9e integrate with c code 2024-08-15 16:02:10 -07:00
Samuel Neves
f0166c2bbe initial blake3_xof_many_avx512 2024-08-15 16:02:10 -07:00
Jack O'Connor
acaeabeff3 version 1.5.3
Changes since 1.5.2:
- Revert the serialization change. It was intended to be backwards
  compatible, but that didn't hold for non-self-describing serialization
  formats like bincode. See #414.
2024-07-14 22:01:46 -07:00
Jack O'Connor
27cbd6bdd5 version 1.5.2
Changes since 1.5.1:
- `build.rs` sets `cc::Build::emit_rerun_if_env_changed(false)` to
  prevent some unnecessary rebuilds, particularly when the `PATH`
  changes on Windows. See #324.
- Serializing a `Hash` produces a bytestring instead of an array in
  formats that support bytestrings (like CBOR). Deserialization is
  backwards-compatible with the array format.
- Cleanup and edge case fixes in the C and CMake builds.
2024-07-12 09:50:13 -07:00
Henrik S. Gaßmann
524ce1cc3e build(CMake): Add basic CMake presets for MSVC 2024-07-09 13:20:22 -04:00
Henrik S. Gaßmann
330af75f5b build(CMake): Fix SIMD type detection
Refs: #402
2024-07-09 13:20:22 -04:00
Henrik S. Gaßmann
73d0ffacc9 build(CMake): Add CLI overrides for SIMD detection
Refs: #402
2024-07-09 13:20:22 -04:00
wangcundashang
1ce8099896 chore: fix some comments
Signed-off-by: wangcundashang <wangcundashang@qq.com>
2024-07-03 12:32:24 -04:00
Tom Stellard
c8834c24a6 Remove some dead stores
These were caught by the clang static analyzer.
2024-06-11 14:26:39 -04:00
Javier Blazquez
0816badf3a fix Windows ARM64 build and detect ARM64EC as ARM64 2024-04-07 11:48:02 -04:00
Jack O'Connor
54930c9522 version 1.5.1
Changes since 1.5.0:
- The Rust crate is now compatible with Miri.
- ~1% performance improvement on Arm NEON contributed by @divinity76 (#384).
- Various fixes and improvements in the CMake build.
- The MSRV of b3sum is now 1.74.1. (The MSRV of the library crate is
  unchanged, 1.66.1.)
2024-03-12 00:34:53 -07:00
divinity76
58bea0bcbb
optimize neon loadu_128/storeu_128 (#384)
vld1q_u8 and vst1q_u8 has no alignment requirements.

This improves performance on Oracle Cloud's VM.Standard.A1.Flex by 1.15% on a 16*1024 input, from 13920 nanoseconds down to 13800 nanoseconds (approx)
2024-03-12 03:21:51 -04:00
Jack O'Connor
8fc36186b8 comment cleanup 2024-02-04 13:32:30 -08:00
divinity76
2918c51bc6 silenc gcc Werror=logical-op
```
/home/travis/build/php/php-src/ext/hash/blake3/upstream_blake3/c/blake3.c: In function ‘compress_subtree_to_parent_node’:
/home/travis/build/php/php-src/ext/hash/blake3/upstream_blake3/c/blake3.c:354:22: error: logical ‘and’ of mutually exclusive tests is always false [-Werror=logical-op]
  354 |   while (num_cvs > 2 && num_cvs <= MAX_SIMD_DEGREE_OR_2) {
      |                      ^~
cc1: all warnings being treated as errors
make: *** [Makefile:1910: ext/hash/blake3/upstream_blake3/c/blake3.lo] Error 1
```

Fixes https://github.com/BLAKE3-team/BLAKE3/issues/379.
Closes https://github.com/BLAKE3-team/BLAKE3/pull/380.
2024-02-04 13:31:55 -08:00
Henrik S. Gaßmann
7ce2aa41e9 build(CMake): Require C99 mode
Specify language requirement as a [compile-feature] and force compiler
extensions off ensuring portability problems are detected early on.
Note that we do not use the `C_STANDARD` property, because it doesn't
propagate to dependent targets and would prohibit users from compiling
their code base with consistent flags / language configuations if they
were to target a newer C standard. Similarly we do not configure
`C_STANDARD_REQUIRED` as [compile-features] do not interact with
it--they are enforced regardless.

[compile-feature]: https://cmake.org/cmake/help/latest/manual/cmake-compile-features.7.html#compile-feature-requirements
2023-12-02 11:11:10 -08:00
Viacheslav H
1930721c50
Fix CMake target include directories if library is used with add_subdirectory or FetchContent 2023-11-05 12:16:48 -05:00
Rui Ueyama
e1f851d461 Fix Windows build with clang-cl
clang-cl is LLVM's MSVC-compatible compiler frontend for Windows ABI.
If clang-cl is in use, `CMAKE_C_COMPILER_ID` is `Clang` even though
it doesn't take Unix-like command line options but MSVC-like options.

`if(MSVC)` is the correct predicate to check if we should pass MSVC-ish
command line options.
2023-11-05 09:08:13 -08:00
Henrik Gaßmann
3e14f865d3 style: Remove trailing whitespace in CMakeLists.txt 2023-10-31 11:51:26 +01:00
Henrik Gaßmann
bfd568897a build(CMake): Provide NEON cflags for ARMv8 32bit
ARMv8 CPUs are guaranteed to support NEON instructions. However, for
32bit ARMv8 triplets GCC needs to explicitly be configured to enable
NEON intrinsics.
2023-10-31 11:45:26 +01:00
Henrik Gaßmann
dd30dcb002 build(CMake): Apply PP definitions to all sources 2023-10-02 11:12:50 -07:00
Jack O'Connor
5aa53f07f7 version 1.5.0
Changes since 1.4.1:
- The Rust crate's Hasher type has gained new helper methods for common
  forms of IO: update_reader, update_mmap, and update_mmap_rayon. The
  latter matches the default behavior of b3sum. The mmap methods are
  gated by the new "mmap" Cargo feature.
- Most of the Rust crate's public types now implement the Zeroize trait.
  This is gated by the new "zeroize" Cargo feature.
- The Rust crate's Hash types now implements the serde Serialize and
  Deserialize traits. This is gated by the new "serde" Cargo feature.
- The C library now uses atomics to cache detected CPU features under
  most compilers other than MSVC. Previously this was a non-atomic
  write, which was probably "benign" but made TSan unhappy.
- NEON support is now disabled by default on big-endian AArch64.
  Previously this was a build error if the caller didn't explicitly
  disable it.
2023-09-20 20:12:18 -07:00
Havard Eidnes
8bfe93fbf9 c/blake3_impl.h: don't try to do NEON on big-endian aarch64.
...because this would otherwise hit
  #error "This implementation only supports little-endian ARM."
in c/blake3_neon.c.
2023-09-19 16:57:11 -07:00
Jack O'Connor
02dec6e9a6 fix a build break in the blake3_c tests 2023-09-10 14:04:57 -07:00
Jack O'Connor
d6265dafc9 update dev-dependencies 2023-09-10 13:40:12 -07:00
Javier Blazquez
12823b8760 blake3_dispatch: Fix race condition initializing g_cpu_features.
If multiple threads try to compute a hash simultaneously before the library has been used for the first time,
the logic in get_cpu_features that detects CPU features will write to g_cpu_features without synchronization,
which is a race condition and flagged by ThreadSanitizer.

This change marks g_cpu_features as an atomic variable to address the race condition.
2023-07-21 19:18:40 -07:00
Jack O'Connor
760ed6a8bf version 1.4.1
Changes since 1.4.0:
- Improved performance in the ARM NEON implementation for both C and
  Rust callers. This affects AArch64 targets by default and ARMv7
  targets that explicitly enable (and support) NEON. The size of the
  improvement depends on the microarchitecture, but I've benchmarked
  ~1.3x on a Cortex-A53 and ~1.2x on an Apple M1. Contributed by
  @sdlyyxy in #319.
- The MSRV is now 1.66.1 for both the `blake3` crate and `b3sum`.
2023-07-06 14:30:32 -07:00
Jack O'Connor
f7e1a7429f retain the old NEON rotations in inline comments 2023-07-05 10:29:02 -07:00
sdlyyxy
7038dad280 NEON rot7/rot12 use shl+sri 2023-07-05 13:28:45 -04:00
sdlyyxy
a03b7af061 NEON: only use __builtin_shufflevector on clang 2023-07-05 13:28:45 -04:00
sdlyyxy
38a06e78d3 Improve NEON rot16/rot8 2023-07-05 13:28:45 -04:00
1f604
e47e570691 Fix typo exendable -> extendable 2023-06-27 11:31:51 -04:00
Henrik S. Gaßmann
3f396d2239 build(CMake): Rework NEON detection
Given the myriad of `-mfpu` options for ARM [1], the inability to
portably query for CPU support, and the lack of standardized ISA names
we have no other choice, but to opt out of automatically supplying NEON
compile flags. Instead we simply add the NEON optimized source file if
we detect an ISA with guaranteed NEON support (>= ARMv8) or the user
explicitly requests it (in which case he is expected to provide the
compile flags with `CMAKE_C_FLAGS` or `BLAKE3_CFLAGS_NEON` either
through a toolchain file or commandline parameters).

[1]: https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html
2023-06-17 22:57:45 -04:00
Jack O'Connor
74220e2ca1 correct the VERSION in CMakeLists.txt 2023-06-17 13:22:26 -07:00
Henrik S. Gaßmann
072bef5bf0 build(CMake): Fix pkg-config directory specification
- Properly add the install prefix to the libdir and includedir.
- Define the prefix once.
- Quote paths which may contain whitespace.
2023-06-17 14:57:25 -04:00
Jack O'Connor
65733a753b version 1.4.0
Changes since 1.3.3:
- The C implementation provides a `CMakeLists.txt` for callers who build
  with CMake. The CMake build is not yet stable, and callers should
  expect breaking changes in patch version updates. The "by hand" build
  will always continue to be supported and documented.
- `b3sum` supports the `--seek` flag, to set the starting position in
  the output stream.
- `b3sum --check` prints a summary of errors to stderr.
- `Hash::as_bytes` is const.
- `Hash` supports `from_bytes`, which is const.
2023-06-08 13:06:32 -07:00
Henrik S. Gaßmann
76f9339312 build(cmake): Print the active SIMD configuration 2023-05-24 13:31:00 -07:00
Henrik S. Gaßmann
0e872a02ea build(cmake): Properly configure dispatcher for no SIMD
If no SIMD support could be configured we need to inform
`blake3_dispatch.c` about it.
2023-05-24 13:31:00 -07:00
Henrik S. Gaßmann
962d5f757e build(cmake): Correctly detect x86 and arm64 Windows
The ISA names communicated by `CMAKE_SYSTEM_PROCESSOR` aren't as much
standardized as one would wish they were. Factor the different names
into lists allowing for simpler checks and future updates.

Add hidden options for enabling SIMD support in case ISA detection
fails. These should only be used to temporarily workarounds until the
ISA name lists has been updated/fixed.
2023-05-24 13:31:00 -07:00
Jack O'Connor
ef5679ef7b Update c/CMakeLists.txt
Co-authored-by: Henrik Gaßmann <BurningEnlightenment@users.noreply.github.com>
2023-05-23 14:48:45 -07:00