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.4 kB 81 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 target = options.target.unwrap_or(root_config.target); 51 let io = fs::ProjectIO::new(); 52 // Initialise the BEAM compiler instance eagerly, so we don't have to wait 53 // for it to boot when we come to use it for the first time. 54 if target.is_erlang() { 55 io.initialise_beam_compiler()?; 56 } 57 let start = Instant::now(); 58 let lock = BuildLock::new_target(paths, options.mode, target)?; 59 60 tracing::info!("Compiling packages"); 61 let result = { 62 let _guard = lock.lock(telemetry); 63 let compiler = ProjectCompiler::new( 64 root_config, 65 options, 66 manifest.packages, 67 telemetry, 68 warnings, 69 paths.clone(), 70 io, 71 ); 72 compiler.compile()? 73 }; 74 75 match perform_codegen { 76 Codegen::All | Codegen::DepsOnly => telemetry.compiled_package(start.elapsed()), 77 Codegen::None => telemetry.checked_package(start.elapsed()), 78 } 79 80 Ok(result) 81}