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

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

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

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

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