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}