234 lines
5.3 KiB
Text
234 lines
5.3 KiB
Text
(library
|
|
(name blake3_mini)
|
|
(libraries unix)
|
|
(foreign_archives blake3)
|
|
(foreign_stubs
|
|
(language c)
|
|
(names blake3_stubs)
|
|
(flags :standard -O3)))
|
|
|
|
; There are 3 configrations for the blake3 rules:
|
|
; 1. Handwritten assembly for x86_64
|
|
; 2. SIMD instructions with neon intrinsics for arm64
|
|
; 3. Portable C implementation
|
|
|
|
; 1. Handwritten assembly for x86_64
|
|
|
|
(foreign_library
|
|
(enabled_if
|
|
(= %{architecture} "amd64"))
|
|
(archive_name blake3)
|
|
(language c)
|
|
(names blake3 blake3_portable blake3_dispatch)
|
|
(extra_objects
|
|
blake3_avx2_x86-64
|
|
blake3_avx512_x86-64
|
|
blake3_sse2_x86-64
|
|
blake3_sse41_x86-64))
|
|
|
|
; 1.1: Unix assembly for x86_64
|
|
|
|
(rule
|
|
(enabled_if
|
|
(and
|
|
(= %{architecture} "amd64")
|
|
(or
|
|
(= %{system} "linux")
|
|
(= %{system} "macosx")
|
|
(= %{system} "beos")
|
|
(= %{system} "freebsd")
|
|
(= %{system} "openbsd")
|
|
(= %{system} "netbsd"))))
|
|
(deps blake3_avx2_x86-64_unix.S)
|
|
(targets blake3_avx2_x86-64%{ext_obj})
|
|
(action
|
|
(run %{cc} -c %{deps} -o %{targets})))
|
|
|
|
(rule
|
|
(enabled_if
|
|
(and
|
|
(= %{architecture} "amd64")
|
|
(or
|
|
(= %{system} "linux")
|
|
(= %{system} "macosx")
|
|
(= %{system} "beos")
|
|
(= %{system} "freebsd")
|
|
(= %{system} "openbsd")
|
|
(= %{system} "netbsd"))))
|
|
(deps blake3_avx512_x86-64_unix.S)
|
|
(targets blake3_avx512_x86-64%{ext_obj})
|
|
(action
|
|
(run %{cc} -c %{deps} -o %{targets})))
|
|
|
|
(rule
|
|
(enabled_if
|
|
(and
|
|
(= %{architecture} "amd64")
|
|
(or
|
|
(= %{system} "linux")
|
|
(= %{system} "macosx")
|
|
(= %{system} "beos")
|
|
(= %{system} "freebsd")
|
|
(= %{system} "openbsd")
|
|
(= %{system} "netbsd"))))
|
|
(deps blake3_sse2_x86-64_unix.S)
|
|
(targets blake3_sse2_x86-64%{ext_obj})
|
|
(action
|
|
(run %{cc} -c %{deps} -o %{targets})))
|
|
|
|
(rule
|
|
(enabled_if
|
|
(and
|
|
(= %{architecture} "amd64")
|
|
(or
|
|
(= %{system} "linux")
|
|
(= %{system} "macosx")
|
|
(= %{system} "beos")
|
|
(= %{system} "freebsd")
|
|
(= %{system} "openbsd")
|
|
(= %{system} "netbsd"))))
|
|
(deps blake3_sse41_x86-64_unix.S)
|
|
(targets blake3_sse41_x86-64%{ext_obj})
|
|
(action
|
|
(run %{cc} -c %{deps} -o %{targets})))
|
|
|
|
; 1.2: Windows GNU assembly for x86_64
|
|
|
|
(rule
|
|
(enabled_if
|
|
(and
|
|
(= %{architecture} "amd64")
|
|
(= %{os_type} "Win32")
|
|
(= %{system} "mingw64")
|
|
(<> %{ocaml-config:ccomp_type} "msvc")))
|
|
(deps blake3_avx2_x86-64_windows_gnu.S)
|
|
(targets blake3_avx2_x86-64%{ext_obj})
|
|
(action
|
|
(run %{cc} -c %{deps} -o %{targets})))
|
|
|
|
(rule
|
|
(enabled_if
|
|
(and
|
|
(= %{architecture} "amd64")
|
|
(= %{os_type} "Win32")
|
|
(= %{system} "mingw64")
|
|
(<> %{ocaml-config:ccomp_type} "msvc")))
|
|
(deps blake3_avx512_x86-64_windows_gnu.S)
|
|
(targets blake3_avx512_x86-64%{ext_obj})
|
|
(action
|
|
(run %{cc} -c %{deps} -o %{targets})))
|
|
|
|
(rule
|
|
(enabled_if
|
|
(and
|
|
(= %{architecture} "amd64")
|
|
(= %{os_type} "Win32")
|
|
(= %{system} "mingw64")
|
|
(<> %{ocaml-config:ccomp_type} "msvc")))
|
|
(deps blake3_sse2_x86-64_windows_gnu.S)
|
|
(targets blake3_sse2_x86-64%{ext_obj})
|
|
(action
|
|
(run %{cc} -c %{deps} -o %{targets})))
|
|
|
|
(rule
|
|
(enabled_if
|
|
(and
|
|
(= %{architecture} "amd64")
|
|
(= %{os_type} "Win32")
|
|
(= %{system} "mingw64")
|
|
(<> %{ocaml-config:ccomp_type} "msvc")))
|
|
(deps blake3_sse41_x86-64_windows_gnu.S)
|
|
(targets blake3_sse41_x86-64%{ext_obj})
|
|
(action
|
|
(run %{cc} -c %{deps} -o %{targets})))
|
|
|
|
; 1.3: Windows MSVC assembly for x86_64
|
|
|
|
; %{ocaml-config:asm} has other flags that we don't want
|
|
|
|
(rule
|
|
(enabled_if
|
|
(and
|
|
(= %{architecture} "amd64")
|
|
(= %{os_type} "Win32")
|
|
(= %{ocaml-config:ccomp_type} "msvc")))
|
|
(deps blake3_avx2_x86-64_windows_msvc.asm)
|
|
(targets blake3_avx2_x86-64%{ext_obj})
|
|
(action
|
|
(run %{bin:ml64} /nologo /quiet /Fo%{targets} /c %{deps})))
|
|
|
|
(rule
|
|
(enabled_if
|
|
(and
|
|
(= %{architecture} "amd64")
|
|
(= %{os_type} "Win32")
|
|
(= %{ocaml-config:ccomp_type} "msvc")))
|
|
(deps blake3_avx512_x86-64_windows_msvc.asm)
|
|
(targets blake3_avx512_x86-64%{ext_obj})
|
|
(action
|
|
(run %{bin:ml64} /nologo /quiet /Fo%{targets} /c %{deps})))
|
|
|
|
(rule
|
|
(enabled_if
|
|
(and
|
|
(= %{architecture} "amd64")
|
|
(= %{os_type} "Win32")
|
|
(= %{ocaml-config:ccomp_type} "msvc")))
|
|
(deps blake3_sse2_x86-64_windows_msvc.asm)
|
|
(targets blake3_sse2_x86-64%{ext_obj})
|
|
(action
|
|
(run %{bin:ml64} /nologo /quiet /Fo%{targets} /c %{deps})))
|
|
|
|
(rule
|
|
(enabled_if
|
|
(and
|
|
(= %{architecture} "amd64")
|
|
(= %{os_type} "Win32")
|
|
(= %{ocaml-config:ccomp_type} "msvc")))
|
|
(deps blake3_sse41_x86-64_windows_msvc.asm)
|
|
(targets blake3_sse41_x86-64%{ext_obj})
|
|
(action
|
|
(run %{bin:ml64} /nologo /quiet /Fo%{targets} /c %{deps})))
|
|
|
|
; 2. SIMD instructions with neon intrinsics for arm64
|
|
|
|
(foreign_library
|
|
(enabled_if
|
|
(or
|
|
(= %{architecture} "arm64")
|
|
(= %{architecture} "aarch64")))
|
|
(archive_name blake3)
|
|
(language c)
|
|
(names blake3 blake3_portable blake3_dispatch blake3_neon))
|
|
|
|
; 3. Portable C implementation
|
|
|
|
(foreign_library
|
|
(enabled_if
|
|
(and
|
|
(not
|
|
(and
|
|
(= %{architecture} "amd64")
|
|
(or
|
|
(= %{os_type} "Win32")
|
|
(= %{system} "win64")
|
|
(= %{system} "mingw64")
|
|
(= %{system} "linux")
|
|
(= %{system} "macosx")
|
|
(= %{system} "beos")
|
|
(= %{system} "freebsd")
|
|
(= %{system} "openbsd")
|
|
(= %{system} "netbsd"))))
|
|
(not
|
|
(or
|
|
(= %{architecture} "arm64")
|
|
(= %{architecture} "aarch64")))))
|
|
(archive_name blake3)
|
|
(language c)
|
|
(flags
|
|
:standard
|
|
"-DBLAKE3_NO_SSE2"
|
|
"-DBLAKE3_NO_SSE41"
|
|
"-DBLAKE3_NO_AVX2"
|
|
"-DBLAKE3_NO_AVX512")
|
|
(names blake3 blake3_portable blake3_dispatch))
|