lean4-htt/Lake/BuildBin.lean

77 lines
3 KiB
Text

/-
Copyright (c) 2021 Mac Malone. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Mac Malone
-/
import Lake.BuildPackage
import Lake.BuildTargets
open System
open Lean (Name)
namespace Lake
-- # Build Package .o Files
def ActivePackageTarget.oFileTargets
(self : ActivePackageTarget ActiveOleanAndCTargets) : Array FileTarget :=
self.moduleTargets.map fun (mod, target) =>
let oFile := self.package.modToO mod
let cTarget := Target.active <| ActiveOleanAndCTarget.cTarget target
leanOFileTarget oFile cTarget self.package.moreLeancArgs
def Package.moduleOTarget (mod : Name) (self : Package) : FileTarget :=
let oFile := self.modToO mod
let cTarget := self.moduleOleanAndCTarget mod |>.cTarget
leanOFileTarget oFile cTarget self.moreLeancArgs
-- # Build Package Static Lib
protected def ActivePackageTarget.staticLibTarget (self : ActivePackageTarget ActiveOleanAndCTargets) : FileTarget :=
staticLibTarget self.package.staticLibFile self.oFileTargets
def ActivePackageTarget.staticLibTargets (self : ActivePackageTarget ActiveOleanAndCTargets) : Array FileTarget :=
#[self.staticLibTarget] ++ self.package.moreLibTargets
protected def Package.staticLibTarget (self : Package) : FileTarget :=
Target.mk self.staticLibFile do
(← self.buildOleanAndCTarget).staticLibTarget.materializeAsync
def Package.buildStaticLib (self : Package) : BuildM FilePath :=
self.staticLibTarget.build
-- # Build Package Shared Lib
protected def Package.sharedLibTarget (self : Package) : FileTarget :=
Target.mk self.sharedLibFile do
let depTargets ← self.buildDepTargets buildOleanAndCTargetWithDepTargets
let depTarget ← self.buildDepTargetWith depTargets
let moreOleanDirs := packageTargetsToOleanDirs depTargets
let build := self.recBuildModuleOleanAndCTargetWithLocalImports moreOleanDirs depTarget
let pkgTarget ← self.buildTarget build
let linkTargets :=
pkgTarget.oFileTargets ++ self.moreLibTargets ++
depTargets.concatMap (·.staticLibTargets)
let target := leanSharedLibTarget self.sharedLibFile linkTargets
target.materializeAsync
def Package.buildSharedLib (self : Package) : BuildM FilePath :=
self.sharedLibTarget.build
-- # Build Package Bin
protected def Package.binTarget (self : Package) : FileTarget :=
Target.mk self.binFile do
let depTargets ← self.buildDepTargets buildOleanAndCTargetWithDepTargets
let depTarget ← self.buildDepTargetWith depTargets
let moreOleanDirs := packageTargetsToOleanDirs depTargets
let build := self.recBuildModuleOleanAndCTargetWithLocalImports moreOleanDirs depTarget
let pkgTarget ← self.buildModuleDAGTarget self.binRoot build
let linkTargets :=
pkgTarget.oFileTargets ++ self.moreLibTargets ++
depTargets.concatMap (·.staticLibTargets)
let target := leanBinTarget self.binFile linkTargets self.moreLinkArgs
target.materializeAsync
def Package.buildBin (self : Package) : BuildM FilePath :=
self.binTarget.build