digest-blake3 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,54 @@
1
+ require "mkmf"
2
+
3
+ unless have_header("ruby.h") && have_header("ruby/digest.h")
4
+ raise "Can't find ruby.h & ruby/digest.h, try installing the ruby-dev headers"
5
+ end
6
+
7
+ CONFIG["optflags"] = "-O3"
8
+
9
+ # we can't let create_makefile default to compiling all source files in the directory, because then
10
+ # it won't set the appropriate flags for the different versions. start by explicitly resetting the
11
+ # list to the files that we always want. blake3_ruby.o is the only one we've implemented ourselves
12
+ # - the rest are the blake3_* files from https://github.com/BLAKE3-team/BLAKE3/tree/master/c.
13
+ $objs = %w(
14
+ blake3_ruby.o
15
+ blake3.o
16
+ blake3_dispatch.o
17
+ blake3_portable.o
18
+ )
19
+
20
+ $confs = []
21
+
22
+ def check_supported_flags(flags, obj_if_enabled, def_if_disabled)
23
+ # run an arbitrary compilation test to see if these flags work; unfortunately there's no documented
24
+ # mkmf method to do that, but all the have_ methods accept optional flags, so we use have_header.
25
+ if have_header("blake3.h", nil, flags)
26
+ # we have to explicitly add a compilation rule for the object file to inject the additional flags -
27
+ # apart from the #{flags} subsitution, this is otherwise just what mkmf.rb puts in the .c.o rule.
28
+ $confs << "#{obj_if_enabled}: #{obj_if_enabled[0..-2]}c\n\t$(ECHO) compiling $(<)\n\t$(Q) #{COMPILE_C.sub "$(CC)", "$(CC) #{flags}"}\n\n"
29
+ $objs << obj_if_enabled
30
+ else
31
+ $defs << def_if_disabled
32
+ end
33
+ end
34
+
35
+ check_supported_flags("-msse4.1", "blake3_sse41.o", "-DBLAKE3_NO_SSE41")
36
+ check_supported_flags("-mavx2", "blake3_avx2.o", "-DBLAKE3_NO_AVX2")
37
+ check_supported_flags("-mavx512f -mavx512vl", "blake3_avx512.o", "-DBLAKE3_NO_AVX512")
38
+
39
+ if have_header("arm_neon.h")
40
+ $objs << "blake3_neon.o"
41
+ $defs << "-DBLAKE3_USE_NEON"
42
+ end
43
+
44
+ create_makefile("digest/blake3") do |conf|
45
+ # annoyingly, we have to repeat this line from the default output, so that it appears above the
46
+ # defines we add below and therefore becomes the default target. otherwise running 'make' with
47
+ # no arguments builds the first of our .o files instead of the library.
48
+ conf << "all: $(DLLIB)\n"
49
+
50
+ # then we can add our target definitions. we can't do this using the built-in mechanisms because
51
+ # there's no way to specify different compilation flags _per file_, which we need to do to build
52
+ # the multi-CPU support appropriately for blake3.
53
+ conf << $confs.join
54
+ end
@@ -0,0 +1,7 @@
1
+ require 'digest'
2
+
3
+ module Digest
4
+ class BLAKE3 < Base
5
+ VERSION = "0.0.1"
6
+ end
7
+ end
@@ -0,0 +1,2 @@
1
+ require "digest/blake3/blake3"
2
+ require "digest/blake3/version"
metadata ADDED
@@ -0,0 +1,120 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: digest-blake3
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Will Bryant
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2020-03-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.0'
55
+ description: Self-contained C implementation of BLAKE3.
56
+ email:
57
+ - will.bryant@gmail.com
58
+ executables: []
59
+ extensions:
60
+ - ext/digest/blake3/extconf.rb
61
+ extra_rdoc_files: []
62
+ files:
63
+ - ".gitignore"
64
+ - ".travis.yml"
65
+ - Gemfile
66
+ - Gemfile.lock
67
+ - LICENSE.txt
68
+ - README.md
69
+ - Rakefile
70
+ - bin/console
71
+ - bin/setup
72
+ - digest-blake3.gemspec
73
+ - ext/digest/blake3/blake3.c
74
+ - ext/digest/blake3/blake3.h
75
+ - ext/digest/blake3/blake3_avx2.c
76
+ - ext/digest/blake3/blake3_avx2_x86-64_unix.S
77
+ - ext/digest/blake3/blake3_avx2_x86-64_windows_gnu.S
78
+ - ext/digest/blake3/blake3_avx2_x86-64_windows_msvc.asm
79
+ - ext/digest/blake3/blake3_avx512.c
80
+ - ext/digest/blake3/blake3_avx512_x86-64_unix.S
81
+ - ext/digest/blake3/blake3_avx512_x86-64_windows_gnu.S
82
+ - ext/digest/blake3/blake3_avx512_x86-64_windows_msvc.asm
83
+ - ext/digest/blake3/blake3_dispatch.c
84
+ - ext/digest/blake3/blake3_impl.h
85
+ - ext/digest/blake3/blake3_neon.c
86
+ - ext/digest/blake3/blake3_portable.c
87
+ - ext/digest/blake3/blake3_ruby.c
88
+ - ext/digest/blake3/blake3_sse41.c
89
+ - ext/digest/blake3/blake3_sse41_x86-64_unix.S
90
+ - ext/digest/blake3/blake3_sse41_x86-64_windows_gnu.S
91
+ - ext/digest/blake3/blake3_sse41_x86-64_windows_msvc.asm
92
+ - ext/digest/blake3/extconf.rb
93
+ - lib/digest/blake3.rb
94
+ - lib/digest/blake3/version.rb
95
+ homepage: https://github.com/willbryant/digest-blake3
96
+ licenses:
97
+ - MIT
98
+ metadata: {}
99
+ post_install_message:
100
+ rdoc_options: []
101
+ require_paths:
102
+ - lib
103
+ - ext
104
+ required_ruby_version: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ required_rubygems_version: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ requirements: []
115
+ rubyforge_project:
116
+ rubygems_version: 2.7.6
117
+ signing_key:
118
+ specification_version: 4
119
+ summary: BLAKE3 for Ruby
120
+ test_files: []