@@ -4,8 +4,10 @@ open Lake DSL
4
4
5
5
package Blake3
6
6
7
+ @[default_target]
7
8
lean_lib Blake3
8
9
10
+ @[test_driver]
9
11
lean_exe Blake3Test
10
12
11
13
abbrev blake3RepoURL := "https://github.com/BLAKE3-team/BLAKE3"
@@ -27,38 +29,41 @@ target cloneBlake3 pkg : GitRepo := do
27
29
def blake3CDir (blake3Repo : GitRepo) : System.FilePath :=
28
30
blake3Repo.dir / "c"
29
31
30
- abbrev blake3Flags : Array String :=
31
- #["-DBLAKE3_NO_SSE2" , "-DBLAKE3_NO_SSE41" , "-DBLAKE3_NO_AVX2" , "-DBLAKE3_NO_AVX512" ]
32
+ abbrev blake3Flags : Array String := #[
33
+ "-DBLAKE3_NO_SSE2" ,
34
+ "-DBLAKE3_NO_SSE41" ,
35
+ "-DBLAKE3_NO_AVX2" ,
36
+ "-DBLAKE3_NO_AVX512" ,
37
+ "-DBLAKE3_USE_NEON=0"
38
+ ]
32
39
33
40
abbrev compiler := "cc"
34
41
35
- def buildBlake3Obj (pkg : Package) (fileName : String) (addFlags : Bool) := do
42
+ def buildBlake3Obj (pkg : Package) (fileName : String) := do
36
43
let blake3Repo ← cloneBlake3.fetch >>= (·.await)
37
44
let cDir := blake3CDir blake3Repo
38
45
let srcJob ← inputTextFile $ cDir / fileName |>.addExtension "c"
39
46
let oFile := pkg.buildDir / fileName |>.addExtension "o"
40
47
let includeArgs := #["-I" , cDir.toString]
41
- let weakArgs := if addFlags then includeArgs ++ blake3Flags else includeArgs
48
+ let weakArgs := includeArgs ++ blake3Flags
42
49
buildO oFile srcJob weakArgs #[] compiler getLeanTrace
43
50
44
51
target ffi.o pkg : System.FilePath := do
45
52
let blake3Repo ← cloneBlake3.fetch >>= (·.await)
46
53
let oFile := pkg.buildDir / "ffi.o"
47
54
let srcJob ← inputTextFile $ pkg.dir / "ffi.c"
48
- let includeDir ← getLeanIncludeDir
55
+ let leanIncludeDir ← getLeanIncludeDir
49
56
let cDir := blake3CDir blake3Repo
50
- let weakArgs := #["-I" , includeDir .toString, "-I" , cDir.toString]
57
+ let weakArgs := #["-I" , leanIncludeDir .toString, "-I" , cDir.toString]
51
58
buildO oFile srcJob weakArgs #[] compiler getLeanTrace
52
59
53
60
extern_lib ffi pkg := do
54
61
-- Gather all `.o` file build jobs
55
- let mut oFileJobs := #[]
56
- oFileJobs := oFileJobs.push $ ← buildBlake3Obj pkg "blake3" false
57
- oFileJobs := oFileJobs.push $ ← buildBlake3Obj pkg "blake3_dispatch" true
58
- oFileJobs := oFileJobs.push $ ← buildBlake3Obj pkg "blake3_portable" true
59
- if (← IO.getEnv "BLAKE3_USE_NEON" ) == some "1" then
60
- oFileJobs := oFileJobs.push $ ← buildBlake3Obj pkg "blake3_neon" true
61
- oFileJobs := oFileJobs.push $ ← ffi.o.fetch
62
+ let blake3O ← buildBlake3Obj pkg "blake3"
63
+ let blake3DispatchO ← buildBlake3Obj pkg "blake3_dispatch"
64
+ let blake3PortableO ← buildBlake3Obj pkg "blake3_portable"
65
+ let ffiO ← ffi.o.fetch
66
+ let oFileJobs := #[blake3O, blake3DispatchO, blake3PortableO, ffiO]
62
67
63
68
let name := nameToStaticLib "ffi"
64
69
buildStaticLib (pkg.nativeLibDir / name) oFileJobs
0 commit comments