Skip to main content

kwui_cli/
build.rs

1use std::path::PathBuf;
2use anyhow;
3use std::process::{Command, Stdio};
4use cargo_toml::Manifest;
5
6pub fn build_windows(project_dir: &PathBuf, verbose: bool, release: bool) ->anyhow::Result<()> {
7    let profile = if release {
8        "release"
9    } else {
10        "debug"
11    };
12    println!("BUILDING windows {} executable ...", profile);
13    let mut args = vec!["build"];
14    if release {
15        args.extend(["--release"]);
16    }
17    if verbose {
18        args.extend(["-vv"]);
19    }
20    Command::new("cargo")
21        .args(args)
22        .stdout(Stdio::inherit())
23        .stderr(Stdio::inherit())
24        .status()?;
25    Ok(())
26}
27
28pub fn build_apk(project_dir: &PathBuf, verbose: bool, release: bool) ->anyhow::Result<()> {
29    let profile = if release {
30        "release"
31    } else {
32        "debug"
33    };
34    println!("BUILDING android {} apk ...", profile);
35    let mut cargo_args = vec!["build", "--target", "aarch64-linux-android"];
36    if release {
37        cargo_args.extend(["--release"]);
38    }
39    if verbose {
40        cargo_args.extend(["-vv"]);
41    }
42    Command::new("cargo")
43        .current_dir(project_dir)
44        .args(&cargo_args)
45        .stdout(Stdio::inherit())
46        .stderr(Stdio::inherit())
47        .status()?;
48    let lib_filename = format!("lib{}.so", crate::cargo_package_name(project_dir)?);
49
50    println!("COPYING [{}]",
51             project_dir.join("target/aarch64-linux-android").join(profile).join(&lib_filename).display());
52    std::fs::copy(
53        project_dir.join("target/aarch64-linux-android").join(profile).join(&lib_filename),
54        project_dir.join("android/app/src/main/jniLibs/arm64-v8a").join(&lib_filename),
55    )?;
56
57    println!("GRADLE building...");
58    let mut gradle_args = vec!["/c", "gradlew.bat"];
59    if release {
60        gradle_args.extend(["assembleRelease"]);
61    } else {
62        gradle_args.extend(["assembleDebug"]);
63    }
64    gradle_args.extend(["--no-daemon"]);
65    Command::new("cmd")
66        .current_dir(project_dir.join("android"))
67        .args(&gradle_args)
68        .stdout(Stdio::inherit())
69        .stderr(Stdio::inherit())
70        .status()?;
71
72    let apk_output_dir = project_dir.join("android/app/build/outputs/apk").join(profile);
73    let apk_output_name = if release {
74        "app-release-unsigned.apk"
75    } else {
76        "app-debug.apk"
77    };
78    println!("BUILT apk [{}]", apk_output_dir.join(apk_output_name).display());
79
80    Ok(())
81}