Skip to main content

polyhorn_cli/android/commands/
run.rs

1use ansi_term::Colour::Red;
2use std::collections::HashMap;
3use std::path::Path;
4
5use crate::android::tasks::{self, AndroidContext, AndroidTask};
6use crate::android::Target;
7use crate::core::Executioner;
8use crate::Config;
9
10/// This is the implementation of `polyhorn run android`.
11pub fn run(config: Config) {
12    let result = Executioner::execute(
13        &[
14            AndroidTask::InstallTarget(tasks::InstallTarget(Target::armeabi_v7a().llvm_triple)),
15            AndroidTask::FindAndroidStudio(tasks::FindAndroidStudio),
16            AndroidTask::GenerateSourceTree(tasks::GenerateSourceTree),
17            AndroidTask::BuildRuntimeLibrary(tasks::BuildRuntimeLibrary {
18                target: Target::armeabi_v7a(),
19                profile: "debug",
20            }),
21            AndroidTask::LinkNativeLibraries(tasks::LinkNativeLibraries),
22            AndroidTask::Install(tasks::Install),
23            AndroidTask::Run(tasks::Run),
24        ],
25        AndroidContext {
26            config,
27            java_home: std::env::var("JAVA_HOME")
28                .ok()
29                .map(|path| Path::new(&path).to_path_buf()),
30            android_sdk_root: std::env::var("ANDROID_SDK_ROOT")
31                .ok()
32                .map(|path| Path::new(&path).to_path_buf()),
33            products: HashMap::new(),
34        },
35    );
36
37    match result {
38        Ok(_) => {}
39        Err(error) => {
40            eprintln!("{}: {:?}", Red.bold().paint("error"), error);
41            std::process::exit(1);
42        }
43    }
44}