lean4-htt/tests/lake/examples/ffi/lib/lakefile.lean
Mac Malone 590ff23e71
fix: lake: moreLinkObjs|Libs on a lean_exe (#11117)
This PR fixes a bug where Lake ignored `moreLinkObjs` and `moreLinkLibs`
on a `lean_exe`.
2025-11-08 04:20:42 +00:00

61 lines
1.6 KiB
Text

import Lake
open System Lake DSL
package ffi where
srcDir := "lean"
@[default_target]
lean_exe test where
root := `Main
lean_lib FFI
/-! ## Static C FFI Library -/
input_file ffi_static.c where
path := "c" / "ffi_static.c"
text := true
target ffi_static.o pkg : FilePath := do
let srcJob ← ffi_static.c.fetch
let oFile := pkg.buildDir / "c" / "ffi_static.o"
buildO oFile srcJob #[] #["-fPIC"] "cc"
target libleanffi_static pkg : FilePath := do
let ffiO ← ffi_static.o.fetch
let name := nameToStaticLib "leanffi"
buildStaticLib (pkg.staticLibDir / name) #[ffiO]
lean_lib FFI.Static where
moreLinkObjs := #[libleanffi_static]
/-! ## Shared C++ FFI Library -/
input_file ffi_shared.cpp where
path := "c" / "ffi_shared.cpp"
text := true
target ffi_shared.o pkg : FilePath := do
let srcJob ← ffi_shared.cpp.fetch
let oFile := pkg.buildDir / "c" / "ffi_shared.o"
let weakArgs := #["-I", (← getLeanIncludeDir).toString]
buildO oFile srcJob weakArgs #["-fPIC"] "c++" getLeanTrace
target libleanffi_shared pkg : Dynlib := do
let libName := "leanffi"
let ffiO ← ffi_shared.o.fetch
let weakArgs := #["-L", (← getLeanLibDir).toString]
let leanArgs ← getLeanLinkSharedFlags
buildSharedLib libName (pkg.sharedLibDir / nameToSharedLib libName)
#[ffiO] #[] weakArgs leanArgs "c++" getLeanTrace
lean_lib FFI.Shared where
moreLinkLibs := #[libleanffi_shared]
/-! ## Executable-only FFI -/
@[default_target]
lean_exe standalone where
root := `Standalone
moreLinkObjs := #[libleanffi_static]
moreLinkLibs := #[libleanffi_shared]