@@ -37,7 +37,7 @@ def Module.srcFacetConfig : ModuleFacetConfig srcFacet :=
3737def Module.recParseHeader (mod : Module) : FetchM (Job ModuleHeader) := do
3838 (← mod.src.fetch).mapM fun srcFile => do
3939 let contents ← IO.FS.readFile srcFile
40- Lean.parseImports' contents mod.leanFile .toString
40+ Lean.parseImports' contents srcFile .toString
4141
4242/-- The `ModuleFacetConfig` for the builtin `headerFacet`. -/
4343def Module.headerFacetConfig : ModuleFacetConfig headerFacet :=
@@ -211,14 +211,15 @@ Recursively build a module's dependencies, including:
211211* Shared libraries (e.g., `extern_lib` targets or precompiled modules)
212212* `extraDepTargets` of its library
213213 -/
214- def Module.recBuildDeps (mod : Module) : FetchM (Job ModuleDeps ) := ensureJob do
214+ def Module.recFetchSetup (mod : Module) : FetchM (Job ModuleSetup ) := ensureJob do
215215 let extraDepJob ← mod.lib.extraDep.fetch
216216
217217 /-
218218 Remark: We must build direct imports before we fetch the transitive
219219 precompiled imports so that errors in the import block of transitive imports
220220 will not kill this job before the direct imports are built.
221221 -/
222+ let headerJob ← mod.header.fetch
222223 let directImports ← (← mod.imports.fetch).await
223224 let importJobs ← directImports.mapM fun imp => do
224225 if imp.name = mod.name then
@@ -240,6 +241,7 @@ def Module.recBuildDeps (mod : Module) : FetchM (Job ModuleDeps) := ensureJob do
240241 let pluginsJob ← mod.plugins.fetchIn mod.pkg "module plugins"
241242
242243 extraDepJob.bindM fun _ => do
244+ headerJob.bindM fun header => do
243245 importJob.bindM (sync := true ) fun _ => do
244246 let depTrace ← takeTrace
245247 impLibsJob.bindM (sync := true ) fun impLibs => do
@@ -254,11 +256,24 @@ def Module.recBuildDeps (mod : Module) : FetchM (Job ModuleDeps) := ensureJob do
254256 | none => addTrace depTrace; addTrace libTrace
255257 | some false => addTrace depTrace; addTrace libTrace; addPlatformTrace
256258 | some true => addTrace depTrace
257- computeModuleDeps impLibs externLibs dynlibs plugins
259+ let {dynlibs, plugins} ← computeModuleDeps impLibs externLibs dynlibs plugins
260+ return {
261+ name := mod.name
262+ isModule := header.isModule
263+ imports := header.imports
264+ modules := {} -- TODO
265+ dynlibs := dynlibs.map (·.path.toString)
266+ plugins := plugins.map (·.path.toString)
267+ options := mod.leanOptions
268+ }
269+
270+ /-- The `ModuleFacetConfig` for the builtin `setupFacet`. -/
271+ def Module.setupFacetConfig : ModuleFacetConfig setupFacet :=
272+ mkFacetJobConfig recFetchSetup
258273
259274/-- The `ModuleFacetConfig` for the builtin `depsFacet`. -/
260275def Module.depsFacetConfig : ModuleFacetConfig depsFacet :=
261- mkFacetJobConfig recBuildDeps
276+ mkFacetJobConfig fun mod => (·.toOpaque) <$> mod.setup.fetch
262277
263278/-- Remove cached file hashes of the module build outputs (in `.hash` files). -/
264279def Module.clearOutputHashes (mod : Module) : IO PUnit := do
@@ -290,22 +305,12 @@ def Module.recBuildLean (mod : Module) : FetchM (Job Unit) := do
290305 withRegisterJob mod.name.toString do
291306 (← mod.src.fetch).bindM fun srcFile => do
292307 let srcTrace ← getTrace
293- (← mod.header.fetch).bindM fun header => do
294- (← mod.deps.fetch).mapM fun {dynlibs, plugins} => do
308+ (← mod.setup.fetch).mapM fun setup => do
295309 addLeanTrace
296- addTrace <| traceOptions mod.leanOptions "Module.leanOptions "
310+ addTrace <| traceOptions setup.options "options "
297311 addPureTrace mod.leanArgs "Module.leanArgs"
298312 setTraceCaption s! "{ mod.name.toString} :leanArts"
299313 let upToDate ← buildUnlessUpToDate? (oldTrace := srcTrace.mtime) mod (← getTrace) mod.traceFile do
300- let setup : ModuleSetup := {
301- name := mod.name
302- isModule := header.isModule
303- imports := header.imports
304- modules := {} -- TODO
305- dynlibs := dynlibs.map (·.path.toString)
306- plugins := plugins.map (·.path.toString)
307- options := mod.leanOptions
308- }
309314 let args := mod.weakLeanArgs ++ mod.leanArgs
310315 compileLeanModule srcFile setup mod.setupFile mod.arts args
311316 (← getLeanPath) mod.rootDir (← getLean)
@@ -327,7 +332,7 @@ def Module.leanArtsFacetConfig : ModuleFacetConfig leanArtsFacet :=
327332 transitive imports. However, they are independent of their module sources.
328333 -/
329334 newTrace s! "{ mod.name.toString} :olean"
330- addTrace (← mod.deps .fetch).getTrace.withoutInputs
335+ addTrace (← mod.setup .fetch).getTrace.withoutInputs
331336 addTrace (← fetchFileTrace file)
332337 return file
333338
@@ -486,6 +491,7 @@ def Module.initFacetConfigs : DNameMap ModuleFacetConfig :=
486491 |>.insert importsFacet importsFacetConfig
487492 |>.insert transImportsFacet transImportsFacetConfig
488493 |>.insert precompileImportsFacet precompileImportsFacetConfig
494+ |>.insert setupFacet setupFacetConfig
489495 |>.insert depsFacet depsFacetConfig
490496 |>.insert leanArtsFacet leanArtsFacetConfig
491497 |>.insert oleanFacet oleanFacetConfig
0 commit comments