RocksDB static build
Make file changes to download and build the dependencies .Load the shared library when RocksDB is initialized
This commit is contained in:
parent
68eed8c9f0
commit
ddb8039e3a
32
Makefile
32
Makefile
@ -175,7 +175,7 @@ endif # PLATFORM_SHARED_EXT
|
|||||||
|
|
||||||
.PHONY: blackbox_crash_test check clean coverage crash_test ldb_tests \
|
.PHONY: blackbox_crash_test check clean coverage crash_test ldb_tests \
|
||||||
release tags valgrind_check whitebox_crash_test format static_lib shared_lib all \
|
release tags valgrind_check whitebox_crash_test format static_lib shared_lib all \
|
||||||
dbg
|
dbg rocksdbjavastatic rocksdbjava
|
||||||
|
|
||||||
all: $(LIBRARY) $(PROGRAMS) $(TESTS)
|
all: $(LIBRARY) $(PROGRAMS) $(TESTS)
|
||||||
|
|
||||||
@ -480,6 +480,36 @@ ROCKSDBJNILIB = librocksdbjni.jnilib
|
|||||||
JAVA_INCLUDE = -I/System/Library/Frameworks/JavaVM.framework/Headers/
|
JAVA_INCLUDE = -I/System/Library/Frameworks/JavaVM.framework/Headers/
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
rocksdbjavastatic:
|
||||||
|
#build zlib
|
||||||
|
curl -O http://zlib.net/zlib-1.2.8.tar.gz
|
||||||
|
tar xvzf zlib-1.2.8.tar.gz
|
||||||
|
cd zlib-1.2.8 && CFLAGS='-fPIC' ./configure --static && make
|
||||||
|
cp zlib-1.2.8/libz.a .
|
||||||
|
rm -rf zlib-1.2.8.tar.gz zlib-1.2.8
|
||||||
|
|
||||||
|
#build bzip
|
||||||
|
curl -O http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz
|
||||||
|
tar xvzf bzip2-1.0.6.tar.gz
|
||||||
|
cd bzip2-1.0.6 && make CFLAGS='-fPIC -Wall -Winline -O2 -g -D_FILE_OFFSET_BITS=64'
|
||||||
|
cp bzip2-1.0.6/libbz2.a .
|
||||||
|
rm -rf bzip2-1.0.6.tar.gz bzip2-1.0.6
|
||||||
|
|
||||||
|
#build snappy
|
||||||
|
curl -O https://snappy.googlecode.com/files/snappy-1.1.1.tar.gz
|
||||||
|
tar xvzf snappy-1.1.1.tar.gz
|
||||||
|
cd snappy-1.1.1 && ./configure --with-pic --enable-static
|
||||||
|
cd snappy-1.1.1 && make
|
||||||
|
cp snappy-1.1.1/.libs/libsnappy.a .
|
||||||
|
rm -rf snappy-1.1.1 snappy-1.1.1.tar.gz
|
||||||
|
OPT="-fPIC -DNDEBUG -O2" $(MAKE) $(LIBRARY) -j
|
||||||
|
cd java;$(MAKE) java;
|
||||||
|
rm -f ./java/$(ROCKSDBJNILIB)
|
||||||
|
$(CXX) $(CXXFLAGS) -I./java/. $(JAVA_INCLUDE) -shared -fPIC -o ./java/$(ROCKSDBJNILIB) $(JNI_NATIVE_SOURCES) $(LIBOBJECTS) $(COVERAGEFLAGS) libz.a libbz2.a libsnappy.a
|
||||||
|
cd java;jar -cf $(ROCKSDB_JAR) org/rocksdb/*.class org/rocksdb/util/*.class HISTORY*.md $(ROCKSDBJNILIB)
|
||||||
|
|
||||||
|
|
||||||
rocksdbjava:
|
rocksdbjava:
|
||||||
OPT="-fPIC -DNDEBUG -O2" $(MAKE) $(LIBRARY) -j32
|
OPT="-fPIC -DNDEBUG -O2" $(MAKE) $(LIBRARY) -j32
|
||||||
cd java;$(MAKE) java;
|
cd java;$(MAKE) java;
|
||||||
|
46
java/org/rocksdb/NativeLibraryLoader.java
Normal file
46
java/org/rocksdb/NativeLibraryLoader.java
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
package org.rocksdb;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
|
||||||
|
public class NativeLibraryLoader
|
||||||
|
{
|
||||||
|
|
||||||
|
private static String sharedLibraryName = "librocksdbjni.so";
|
||||||
|
private static String tempFilePrefix = "librocksdbjni";
|
||||||
|
private static String tempFileSuffix = ".so";
|
||||||
|
/**
|
||||||
|
* Private constructor - this class will never be instanced
|
||||||
|
*/
|
||||||
|
private NativeLibraryLoader() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void loadLibraryFromJar() throws IOException {
|
||||||
|
|
||||||
|
File temp = File.createTempFile(tempFilePrefix, tempFileSuffix);
|
||||||
|
temp.deleteOnExit();
|
||||||
|
|
||||||
|
if (!temp.exists()) {
|
||||||
|
throw new FileNotFoundException("File " + temp.getAbsolutePath() + " does not exist.");
|
||||||
|
}
|
||||||
|
|
||||||
|
byte[] buffer = new byte[1024];
|
||||||
|
int readBytes;
|
||||||
|
|
||||||
|
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream(sharedLibraryName);
|
||||||
|
if (is == null) {
|
||||||
|
throw new FileNotFoundException(sharedLibraryName + " was not found inside JAR.");
|
||||||
|
}
|
||||||
|
|
||||||
|
OutputStream os = new FileOutputStream(temp);
|
||||||
|
try {
|
||||||
|
while ((readBytes = is.read(buffer)) != -1) {
|
||||||
|
os.write(buffer, 0, readBytes);
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
os.close();
|
||||||
|
is.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
System.load(temp.getAbsolutePath());
|
||||||
|
}
|
||||||
|
}
|
@ -13,6 +13,9 @@ package org.rocksdb;
|
|||||||
* native resources will be released as part of the process.
|
* native resources will be released as part of the process.
|
||||||
*/
|
*/
|
||||||
public class Options extends RocksObject {
|
public class Options extends RocksObject {
|
||||||
|
static{
|
||||||
|
RocksDB.loadLibrary();
|
||||||
|
}
|
||||||
static final long DEFAULT_CACHE_SIZE = 8 << 20;
|
static final long DEFAULT_CACHE_SIZE = 8 << 20;
|
||||||
static final int DEFAULT_NUM_SHARD_BITS = -1;
|
static final int DEFAULT_NUM_SHARD_BITS = -1;
|
||||||
/**
|
/**
|
||||||
|
@ -11,6 +11,7 @@ import java.util.HashMap;
|
|||||||
import java.io.Closeable;
|
import java.io.Closeable;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import org.rocksdb.util.Environment;
|
import org.rocksdb.util.Environment;
|
||||||
|
import org.rocksdb.NativeLibraryLoader;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A RocksDB is a persistent ordered map from keys to values. It is safe for
|
* A RocksDB is a persistent ordered map from keys to values. It is safe for
|
||||||
@ -18,16 +19,24 @@ import org.rocksdb.util.Environment;
|
|||||||
* All methods of this class could potentially throw RocksDBException, which
|
* All methods of this class could potentially throw RocksDBException, which
|
||||||
* indicates sth wrong at the rocksdb library side and the call failed.
|
* indicates sth wrong at the rocksdb library side and the call failed.
|
||||||
*/
|
*/
|
||||||
public class RocksDB extends RocksObject {
|
public class RocksDB extends org.rocksdb.RocksObject
|
||||||
|
{
|
||||||
|
|
||||||
public static final int NOT_FOUND = -1;
|
public static final int NOT_FOUND = -1;
|
||||||
private static final String[] compressionLibs_ = {
|
private static final String[] compressionLibs_ = {
|
||||||
"snappy", "z", "bzip2", "lz4", "lz4hc"};
|
"snappy", "z", "bzip2", "lz4", "lz4hc"};
|
||||||
|
|
||||||
|
static {
|
||||||
|
loadLibrary();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads the necessary library files.
|
* Loads the necessary library files.
|
||||||
* Calling this method twice will have no effect.
|
* Calling this method twice will have no effect.
|
||||||
*/
|
*/
|
||||||
public static synchronized void loadLibrary() {
|
public static synchronized void loadLibrary()
|
||||||
|
{
|
||||||
// loading possibly necessary libraries.
|
// loading possibly necessary libraries.
|
||||||
for (String lib : compressionLibs_) {
|
for (String lib : compressionLibs_) {
|
||||||
try {
|
try {
|
||||||
@ -36,8 +45,15 @@ public class RocksDB extends RocksObject {
|
|||||||
// since it may be optional, we ignore its loading failure here.
|
// since it may be optional, we ignore its loading failure here.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// However, if any of them is required. We will see error here.
|
|
||||||
System.loadLibrary("rocksdbjni");
|
try
|
||||||
|
{
|
||||||
|
NativeLibraryLoader.loadLibraryFromJar();
|
||||||
|
}
|
||||||
|
catch (IOException e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user