1
use std::fs;
2
use std::process::Command;
3

            
4
const RUSTC_WASM_ARGS: &str = "--target wasm32-unknown-unknown \
5
                               --crate-type cdylib \
6
                               --emit link \
7
                               -C embed-bitcode=no \
8
                               -C opt-level=z \
9
                               -C link-args=-zstack-size,0x1000,-zheap-size=0x1000 \
10
                               --edition 2024";
11

            
12
6
fn main() {
13
6
    let output = Command::new("git")
14
6
        .args(["rev-parse", "HEAD"])
15
6
        .output()
16
6
        .expect("Can't get git revision");
17
6
    let git_hash = String::from_utf8(output.stdout).expect("Can't parse git revision");
18
6
    println!("cargo:rustc-env=GIT_HASH={git_hash}");
19
6
    let build_date = chrono::Utc::now().to_rfc3339();
20
6
    println!("cargo:rustc-env=BUILD_DATE={build_date}");
21
6
    println!("cargo:rerun-if-changed=locales");
22
6
    println!("cargo:rerun-if-changed=testdata");
23

            
24
8
    let buildwasm = |name: &str| {
25
6
        let output_path = format!("../target/{name}.wasm");
26
6
        let source_path = format!("testdata/{name}.rs");
27

            
28
6
        let status = Command::new("rustc")
29
6
            .args(RUSTC_WASM_ARGS.split_whitespace()) // Split the arguments string by whitespace
30
6
            .arg(&source_path)
31
6
            .arg("-o")
32
6
            .arg(&output_path)
33
6
            .status()
34
6
            .expect("Failed to build wasmscript");
35

            
36
6
        assert!(status.success(), "Building wasmscript {name} failed");
37
6
    };
38

            
39
6
    fs::read_dir("testdata")
40
6
        .unwrap_or_else(|_| fs::read_dir("").unwrap())
41
6
        .flatten()
42
32
        .filter_map(|entry| {
43
30
            let path = entry.path();
44
30
            if path.extension() == Some("rs".as_ref()) {
45
6
                path.file_stem()
46
6
                    .map(|stem| stem.to_string_lossy().into_owned())
47
            } else {
48
24
                None
49
            }
50
30
        })
51
8
        .for_each(|filename| buildwasm(&filename));
52
6
}