use crate::error::*;
use crate::types::*;
use cargo::{
core::{
compiler::{CompileKind, CompileMode, CompileTarget},
resolver::CliFeatures,
shell::Verbosity,
Workspace,
},
ops::CompileOptions,
};
use std::path::Path;
pub fn compile_options(
workspace: &Workspace,
build_target: AndroidTarget,
features: &[String],
all_features: bool,
no_default_features: bool,
build_target_dir: &Path,
lib_name: &str,
profile: Profile,
) -> Result<CompileOptions> {
let config = workspace.config();
config.shell().set_verbosity(Verbosity::Normal);
let mut opts = CompileOptions::new(config, CompileMode::Build)?;
opts.build_config.requested_kinds = vec![CompileKind::Target(CompileTarget::new(
build_target.rust_triple(),
)?)];
opts.cli_features =
CliFeatures::from_command_line(features, all_features, !no_default_features)?;
opts.target_rustc_args = Some(vec![format!(
"--emit=link={}",
build_target_dir
.join(lib_name)
.into_os_string()
.into_string()
.unwrap()
)]);
if profile == Profile::Release {
opts.build_config.requested_profile = "release".into();
}
Ok(opts)
}