diff --git a/objdiff-core/Cargo.toml b/objdiff-core/Cargo.toml index 7b4deb9..1ecb8c9 100644 --- a/objdiff-core/Cargo.toml +++ b/objdiff-core/Cargo.toml @@ -17,15 +17,15 @@ crate-type = ["cdylib", "rlib"] [features] all = ["config", "dwarf", "mips", "ppc", "x86", "arm", "bindings"] -any-arch = ["bimap"] # Implicit, used to check if any arch is enabled -config = ["bimap", "globset", "semver", "serde_json", "serde_yaml"] -dwarf = ["gimli"] -mips = ["any-arch", "rabbitizer"] -ppc = ["any-arch", "cwdemangle", "cwextab", "ppc750cl"] -x86 = ["any-arch", "cpp_demangle", "iced-x86", "msvc-demangler"] -arm = ["any-arch", "cpp_demangle", "unarm", "arm-attr"] -bindings = ["serde_json", "prost", "pbjson"] -wasm = ["bindings", "console_error_panic_hook", "console_log"] +any-arch = ["config", "dep:bimap", "dep:strum", "dep:similar", "dep:flagset", "dep:log", "dep:memmap2", "dep:byteorder", "dep:num-traits"] # Implicit, used to check if any arch is enabled +config = ["dep:bimap", "dep:globset", "dep:semver", "dep:serde_json", "dep:serde_yaml", "dep:serde", "dep:filetime"] +dwarf = ["dep:gimli"] +mips = ["any-arch", "dep:rabbitizer"] +ppc = ["any-arch", "dep:cwdemangle", "dep:cwextab", "dep:ppc750cl"] +x86 = ["any-arch", "dep:cpp_demangle", "dep:iced-x86", "dep:msvc-demangler"] +arm = ["any-arch", "dep:cpp_demangle", "dep:unarm", "dep:arm-attr"] +bindings = ["dep:serde_json", "dep:prost", "dep:pbjson", "dep:serde", "dep:prost-build", "dep:pbjson-build"] +wasm = ["bindings", "any-arch", "dep:console_error_panic_hook", "dep:console_log", "dep:wasm-bindgen", "dep:tsify-next", "dep:log"] [package.metadata.docs.rs] features = ["all"] @@ -33,20 +33,20 @@ features = ["all"] [dependencies] anyhow = "1.0" bimap = { version = "0.6", features = ["serde"], optional = true } -byteorder = "1.5" -filetime = "0.2" -flagset = "0.4" -log = "0.4" -memmap2 = "0.9" -num-traits = "0.2" +byteorder = { version = "1.5", optional = true } +filetime = { version = "0.2", optional = true } +flagset = { version = "0.4", optional = true } +log = { version = "0.4", optional = true } +memmap2 = { version = "0.9", optional = true } +num-traits = { version = "0.2", optional = true } object = { version = "0.36", features = ["read_core", "std", "elf", "pe"], default-features = false } pbjson = { version = "0.7", optional = true } prost = { version = "0.13", optional = true } -serde = { version = "1.0", features = ["derive"] } -similar = { version = "2.6", default-features = false } -strum = { version = "0.26", features = ["derive"] } -wasm-bindgen = "0.2" -tsify-next = { version = "0.5", default-features = false, features = ["js"] } +serde = { version = "1.0", features = ["derive"], optional = true } +similar = { version = "2.6", default-features = false, optional = true } +strum = { version = "0.26", features = ["derive"], optional = true } +wasm-bindgen = { version = "0.2", optional = true } +tsify-next = { version = "0.5", default-features = false, features = ["js"], optional = true } console_log = { version = "1.0", optional = true } console_error_panic_hook = { version = "0.1", optional = true } @@ -77,5 +77,5 @@ unarm = { version = "1.6", optional = true } arm-attr = { version = "0.1", optional = true } [build-dependencies] -prost-build = "0.13" -pbjson-build = "0.7" +prost-build = { version = "0.13", optional = true } +pbjson-build = { version = "0.7", optional = true } diff --git a/objdiff-core/build.rs b/objdiff-core/build.rs index 5f0864c..b5ab6f3 100644 --- a/objdiff-core/build.rs +++ b/objdiff-core/build.rs @@ -1,6 +1,11 @@ -use std::path::{Path, PathBuf}; - fn main() { + #[cfg(feature = "bindings")] + compile_protos(); +} + +#[cfg(feature = "bindings")] +fn compile_protos() { + use std::path::{Path, PathBuf}; let root = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("protos"); let descriptor_path = root.join("proto_descriptor.bin"); println!("cargo:rerun-if-changed={}", descriptor_path.display()); diff --git a/objdiff-core/src/diff/mod.rs b/objdiff-core/src/diff/mod.rs index 95ce055..b5e2f77 100644 --- a/objdiff-core/src/diff/mod.rs +++ b/objdiff-core/src/diff/mod.rs @@ -29,8 +29,8 @@ pub mod display; serde::Serialize, strum::VariantArray, strum::EnumMessage, - tsify_next::Tsify, )] +#[cfg_attr(feature = "wasm", derive(tsify_next::Tsify))] pub enum X86Formatter { #[default] #[strum(message = "Intel (default)")] @@ -54,8 +54,8 @@ pub enum X86Formatter { serde::Serialize, strum::VariantArray, strum::EnumMessage, - tsify_next::Tsify, )] +#[cfg_attr(feature = "wasm", derive(tsify_next::Tsify))] pub enum MipsAbi { #[default] #[strum(message = "Auto (default)")] @@ -79,8 +79,8 @@ pub enum MipsAbi { serde::Serialize, strum::VariantArray, strum::EnumMessage, - tsify_next::Tsify, )] +#[cfg_attr(feature = "wasm", derive(tsify_next::Tsify))] pub enum MipsInstrCategory { #[default] #[strum(message = "Auto (default)")] @@ -108,8 +108,8 @@ pub enum MipsInstrCategory { serde::Serialize, strum::VariantArray, strum::EnumMessage, - tsify_next::Tsify, )] +#[cfg_attr(feature = "wasm", derive(tsify_next::Tsify))] pub enum ArmArchVersion { #[default] #[strum(message = "Auto (default)")] @@ -133,8 +133,8 @@ pub enum ArmArchVersion { serde::Serialize, strum::VariantArray, strum::EnumMessage, - tsify_next::Tsify, )] +#[cfg_attr(feature = "wasm", derive(tsify_next::Tsify))] pub enum ArmR9Usage { #[default] #[strum( @@ -154,8 +154,9 @@ pub enum ArmR9Usage { #[inline] const fn default_true() -> bool { true } -#[derive(Debug, Clone, Eq, PartialEq, serde::Deserialize, serde::Serialize, tsify_next::Tsify)] -#[tsify(from_wasm_abi)] +#[derive(Debug, Clone, Eq, PartialEq, serde::Deserialize, serde::Serialize)] +#[cfg_attr(feature = "wasm", derive(tsify_next::Tsify))] +#[cfg_attr(feature = "wasm", tsify(from_wasm_abi))] #[serde(default)] pub struct DiffObjConfig { pub relax_reloc_diffs: bool, diff --git a/objdiff-core/src/lib.rs b/objdiff-core/src/lib.rs index 02df5a4..47acbbf 100644 --- a/objdiff-core/src/lib.rs +++ b/objdiff-core/src/lib.rs @@ -8,4 +8,5 @@ pub mod config; pub mod diff; #[cfg(feature = "any-arch")] pub mod obj; +#[cfg(feature = "any-arch")] pub mod util; diff --git a/objdiff-core/src/obj/read.rs b/objdiff-core/src/obj/read.rs index dad6427..3406085 100644 --- a/objdiff-core/src/obj/read.rs +++ b/objdiff-core/src/obj/read.rs @@ -64,6 +64,7 @@ fn to_obj_symbol( if obj_file.format() == BinaryFormat::Elf && symbol.scope() == SymbolScope::Linkage { flags = ObjSymbolFlagSet(flags.0 | ObjSymbolFlags::Hidden); } + #[cfg(feature = "ppc")] if arch .ppc() .and_then(|a| a.extab.as_ref())