Fork of daniellemaywood.uk/gleam — Wasm codegen work
2

Configure Feed

Select the types of activity you want to include in your feed.

gleam / compiler-cli / src / build.rs
2.2 kB 79 lines
1// SPDX-License-Identifier: Apache-2.0 2// SPDX-FileCopyrightText: 2021 The Gleam contributors 3 4use std::{rc::Rc, time::Instant}; 5 6use gleam_core::{ 7 Result, 8 build::{Built, Codegen, NullTelemetry, Options, ProjectCompiler, Telemetry}, 9 manifest::Manifest, 10 paths::ProjectPaths, 11 warning::WarningEmitterIO, 12}; 13 14use crate::{ 15 build_lock::BuildLock, 16 cli, dependencies, 17 fs::{self, ConsoleWarningEmitter}, 18}; 19 20pub fn download_dependencies(paths: &ProjectPaths, telemetry: impl Telemetry) -> Result<Manifest> { 21 dependencies::resolve_and_download( 22 paths, 23 telemetry, 24 None, 25 Vec::new(), 26 dependencies::DependencyManagerConfig { 27 use_manifest: dependencies::UseManifest::Yes, 28 check_major_versions: dependencies::CheckMajorVersions::No, 29 }, 30 ) 31} 32 33pub fn main(paths: &ProjectPaths, options: Options, manifest: Manifest) -> Result<Built> { 34 main_with_warnings(paths, options, manifest, Rc::new(ConsoleWarningEmitter)) 35} 36 37pub(crate) fn main_with_warnings( 38 paths: &ProjectPaths, 39 options: Options, 40 manifest: Manifest, 41 warnings: Rc<dyn WarningEmitterIO>, 42) -> Result<Built> { 43 let perform_codegen = options.codegen; 44 let root_config = crate::config::root_config(paths)?; 45 let telemetry: &'static dyn Telemetry = if options.no_print_progress { 46 &NullTelemetry 47 } else { 48 &cli::Reporter 49 }; 50 let io = fs::ProjectIO::new(); 51 let start = Instant::now(); 52 let lock = BuildLock::new_target( 53 paths, 54 options.mode, 55 options.target.unwrap_or(root_config.target), 56 )?; 57 58 tracing::info!("Compiling packages"); 59 let result = { 60 let _guard = lock.lock(telemetry); 61 let compiler = ProjectCompiler::new( 62 root_config, 63 options, 64 manifest.packages, 65 telemetry, 66 warnings, 67 paths.clone(), 68 io, 69 ); 70 compiler.compile()? 71 }; 72 73 match perform_codegen { 74 Codegen::All | Codegen::DepsOnly => telemetry.compiled_package(start.elapsed()), 75 Codegen::None => telemetry.checked_package(start.elapsed()), 76 }; 77 78 Ok(result) 79}