diff --git a/CHANGELOG.md b/CHANGELOG.md index 14d61bc4..b7185f62 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Unreleased ### Improvements +- Add cross compilation support to nj-cli. ([#182](https://github.com/infinyon/node-bindgen/pull/182)). ## [5.0.0] - 2021-07-15 ### Improvements diff --git a/examples/buffer/src/lib.rs b/examples/buffer/src/lib.rs index b031b1d4..5aa32c24 100644 --- a/examples/buffer/src/lib.rs +++ b/examples/buffer/src/lib.rs @@ -19,7 +19,7 @@ fn test(b: i32) -> Result { }; let json_string = serde_json::to_vec(&my_struct) - .map_err(|err| NjError::Other(format!("serialization error: {}", err.to_string())))?; + .map_err(|err| NjError::Other(format!("serialization error: {}", err)))?; Ok(ArrayBuffer::new(json_string)) } @@ -56,7 +56,7 @@ fn test2(b: i32) -> Result { }; let json_string = serde_json::to_vec(&my_struct) - .map_err(|err| NjError::Other(format!("serialization error: {}", err.to_string())))?; + .map_err(|err| NjError::Other(format!("serialization error: {}", err)))?; Ok(Record { buffer: ArrayBuffer::new(json_string), diff --git a/nj-cli/Cargo.toml b/nj-cli/Cargo.toml index f3349129..60a891f0 100644 --- a/nj-cli/Cargo.toml +++ b/nj-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nj-cli" -version = "0.4.1" +version = "0.4.2" authors = ["fluvio.io"] edition = "2018" description = "build tool for node-bindgen" diff --git a/nj-cli/src/main.rs b/nj-cli/src/main.rs index f28d5076..2753a6c0 100644 --- a/nj-cli/src/main.rs +++ b/nj-cli/src/main.rs @@ -38,6 +38,9 @@ struct BuildOpt { #[structopt(long)] release: bool, + #[structopt(long)] + target: Option, + extras: Vec, } @@ -98,6 +101,9 @@ fn build(opt: BuildOpt) { if opt.release { args.push("--release".to_string()); } + if let Some(ref target) = opt.target { + args.push(format!("--target={target}")); + } args.extend(opt.extras); let mut build_command = Command::new("cargo") @@ -129,18 +135,24 @@ fn build(opt: BuildOpt) { } Some(_) => {} } - let target = if opt.release { "release" } else { "debug" }; - copy_lib(opt.output, target); + let target_mode = if opt.release { "release" } else { "debug" }; + + copy_lib(opt.output, target_mode, opt.target); } /// copy library to target directory -fn copy_lib(out: String, target_type: &str) { +fn copy_lib(out: String, target_mode: &str, target_tripple: Option) { let manifest_path = manifest_path(); let metadata = load_metadata(&manifest_path); if let Some(package) = find_current_package(&metadata, &manifest_path) { if let Some(target) = find_cdylib(package) { - let lib_path = lib_path(&metadata.target_directory, target_type, &target.name); + let lib_path = lib_path( + &metadata.target_directory, + target_mode, + &target.name, + target_tripple, + ); let error_msg = format!("copy failed of {:?}", lib_path); copy_cdylib(&lib_path, &out).expect(&error_msg); } else { @@ -184,7 +196,12 @@ fn manifest_path() -> PathBuf { current_path.join("Cargo.toml") } -fn lib_path(target: &Path, build_type: &str, target_name: &str) -> PathBuf { +fn lib_path( + target: &Path, + build_type: &str, + target_name: &str, + target_tripple: Option, +) -> PathBuf { let file_name = if cfg!(target_os = "windows") { format!("{}.dll", target_name) } else if cfg!(target_os = "macos") { @@ -194,9 +211,16 @@ fn lib_path(target: &Path, build_type: &str, target_name: &str) -> PathBuf { } else { panic!("Unsupported operating system."); } - .replace("-", "_"); - - target.join(target).join(build_type).join(file_name) + .replace('-', "_"); + if let Some(target_tripple) = target_tripple { + target + .join(target) + .join(target_tripple) + .join(build_type) + .join(file_name) + } else { + target.join(target).join(build_type).join(file_name) + } } // where we are outputting diff --git a/nj-core/src/convert.rs b/nj-core/src/convert.rs index 17e84b5e..40202213 100644 --- a/nj-core/src/convert.rs +++ b/nj-core/src/convert.rs @@ -3,7 +3,6 @@ use std::ptr; use crate::sys::napi_value; use crate::val::JsEnv; -use crate::val::JsObject; use crate::NjError; use crate::napi_call_result; @@ -197,6 +196,7 @@ where #[cfg(feature = "serde_json")] impl TryIntoJs for serde_json::map::Map { fn try_to_js(self, js_env: &JsEnv) -> Result { + use crate::val::JsObject; let mut obj = JsObject::new(*js_env, js_env.create_object()?); let converted_obj = self diff --git a/nj-core/src/worker.rs b/nj-core/src/worker.rs index 6500ab36..b6485008 100644 --- a/nj-core/src/worker.rs +++ b/nj-core/src/worker.rs @@ -133,7 +133,6 @@ pub trait JSWorker: Sized + Send + 'static { } /// call by Node to create promise - #[no_mangle] extern "C" fn start_promise(env: napi_env, info: napi_callback_info) -> napi_value { let js_env = JsEnv::new(env); diff --git a/nj-derive/src/ast/arg.rs b/nj-derive/src/ast/arg.rs index 5e9cf409..5af268df 100644 --- a/nj-derive/src/ast/arg.rs +++ b/nj-derive/src/ast/arg.rs @@ -22,7 +22,7 @@ use super::MyTupleType; pub struct FunctionArgs<'a> { pub args: Vec>, pub is_method: bool, - receiver: Option<&'a Receiver>, + _receiver: Option<&'a Receiver>, } impl<'a> FunctionArgs<'a> { diff --git a/nj-derive/src/ast/types.rs b/nj-derive/src/ast/types.rs index bba2498b..772436d2 100644 --- a/nj-derive/src/ast/types.rs +++ b/nj-derive/src/ast/types.rs @@ -238,7 +238,7 @@ impl<'a> MyEnum<'a> { let variants = enum_data .variants .iter() - .map(|v| MyVariant::from_ast(v)) + .map(MyVariant::from_ast) .collect::>>()?; Ok(MyEnum { variants }) diff --git a/nj-derive/src/generator/derive.rs b/nj-derive/src/generator/derive.rs index 78c8bc09..c24445f3 100644 --- a/nj-derive/src/generator/derive.rs +++ b/nj-derive/src/generator/derive.rs @@ -247,8 +247,8 @@ fn generate_variant_conversion( fn drop_generic_bounds(params: &[GenericParam]) -> Vec { params - .to_owned() - .into_iter() + .iter() + .cloned() .map(|generic| match generic { GenericParam::Type(type_param) => GenericParam::Type(TypeParam { colon_token: None,