|
1 | 1 | use std::path::Path;
|
2 | 2 | use std::{env, fs, path::PathBuf, process::Command};
|
3 | 3 |
|
| 4 | +#[cfg(target_os = "linux")] |
| 5 | +use libc::{getauxval, AT_HWCAP}; |
| 6 | + |
4 | 7 | // On these platforms jemalloc-sys will use a prefixed jemalloc which cannot be linked together
|
5 | 8 | // with RocksDB.
|
6 | 9 | // See https://github.com/tikv/jemallocator/blob/f7adfca5aff272b43fd3ad896252b57fbbd9c72a/jemalloc-sys/src/env.rs#L24
|
@@ -50,6 +53,18 @@ fn bindgen_rocksdb() {
|
50 | 53 | .expect("unable to write rocksdb bindings");
|
51 | 54 | }
|
52 | 55 |
|
| 56 | +#[cfg(target_os = "linux")] |
| 57 | +fn check_getauxval_supported() -> bool { |
| 58 | + unsafe { |
| 59 | + let aux_value = getauxval(AT_HWCAP); |
| 60 | + if aux_value == 0 { |
| 61 | + return false; |
| 62 | + } |
| 63 | + |
| 64 | + true |
| 65 | + } |
| 66 | +} |
| 67 | + |
53 | 68 | fn build_rocksdb() {
|
54 | 69 | let target = env::var("TARGET").unwrap();
|
55 | 70 |
|
@@ -192,6 +207,11 @@ fn build_rocksdb() {
|
192 | 207 | config.define("ROCKSDB_PLATFORM_POSIX", None);
|
193 | 208 | config.define("ROCKSDB_LIB_IO_POSIX", None);
|
194 | 209 | config.define("ROCKSDB_SCHED_GETCPU_PRESENT", None);
|
| 210 | + |
| 211 | + #[cfg(target_os = "linux")] |
| 212 | + if check_getauxval_supported() { |
| 213 | + config.define("ROCKSDB_AUXV_GETAUXVAL_PRESENT", None); |
| 214 | + } |
195 | 215 | } else if target.contains("dragonfly") {
|
196 | 216 | config.define("OS_DRAGONFLYBSD", None);
|
197 | 217 | config.define("ROCKSDB_PLATFORM_POSIX", None);
|
|
0 commit comments