multiversx_sc_meta_lib/tools/
build_target.rs

1use std::process::Command;
2
3use rustc_version::{version_meta, Version};
4
5pub const WASM32_TARGET: &str = "wasm32-unknown-unknown";
6pub const WASM32V1_TARGET: &str = "wasm32v1-none";
7const FIRST_RUSTC_VERSION_WITH_WASM32V1_TARGET: Version = Version::new(1, 85, 0);
8
9/// Gets the rustc wasm32 target name.
10///
11/// It is currently "wasm32v1-none", except for before Rust 1.85, where we use "wasm32-unknown-unknown".
12pub fn default_target() -> &'static str {
13    if is_wasm32v1_available() {
14        WASM32V1_TARGET
15    } else {
16        WASM32_TARGET
17    }
18}
19
20pub fn is_wasm32v1_available() -> bool {
21    let Ok(version) = version_meta() else {
22        return false;
23    };
24
25    version.semver >= FIRST_RUSTC_VERSION_WITH_WASM32V1_TARGET
26}
27
28pub fn install_target(target_name: &str) {
29    let cmd = Command::new("rustup")
30        .args(["target", "add", target_name])
31        .status()
32        .expect("failed to execute `rustup`");
33
34    assert!(cmd.success(), "failed to install {target_name} target");
35
36    println!("{target_name} target installed successfully");
37}