diff --git a/grpc-sys/Cargo.toml b/grpc-sys/Cargo.toml index 6d8551e54..86f594956 100644 --- a/grpc-sys/Cargo.toml +++ b/grpc-sys/Cargo.toml @@ -26,6 +26,7 @@ exclude = [ "grpc/src/ruby/*", "grpc/vsprojects/*", "grpc/test/core/end2end/*", + "grpc/third_party/zlib/*", "grpc/third_party/abseil-cpp/*", "grpc/third_party/benchmark/*", "grpc/third_party/bloaty/*", @@ -48,6 +49,7 @@ exclude = [ [dependencies] libc = "0.2" openssl-sys = { version = "0.9", optional = true, features = ["vendored"] } +libz-sys = { version = "1.0.25", features = ["static"] } [features] default = [] diff --git a/grpc-sys/build.rs b/grpc-sys/build.rs index d651e4636..f6f247fde 100644 --- a/grpc-sys/build.rs +++ b/grpc-sys/build.rs @@ -77,7 +77,7 @@ fn trim_start<'a>(s: &'a str, prefix: &str) -> Option<&'a str> { fn build_grpc(cc: &mut Build, library: &str) { prepare_grpc(); - let mut third_party = vec!["cares/cares/lib", "zlib"]; + let mut third_party = vec!["cares/cares/lib"]; let dst = { let mut config = Config::new("grpc"); @@ -151,21 +151,16 @@ fn build_grpc(cc: &mut Build, library: &str) { } else if cfg!(feature = "secure") { third_party.extend_from_slice(&["boringssl/ssl", "boringssl/crypto"]); } + // Uses zlib from libz-sys. + setup_libz(&mut config); config.build_target(library).uses_cxx11().build() }; - let mut zlib = "z"; let build_dir = format!("{}/build", dst.display()); if get_env("CARGO_CFG_TARGET_OS").map_or(false, |s| s == "windows") { let profile = match &*env::var("PROFILE").unwrap_or("debug".to_owned()) { - "bench" | "release" => { - zlib = "zlibstatic"; - "Release" - } - _ => { - zlib = "zlibstaticd"; - "Debug" - } + "bench" | "release" => "Release", + _ => "Debug", }; println!("cargo:rustc-link-search=native={}/{}", build_dir, profile); for path in third_party { @@ -184,7 +179,7 @@ fn build_grpc(cc: &mut Build, library: &str) { } } - println!("cargo:rustc-link-lib=static={}", zlib); + println!("cargo:rustc-link-lib=static=z"); println!("cargo:rustc-link-lib=static=cares"); println!("cargo:rustc-link-lib=static=gpr"); println!("cargo:rustc-link-lib=static=address_sorting"); @@ -231,6 +226,19 @@ fn figure_ssl_path(build_dir: &str) { println!("cargo:rustc-link-lib=crypto"); } +fn setup_libz(config: &mut Config) { + config.define("gRPC_ZLIB_PROVIDER", "package"); + config.register_dep("Z").very_verbose(true); + env::set_var("CMAKE_PREFIX_PATH", { + let zlib_path = format!("{}/build", env::var("DEP_Z_ROOT").unwrap()); + if let Ok(prefix_path) = env::var("CMAKE_PREFIX_PATH") { + format!("{};{}", prefix_path, zlib_path) + } else { + zlib_path + } + }); +} + #[cfg(feature = "openssl-vendored")] fn setup_openssl(config: &mut Config) { // openssl-sys uses openssl-src to build the library. openssl-src uses diff --git a/scripts/reset-submodule b/scripts/reset-submodule index 0f778a184..0fa773889 100755 --- a/scripts/reset-submodule +++ b/scripts/reset-submodule @@ -3,7 +3,6 @@ git submodule update --init grpc-sys/grpc cd grpc-sys/grpc git submodule update --init third_party/boringssl git submodule update --init third_party/cares/cares -git submodule update --init third_party/zlib cd third_party/zlib git clean -f git reset --hard