Commit 44336118 authored by zhangjinpeng1987's avatar zhangjinpeng1987 Committed by Jay

rocksdb c wrapper (#67)

parent 8b9257a0
...@@ -14,3 +14,6 @@ static-link = [] ...@@ -14,3 +14,6 @@ static-link = []
# portable doesn't require static link, though it's meaningless # portable doesn't require static link, though it's meaningless
# when not using with static-link right now in this crate. # when not using with static-link right now in this crate.
portable = [] portable = []
[build-dependencies]
gcc = "0.3"
extern crate gcc;
use std::{env, fs, str}; use std::{env, fs, str};
use std::path::PathBuf; use std::path::PathBuf;
use std::process::Command; use std::process::Command;
...@@ -11,8 +14,20 @@ macro_rules! t { ...@@ -11,8 +14,20 @@ macro_rules! t {
fn main() { fn main() {
if !cfg!(feature = "static-link") { if !cfg!(feature = "static-link") {
gcc::Config::new()
.cpp(true)
.file("crocksdb/c.cc")
.flag("-std=c++11")
.flag("-fPIC")
.flag("-O2")
.compile("libcrocksdb.a");
println!("cargo:rustc-link-lib=static=crocksdb");
println!("cargo:rustc-link-lib=rocksdb");
return; return;
} }
if !cfg!(target_os = "linux") && !cfg!(target_os = "macos") { if !cfg!(target_os = "linux") && !cfg!(target_os = "macos") {
// only linux and apple support static link right now // only linux and apple support static link right now
return; return;
...@@ -24,7 +39,9 @@ fn main() { ...@@ -24,7 +39,9 @@ fn main() {
t!(fs::create_dir_all(&build)); t!(fs::create_dir_all(&build));
let fest_dir = env::var("CARGO_MANIFEST_DIR").unwrap(); let fest_dir = env::var("CARGO_MANIFEST_DIR").unwrap();
let p = PathBuf::from(fest_dir).join("build.sh"); let p = PathBuf::from(fest_dir.clone()).join("build.sh");
let crocksdb_path = PathBuf::from(fest_dir).join("crocksdb");
env::set_var("CROCKSDB_PATH", crocksdb_path.to_str().unwrap());
for lib in &["z", "snappy", "bz2", "lz4", "rocksdb"] { for lib in &["z", "snappy", "bz2", "lz4", "rocksdb"] {
let lib_name = format!("lib{}.a", lib); let lib_name = format!("lib{}.a", lib);
let src = build.join(&lib_name); let src = build.join(&lib_name);
......
...@@ -114,10 +114,13 @@ function compile_rocksdb() { ...@@ -114,10 +114,13 @@ function compile_rocksdb() {
tar xf rocksdb-$version.tar.gz tar xf rocksdb-$version.tar.gz
wd=`pwd` wd=`pwd`
cd rocksdb-$vernum cd rocksdb-$vernum
cp $CROCKSDB_PATH/c.cc ./db/c.cc
cp $CROCKSDB_PATH/rocksdb/c.h ./include/rocksdb/c.h
export EXTRA_CFLAGS="-fPIC -I${wd}/zlib-1.2.8 -I${wd}/bzip2-1.0.6 -I${wd}/snappy-1.1.1 -I${wd}/lz4-r131/lib" export EXTRA_CFLAGS="-fPIC -I${wd}/zlib-1.2.8 -I${wd}/bzip2-1.0.6 -I${wd}/snappy-1.1.1 -I${wd}/lz4-r131/lib"
export EXTRA_CXXFLAGS="-DZLIB -DBZIP2 -DSNAPPY -DLZ4 $EXTRA_CFLAGS" export EXTRA_CXXFLAGS="-DZLIB -DBZIP2 -DSNAPPY -DLZ4 $EXTRA_CFLAGS"
make static_lib -j $con make static_lib -j $con
mv librocksdb.a ../ mv librocksdb.a ../
cd ..
} }
function find_library() { function find_library() {
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
use libc::{c_void, c_char, c_int, size_t}; use libc::{c_void, c_char, c_int, size_t};
use rocksdb_ffi::{self, DBCompactionFilter}; use crocksdb_ffi::{self, DBCompactionFilter};
use std::ffi::CString; use std::ffi::CString;
use std::slice; use std::slice;
...@@ -61,7 +61,7 @@ pub struct CompactionFilterHandle { ...@@ -61,7 +61,7 @@ pub struct CompactionFilterHandle {
impl Drop for CompactionFilterHandle { impl Drop for CompactionFilterHandle {
fn drop(&mut self) { fn drop(&mut self) {
unsafe { unsafe {
rocksdb_ffi::rocksdb_compactionfilter_destroy(self.inner); crocksdb_ffi::crocksdb_compactionfilter_destroy(self.inner);
} }
} }
} }
...@@ -74,10 +74,10 @@ pub unsafe fn new_compaction_filter(c_name: CString, ...@@ -74,10 +74,10 @@ pub unsafe fn new_compaction_filter(c_name: CString,
name: c_name, name: c_name,
filter: f, filter: f,
})); }));
let filter = rocksdb_ffi::rocksdb_compactionfilter_create(proxy as *mut c_void, let filter = crocksdb_ffi::crocksdb_compactionfilter_create(proxy as *mut c_void,
destructor, destructor,
filter, filter,
name); name);
rocksdb_ffi::rocksdb_compactionfilter_set_ignore_snapshots(filter, ignore_snapshots); crocksdb_ffi::crocksdb_compactionfilter_set_ignore_snapshots(filter, ignore_snapshots);
Ok(CompactionFilterHandle { inner: filter }) Ok(CompactionFilterHandle { inner: filter })
} }
...@@ -28,7 +28,7 @@ mod compaction_filter; ...@@ -28,7 +28,7 @@ mod compaction_filter;
pub use compaction_filter::CompactionFilter; pub use compaction_filter::CompactionFilter;
pub use librocksdb_sys::{DBCompactionStyle, DBCompressionType, DBRecoveryMode, new_bloom_filter, pub use librocksdb_sys::{DBCompactionStyle, DBCompressionType, DBRecoveryMode, new_bloom_filter,
self as rocksdb_ffi}; self as crocksdb_ffi};
pub use merge_operator::MergeOperands; pub use merge_operator::MergeOperands;
pub use rocksdb::{DB, DBIterator, DBVector, Kv, SeekKey, Writable, WriteBatch, CFHandle, Range, pub use rocksdb::{DB, DBIterator, DBVector, Kv, SeekKey, Writable, WriteBatch, CFHandle, Range,
BackupEngine}; BackupEngine};
......
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment