Fork of daniellemaywood.uk/gleam — Wasm codegen work
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}