#![warn(missing_docs)]
#[macro_use]
extern crate tracing;
pub mod setup;
use core::ffi::{c_char, c_int};
#[cfg(target_os = "android")]
use winit::platform::android::activity::AndroidApp;
#[cfg(target_family = "wasm")]
use wasm_bindgen::prelude::wasm_bindgen;
extern crate wasm_bindgen;
#[no_mangle]
#[cfg_attr(target_family = "wasm", wasm_bindgen)]
pub extern "C" fn ce_start(argc: c_int, argv: *const *const c_char) -> c_int {
#[cfg(feature = "tracing-subscriber")]
setup::setup_tracer();
setup::setup_logger();
let args: Option<Vec<String>>;
unsafe {
args = utils::args::parse_args_from_c(argc, argv.cast::<*const *const c_char>());
}
if let Some(args) = args {
trace!("Args: {:?}", args);
utils::args::set_parsed_args(args);
}
if setup::get_args().version {
setup::print_version();
setup::print_dependencies();
return 0;
}
setup::process_args();
debug!("Launched as library...");
trace!("Built for Arch: {}", setup::build_info().target.cpu.arch);
let results: Result<(), String> = setup::start();
trace!(
"Exit was called with code: {}",
utils::setup::get_exit_code()
);
match results {
Err(error) => {
error!("{:?}", error);
c_int::from(utils::setup::get_exit_code())
}
_ => 0,
}
}
#[no_mangle]
#[cfg(all(target_os = "android", feature = "client"))]
pub extern "Rust" fn android_main(app: AndroidApp) {
#[cfg(feature = "tracing-subscriber")]
setup::setup_tracer();
setup::setup_logger();
utils::store_android_app(app.clone());
trace!(
"Has Storage Permission (Rust): {}",
utils::android::request_read_storage_permissions()
);
let args: Vec<String> = vec![
utils::get_own_path(),
"--assets".to_string(),
utils::android::get_assets_directory(),
]; trace!("Args: {:?}", args);
utils::args::set_parsed_args(args);
setup::process_args();
debug!("Launched as Android app...");
trace!("Built for Arch: {}", setup::build_info().target.cpu.arch);
let results: Result<(), String> = setup::start();
trace!(
"Exit was called with code: {}",
utils::setup::get_exit_code()
);
if let Err(ref error) = results {
error!("{:?}", error);
}
}
#[no_mangle]
#[cfg(target_family = "wasm")]
#[wasm_bindgen(start)]
pub extern "Rust" fn wasm_start() {
std::panic::set_hook(Box::new(console_error_panic_hook::hook));
#[cfg(feature = "tracing-subscriber")]
setup::setup_tracer();
setup::setup_logger();
setup::process_args();
debug!("Launched as Wasm library...");
trace!("Built for Arch: {}", setup::build_info().target.cpu.arch);
if let Err(ref error) = setup::start() {
error!("{:?}", error);
}
}