parent
59808dd9e7
commit
772640acf8
@ -0,0 +1,209 @@
|
|||||||
|
From d68956f4ce606077a716b7fba3148d8986dd6165 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Fabio Valentini <decathorpe@gmail.com>
|
||||||
|
Date: Sat, 6 Aug 2022 18:54:46 +0200
|
||||||
|
Subject: [PATCH] unconditionally use bindgen and pkg-config to link against
|
||||||
|
system libzstd
|
||||||
|
|
||||||
|
---
|
||||||
|
build.rs | 170 +------------------------------------------------------
|
||||||
|
1 file changed, 1 insertion(+), 169 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/build.rs b/build.rs
|
||||||
|
index 83f2dc2..2336d61 100644
|
||||||
|
--- a/build.rs
|
||||||
|
+++ b/build.rs
|
||||||
|
@@ -2,7 +2,6 @@ use std::ffi::OsStr;
|
||||||
|
use std::path::{Path, PathBuf};
|
||||||
|
use std::{env, fs};
|
||||||
|
|
||||||
|
-#[cfg(feature = "bindgen")]
|
||||||
|
fn generate_bindings(defs: Vec<&str>, headerpaths: Vec<PathBuf>) {
|
||||||
|
let bindings = bindgen::Builder::default()
|
||||||
|
.header("zstd.h");
|
||||||
|
@@ -36,10 +35,6 @@ fn generate_bindings(defs: Vec<&str>, headerpaths: Vec<PathBuf>) {
|
||||||
|
.expect("Could not write bindings");
|
||||||
|
}
|
||||||
|
|
||||||
|
-#[cfg(not(feature = "bindgen"))]
|
||||||
|
-fn generate_bindings(_: Vec<&str>, _: Vec<PathBuf>) {}
|
||||||
|
-
|
||||||
|
-#[cfg(feature = "pkg-config")]
|
||||||
|
fn pkg_config() -> (Vec<&'static str>, Vec<PathBuf>) {
|
||||||
|
let library = pkg_config::Config::new()
|
||||||
|
.statik(true)
|
||||||
|
@@ -49,171 +44,8 @@ fn pkg_config() -> (Vec<&'static str>, Vec<PathBuf>) {
|
||||||
|
(vec!["PKG_CONFIG"], library.include_paths)
|
||||||
|
}
|
||||||
|
|
||||||
|
-#[cfg(not(feature = "pkg-config"))]
|
||||||
|
-fn pkg_config() -> (Vec<&'static str>, Vec<PathBuf>) {
|
||||||
|
- unimplemented!()
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-#[cfg(not(feature = "legacy"))]
|
||||||
|
-fn set_legacy(_config: &mut cc::Build) {}
|
||||||
|
-
|
||||||
|
-#[cfg(feature = "legacy")]
|
||||||
|
-fn set_legacy(config: &mut cc::Build) {
|
||||||
|
- config.define("ZSTD_LEGACY_SUPPORT", Some("1"));
|
||||||
|
- config.include("zstd/lib/legacy");
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-#[cfg(feature = "zstdmt")]
|
||||||
|
-fn set_pthread(config: &mut cc::Build) {
|
||||||
|
- config.flag("-pthread");
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-#[cfg(not(feature = "zstdmt"))]
|
||||||
|
-fn set_pthread(_config: &mut cc::Build) {}
|
||||||
|
-
|
||||||
|
-#[cfg(feature = "zstdmt")]
|
||||||
|
-fn enable_threading(config: &mut cc::Build) {
|
||||||
|
- config.define("ZSTD_MULTITHREAD", Some(""));
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-#[cfg(not(feature = "zstdmt"))]
|
||||||
|
-fn enable_threading(_config: &mut cc::Build) {}
|
||||||
|
-
|
||||||
|
-fn compile_zstd() {
|
||||||
|
- let mut config = cc::Build::new();
|
||||||
|
-
|
||||||
|
- // Search the following directories for C files to add to the compilation.
|
||||||
|
- for dir in &[
|
||||||
|
- "zstd/lib/common",
|
||||||
|
- "zstd/lib/compress",
|
||||||
|
- "zstd/lib/decompress",
|
||||||
|
- #[cfg(feature = "zdict_builder")]
|
||||||
|
- "zstd/lib/dictBuilder",
|
||||||
|
- #[cfg(feature = "legacy")]
|
||||||
|
- "zstd/lib/legacy",
|
||||||
|
- ] {
|
||||||
|
- for entry in fs::read_dir(dir).unwrap() {
|
||||||
|
- let path = entry.unwrap().path();
|
||||||
|
- // Skip xxhash*.c files: since we are using the "PRIVATE API"
|
||||||
|
- // mode, it will be inlined in the headers.
|
||||||
|
- if path
|
||||||
|
- .file_name()
|
||||||
|
- .and_then(|p| p.to_str())
|
||||||
|
- .map_or(false, |p| p.contains("xxhash"))
|
||||||
|
- {
|
||||||
|
- continue;
|
||||||
|
- }
|
||||||
|
- if path.extension() == Some(OsStr::new("c")) {
|
||||||
|
- config.file(path);
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- // Either include ASM files, or disable ASM entirely.
|
||||||
|
- // Also disable it on windows, apparently it doesn't do well with these .S files at the moment.
|
||||||
|
- if cfg!(any(target_os = "windows", feature = "no_asm")) {
|
||||||
|
- config.define("ZSTD_DISABLE_ASM", Some(""));
|
||||||
|
- } else {
|
||||||
|
- config.file("zstd/lib/decompress/huf_decompress_amd64.S");
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- let is_wasm_unknown_unknown = env::var("TARGET").ok() == Some("wasm32-unknown-unknown".into());
|
||||||
|
-
|
||||||
|
- if is_wasm_unknown_unknown {
|
||||||
|
- println!("cargo:rerun-if-changed=wasm-shim/stdlib.h");
|
||||||
|
- println!("cargo:rerun-if-changed=wasm-shim/string.h");
|
||||||
|
-
|
||||||
|
- config.include("wasm-shim/");
|
||||||
|
- config.define("XXH_STATIC_ASSERT", Some("0"));
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- // Some extra parameters
|
||||||
|
- config.opt_level(3);
|
||||||
|
- config.include("zstd/lib/");
|
||||||
|
- config.include("zstd/lib/common");
|
||||||
|
- config.warnings(false);
|
||||||
|
-
|
||||||
|
- config.define("ZSTD_LIB_DEPRECATED", Some("0"));
|
||||||
|
-
|
||||||
|
- #[cfg(feature = "thin")]
|
||||||
|
- {
|
||||||
|
- config.define("HUF_FORCE_DECOMPRESS_X1", Some("1"));
|
||||||
|
- config.define("ZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT", Some("1"));
|
||||||
|
- config.define("ZSTD_NO_INLINE ", Some("1"));
|
||||||
|
- config.flag_if_supported("-flto=thin");
|
||||||
|
- config.flag_if_supported("-Oz");
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- // Hide symbols from resulting library,
|
||||||
|
- // so we can be used with another zstd-linking lib.
|
||||||
|
- // See https://github.com/gyscos/zstd-rs/issues/58
|
||||||
|
- config.flag("-fvisibility=hidden");
|
||||||
|
- config.define("XXH_PRIVATE_API", Some(""));
|
||||||
|
- config.define("ZSTDLIB_VISIBILITY", Some(""));
|
||||||
|
- #[cfg(feature = "zdict_builder")]
|
||||||
|
- config.define("ZDICTLIB_VISIBILITY", Some(""));
|
||||||
|
- config.define("ZSTDERRORLIB_VISIBILITY", Some(""));
|
||||||
|
-
|
||||||
|
- // https://github.com/facebook/zstd/blob/d69d08ed6c83563b57d98132e1e3f2487880781e/lib/common/debug.h#L60
|
||||||
|
- /* recommended values for DEBUGLEVEL :
|
||||||
|
- * 0 : release mode, no debug, all run-time checks disabled
|
||||||
|
- * 1 : enables assert() only, no display
|
||||||
|
- * 2 : reserved, for currently active debug path
|
||||||
|
- * 3 : events once per object lifetime (CCtx, CDict, etc.)
|
||||||
|
- * 4 : events once per frame
|
||||||
|
- * 5 : events once per block
|
||||||
|
- * 6 : events once per sequence (verbose)
|
||||||
|
- * 7+: events at every position (*very* verbose)
|
||||||
|
- */
|
||||||
|
- #[cfg(feature = "debug")]
|
||||||
|
- if !is_wasm_unknown_unknown {
|
||||||
|
- config.define("DEBUGLEVEL", Some("5"));
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- set_pthread(&mut config);
|
||||||
|
- set_legacy(&mut config);
|
||||||
|
- enable_threading(&mut config);
|
||||||
|
-
|
||||||
|
- // Compile!
|
||||||
|
- config.compile("libzstd.a");
|
||||||
|
-
|
||||||
|
- let src = env::current_dir().unwrap().join("zstd").join("lib");
|
||||||
|
- let dst = PathBuf::from(env::var_os("OUT_DIR").unwrap());
|
||||||
|
- let include = dst.join("include");
|
||||||
|
- fs::create_dir_all(&include).unwrap();
|
||||||
|
- fs::copy(src.join("zstd.h"), include.join("zstd.h")).unwrap();
|
||||||
|
- fs::copy(src.join("zstd_errors.h"), include.join("zstd_errors.h"))
|
||||||
|
- .unwrap();
|
||||||
|
- #[cfg(feature = "zdict_builder")]
|
||||||
|
- fs::copy(src.join("zdict.h"), include.join("zdict.h")).unwrap();
|
||||||
|
- println!("cargo:root={}", dst.display());
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
fn main() {
|
||||||
|
- let target_arch =
|
||||||
|
- std::env::var("CARGO_CFG_TARGET_ARCH").unwrap_or_default();
|
||||||
|
- let target_os = std::env::var("CARGO_CFG_TARGET_OS").unwrap_or_default();
|
||||||
|
-
|
||||||
|
- if target_arch == "wasm32" || target_os == "hermit" {
|
||||||
|
- println!("cargo:rustc-cfg=feature=\"std\"");
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- // println!("cargo:rustc-link-lib=zstd");
|
||||||
|
- let (defs, headerpaths) = if cfg!(feature = "pkg-config") {
|
||||||
|
- pkg_config()
|
||||||
|
- } else {
|
||||||
|
- if !Path::new("zstd/lib").exists() {
|
||||||
|
- panic!("Folder 'zstd/lib' does not exists. Maybe you forgot to clone the 'zstd' submodule?");
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- let manifest_dir = PathBuf::from(
|
||||||
|
- env::var("CARGO_MANIFEST_DIR")
|
||||||
|
- .expect("Manifest dir is always set by cargo"),
|
||||||
|
- );
|
||||||
|
-
|
||||||
|
- compile_zstd();
|
||||||
|
- (vec![], vec![manifest_dir.join("zstd/lib")])
|
||||||
|
- };
|
||||||
|
+ let (defs, headerpaths) = pkg_config();
|
||||||
|
|
||||||
|
let includes: Vec<_> = headerpaths
|
||||||
|
.iter()
|
||||||
|
--
|
||||||
|
2.37.1
|
||||||
|
|
@ -1 +1 @@
|
|||||||
SHA512 (zstd-sys-1.6.3+zstd.1.5.2.crate) = a8aaa3ddb7295cdb12623d1b6b06e30a029bce42a825adb427594e030ba0a1e51bf499f462d42bae47cd75178761d0e5071e86b0bcb8d8ff9cc8ebff1406b689
|
SHA512 (zstd-sys-2.0.1+zstd.1.5.2.crate) = a54ff4159640d31f898cbd374b9117d1e7ee4b54c5b4a8e1ed6286d9e954341e077088c52161e086ef0f28dfec13e03f64013712fa9bc59d471191cffd8e0e1e
|
||||||
|
@ -1,25 +1,56 @@
|
|||||||
--- zstd-sys-1.6.3+zstd.1.5.2/Cargo.toml 1970-01-01T00:00:01+00:00
|
--- zstd-sys-2.0.1+zstd.1.5.2/Cargo.toml 1970-01-01T00:00:01+00:00
|
||||||
+++ zstd-sys-1.6.3+zstd.1.5.2/Cargo.toml 2022-04-12T10:22:49.978386+00:00
|
+++ zstd-sys-2.0.1+zstd.1.5.2/Cargo.toml 2022-08-06T17:03:27.974126+00:00
|
||||||
@@ -12,11 +12,11 @@
|
@@ -12,20 +12,15 @@
|
||||||
[package]
|
[package]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
name = "zstd-sys"
|
name = "zstd-sys"
|
||||||
-version = "1.6.3+zstd.1.5.2"
|
-version = "2.0.1+zstd.1.5.2"
|
||||||
+version = "1.6.3"
|
+version = "2.0.1"
|
||||||
authors = ["Alexandre Bury <alexandre.bury@gmail.com>"]
|
authors = ["Alexandre Bury <alexandre.bury@gmail.com>"]
|
||||||
build = "build.rs"
|
build = "build.rs"
|
||||||
links = "zstd"
|
links = "zstd"
|
||||||
-include = ["/LICENSE", "/*.*", "/src/", "/zstd/LICENSE", "/zstd/COPYING", "/zstd/lib/**/*.c", "/zstd/lib/**/*.h", "/zstd/lib/**/*.S"]
|
-include = [
|
||||||
+exclude = ["/test_it.sh", "/update_bindings.sh", "/update_zstd.sh"]
|
- "/LICENSE",
|
||||||
|
- "/*.*",
|
||||||
|
- "/src/",
|
||||||
|
- "/wasm-shim/**/*.h",
|
||||||
|
- "/zstd/LICENSE",
|
||||||
|
- "/zstd/COPYING",
|
||||||
|
- "/zstd/lib/**/*.c",
|
||||||
|
- "/zstd/lib/**/*.h",
|
||||||
|
- "/zstd/lib/**/*.S",
|
||||||
|
+exclude = [
|
||||||
|
+ "/test_it.sh",
|
||||||
|
+ "/update_bindings.sh",
|
||||||
|
+ "/update_zstd.sh",
|
||||||
|
+ "/wasm-shim/",
|
||||||
|
]
|
||||||
description = "Low-level bindings for the zstd compression library."
|
description = "Low-level bindings for the zstd compression library."
|
||||||
readme = "Readme.md"
|
readme = "Readme.md"
|
||||||
keywords = ["zstd", "zstandard", "compression"]
|
@@ -52,7 +47,6 @@
|
||||||
@@ -44,7 +44,7 @@
|
|
||||||
|
[build-dependencies.bindgen]
|
||||||
|
version = "0.59"
|
||||||
|
-optional = true
|
||||||
|
|
||||||
|
[build-dependencies.cc]
|
||||||
|
version = "1.0.45"
|
||||||
|
@@ -60,9 +54,9 @@
|
||||||
|
|
||||||
|
[build-dependencies.pkg-config]
|
||||||
|
version = "0.3"
|
||||||
|
-optional = true
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
|
+bindgen = []
|
||||||
debug = []
|
debug = []
|
||||||
-default = ["legacy"]
|
default = [
|
||||||
+default = ["legacy", "pkg-config", "bindgen"]
|
"legacy",
|
||||||
experimental = []
|
@@ -72,6 +66,7 @@
|
||||||
legacy = []
|
legacy = []
|
||||||
no_asm = []
|
no_asm = []
|
||||||
|
non-cargo = []
|
||||||
|
+pkg-config = []
|
||||||
|
std = []
|
||||||
|
thin = []
|
||||||
|
zdict_builder = []
|
||||||
|
Loading…
Reference in new issue