diff --git a/skia-bindings/Cargo.toml b/skia-bindings/Cargo.toml index c7f5d2fea..c5ced8d5a 100644 --- a/skia-bindings/Cargo.toml +++ b/skia-bindings/Cargo.toml @@ -61,10 +61,12 @@ embed-freetype = [] [dependencies] mozjpeg-sys = { version = "1", features = ["with_simd"], optional = true } lazy_static = { version = "1.4.0", optional = true } +cpp = "0.5.7" [build-dependencies] cc = "1.0.37" bindgen = "0.63.0" +cpp_build = "0.5.7" # For enum variant name replacements. regex = "1.4.5" diff --git a/skia-bindings/build_support/skia_bindgen.rs b/skia-bindings/build_support/skia_bindgen.rs index 58f67606b..93cfb651e 100644 --- a/skia-bindings/build_support/skia_bindgen.rs +++ b/skia-bindings/build_support/skia_bindgen.rs @@ -162,6 +162,7 @@ pub fn generate_bindings( } let mut cc_build = Build::new(); + let mut cpp_build = cpp_build::Config::new(); for source in &build.binding_sources { cc_build.file(source); @@ -179,6 +180,7 @@ pub fn generate_bindings( bindgen_args.push(format!("-I{}", include_path.display())); cc_build.include(include_path); + cpp_build.include(include_path); for (name, value) in &build.definitions { match value { @@ -208,6 +210,7 @@ pub fn generate_bindings( let target_str = &target.to_string(); cc_build.target(target_str); bindgen_args.push(format!("--target={target_str}")); + cpp_build.flag(&format!("--target={target_str}")); // Platform specific arguments and flags. { @@ -230,10 +233,12 @@ pub fn generate_bindings( for (var, val) in cc_defines { cc_build.define(var, val); + cpp_build.define(var, Some(val)); } for arg in cc_args { cc_build.flag(&arg); + cpp_build.flag(&arg); } // we add skia-bindings later on. @@ -253,6 +258,13 @@ pub fn generate_bindings( .write_to_file(out_path.join("bindings.rs")) .expect("Couldn't write bindings!"); } + + { + println!("GENERATING CPP BINDINGS"); + let src_dir = std::env::current_dir().unwrap().join("src"); + cpp_build.include(src_dir); + cpp_build.build("src/lib.rs"); + } } const ALLOWLISTED_FUNCTIONS: &[&str] = &[ diff --git a/skia-bindings/src/lib.rs b/skia-bindings/src/lib.rs index 7d0d85cd2..5166faf09 100644 --- a/skia-bindings/src/lib.rs +++ b/skia-bindings/src/lib.rs @@ -21,3 +21,18 @@ pub mod icu; #[doc(hidden)] #[cfg(feature = "use-system-jpeg-turbo")] use mozjpeg_sys; + +use cpp::cpp; + +cpp! {{ + #include "include/codec/SkCodec.h" + #include "bindings.h" +}} + +pub fn make_from_data(data: *mut SkData) -> *mut SkCodec { + unsafe { + cpp!([data as "SkData*"] -> *mut SkCodec as "SkCodec*" { + return SkCodec::MakeFromData(sp(data)).release(); + }) + } +}