mte/unikernel/duniverse/dune_/vendor/ocaml-blake3-mini/dune
2025-11-11 02:07:51 +01:00

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))