1
0
Fork 0
mirror of https://github.com/BLAKE3-team/BLAKE3 synced 2024-05-13 11:36:09 +02:00
BLAKE3/Cargo.toml
Matthew Krupcale d91f20dd29 Start SSE2 implementation based on SSE4.1 version
Wire up basic functions and features for SSE2 support using the SSE4.1 version
as a basis without implementing the SSE2 instructions yet.

 * Cargo.toml: add no_sse2 feature
 * benches/bench.rs: wire SSE2 benchmarks
 * build.rs: add SSE2 rust intrinsics and assembly builds
 * c/Makefile.testing: add SSE2 C and assembly targets
 * c/README.md: add SSE2 to C build instructions
 * c/blake3_c_rust_bindings/build.rs: add SSE2 C rust binding builds
 * c/blake3_c_rust_bindings/src/lib.rs: add SSE2 C rust bindings
 * c/blake3_dispatch.c: add SSE2 C dispatch
 * c/blake3_impl.h: add SSE2 C function prototypes
 * c/blake3_sse2.c: add SSE2 C intrinsic file starting with SSE4.1 version
 * c/blake3_sse2_x86-64_{unix.S,windows_gnu.S,windows_msvc.asm}: add SSE2
   assembly files starting with SSE4.1 version
 * src/ffi_sse2.rs: add rust implementation using SSE2 C rust bindings
 * src/lib.rs: add SSE2 rust intrinsics and SSE2 C rust binding rust SSE2 module
   configurations
 * src/platform.rs: add SSE2 rust platform detection and dispatch
 * src/rust_sse2.rs: add SSE2 rust intrinsic file starting with SSE4.1 version
 * tools/instruction_set_support/src/main.rs: add SSE2 feature detection
2020-08-24 00:54:46 -04:00

91 lines
3.6 KiB
INI

[package]
name = "blake3"
version = "0.3.6"
authors = ["Jack O'Connor <oconnor663@gmail.com>"]
description = "the BLAKE3 hash function"
repository = "https://github.com/BLAKE3-team/BLAKE3"
license = "CC0-1.0 OR Apache-2.0"
documentation = "https://docs.rs/blake3"
readme = "README.md"
edition = "2018"
[features]
default = ["std"]
# The NEON implementation does not participate in dynamic feature detection,
# which is currently x86-only. If "neon" is on, NEON support is assumed. Note
# that AArch64 always supports NEON, but support on ARMv7 varies. The NEON
# implementation uses C intrinsics and requires a C compiler.
neon = []
# This crate uses libstd for std::io trait implementations, and also for
# runtime CPU feature detection. This feature is enabled by default. If you use
# --no-default-features, the only way to use the SIMD implementations in this
# crate is to enable the corresponding instruction sets statically for the
# entire build, with e.g. RUSTFLAGS="-C target-cpu=native".
std = ["digest/std"]
# The "rayon" feature (defined below as an optional dependency) enables the
# join::RayonJoin type, which can be used with Hasher::update_with_join to
# perform multi-threaded hashing. However, even if this feature is enabled, all
# other APIs remain single-threaded.
# ---------- Features below this line are for internal testing only. ----------
# By default on x86_64, this crate uses Samuel Neves' hand-written assembly
# implementations for SSE4.1, AVX2, and AVX512. (These provide both the best
# runtime performance, and the fastest build times.) And by default on 32-bit
# x86, this crate uses Rust intrinsics implementations for SSE4.1 and AVX2, and
# a C intrinsics implementation for AVX-512. In both cases, if a C compiler is
# not detected, or if AVX-512 support is missing from the detected compiler,
# build.rs automatically falls back to a pure Rust build. This feature forces
# that fallback, for testing purposes. (Note that in CI testing, we set the
# BLAKE3_CI environment variable, which instructs build.rs to error out rather
# than doing an automatic fallback.)
pure = []
# As described above, on x86_64 this crate use assembly implementations by
# default. Enabling the "prefer_intrinsics" feature makes this crate use
# intrinsics implementations on both 32-bit and 64-bit x86, again for testing
# purposes.
prefer_intrinsics = []
# Disable individual instruction sets. CI testing uses these flags to simulate
# different levels of hardware SIMD support. Note that code for the
# corresponding instruction set is still compiled; only detection is disabled.
#
# As noted above, these flags are *for testing only* and are not stable. It's
# possible that some users might find that their particular use case performs
# better if e.g. AVX-512 is disabled, because of issues like CPU downlocking.
# If that comes up, and if disabling the instruction set here at the feature
# level turns out to be the right approach, then we can design a stable
# feature. Until then, we reserve the right to break these features in a patch
# release.
no_sse2 = []
no_sse41 = []
no_avx2 = []
no_avx512 = []
[package.metadata.docs.rs]
# Document blake3::join::RayonJoin on docs.rs.
features = ["rayon"]
[dependencies]
arrayref = "0.3.5"
arrayvec = { version = "0.5.1", default-features = false, features = ["array-sizes-33-128"] }
constant_time_eq = "0.1.5"
rayon = { version = "1.2.1", optional = true }
cfg-if = "0.1.10"
digest = "0.9.0"
crypto-mac = "0.8.0"
[dev-dependencies]
hex = "0.4.2"
page_size = "0.4.1"
rand = "0.7.2"
rand_chacha = "0.2.1"
reference_impl = { path = "./reference_impl" }
[build-dependencies]
cc = "1.0.4"