bricks/build/
link.rs

1use std::{
2    collections::HashMap,
3    path::{Path, PathBuf},
4    process::{Command, Stdio},
5};
6
7use anyhow::Result;
8
9use crate::{
10    cli::pretty,
11    config::{brick::BrickLang, lib::Lib, overrides::OverrideDatabase},
12};
13
14use super::tools::{get_archiver, get_compiler};
15
16pub fn binary(
17    libs: &HashMap<String, Lib>,
18    compile_paths: &[PathBuf],
19    target: &Path,
20    override_db: &OverrideDatabase,
21    ldflags: &str,
22    lang: BrickLang,
23    silent: bool,
24) -> Result<Option<PathBuf>> {
25    if !silent {
26        pretty::msg("link", target.display());
27    }
28
29    let mut cmd = &mut Command::new(get_compiler(lang));
30    cmd = cmd.stderr(Stdio::inherit());
31
32    for path in compile_paths {
33        cmd = cmd.arg(path);
34    }
35
36    for (name, lib) in libs {
37        cmd = cmd.args(lib.lib_links(name, override_db)?.split(" "));
38        cmd = cmd.args(lib.headers(name, override_db)?.split(" "));
39    }
40
41    cmd.args(ldflags.split_whitespace().collect::<Vec<&str>>());
42
43    cmd = cmd.arg("-o").arg(target);
44
45    let _status = cmd.status()?;
46
47    Ok(Some(target.to_path_buf()))
48}
49
50pub fn library(
51    libs: &HashMap<String, Lib>,
52    compile_paths: &[PathBuf],
53    target: &Path,
54    override_db: &OverrideDatabase,
55    ldflags: &str,
56    _lang: BrickLang,
57    silent: bool,
58) -> Result<Option<PathBuf>> {
59    if !silent {
60        pretty::msg("link", target.display());
61    }
62
63    let mut cmd = &mut Command::new(get_archiver());
64    cmd = cmd.stderr(Stdio::inherit()).arg("crus").arg(target);
65
66    for path in compile_paths {
67        cmd = cmd.arg(path);
68    }
69
70    for (name, lib) in libs {
71        cmd = cmd.args(lib.lib_links(name, override_db)?.split(" "));
72        cmd = cmd.args(lib.headers(name, override_db)?.split(" "));
73    }
74
75    cmd.args(ldflags.split_whitespace().collect::<Vec<&str>>());
76
77    let _status = cmd.status()?;
78
79    Ok(Some(target.to_path_buf()))
80}