1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
use emoji;
use error::Error;
use progressbar::Step;
use std::process::Command;
use PBAR;
pub fn rustup_add_wasm_target(step: &Step) -> Result<(), Error> {
let msg = format!("{}Adding WASM target...", emoji::TARGET);
PBAR.step(step, &msg);
ensure_nightly()?;
let output = Command::new("rustup")
.arg("target")
.arg("add")
.arg("wasm32-unknown-unknown")
.arg("--toolchain")
.arg("nightly")
.output()?;
if !output.status.success() {
let s = String::from_utf8_lossy(&output.stderr);
Error::cli("Adding the wasm32-unknown-unknown target failed", s)
} else {
Ok(())
}
}
fn ensure_nightly() -> Result<(), Error> {
let nightly_check = Command::new("rustc").arg("+nightly").arg("-V").output()?;
if !nightly_check.status.success() {
let res = Command::new("rustup")
.arg("toolchain")
.arg("install")
.arg("nightly")
.output()?;
if !res.status.success() {
let s = String::from_utf8_lossy(&res.stderr);
return Error::cli("Adding the nightly toolchain failed", s);
}
}
Ok(())
}
pub fn cargo_build_wasm(path: &str, debug: bool, step: &Step) -> Result<(), Error> {
let msg = format!("{}Compiling to WASM...", emoji::CYCLONE);
PBAR.step(step, &msg);
let output = {
let mut cmd = Command::new("cargo");
cmd.current_dir(path).arg("+nightly").arg("build");
if !debug {
cmd.arg("--release");
}
cmd.arg("--target").arg("wasm32-unknown-unknown");
cmd.output()?
};
if !output.status.success() {
let s = String::from_utf8_lossy(&output.stderr);
Error::cli("Compilation of your program failed", s)
} else {
Ok(())
}
}