Small fixes.
Details: * Fix shared library building. * Reorganize linking commands so flags like --as-needed can be passed. * C binding exports version numbers. * Fix small typos in documention.
This commit is contained in:
parent
946e5b5a4c
commit
40768657bc
52
Makefile
52
Makefile
@ -2,9 +2,6 @@
|
|||||||
# Use of this source code is governed by a BSD-style license that can be
|
# Use of this source code is governed by a BSD-style license that can be
|
||||||
# found in the LICENSE file. See the AUTHORS file for names of contributors.
|
# found in the LICENSE file. See the AUTHORS file for names of contributors.
|
||||||
|
|
||||||
# Inherit some settings from environment variables, if available
|
|
||||||
INSTALL_PATH ?= $(CURDIR)
|
|
||||||
|
|
||||||
#-----------------------------------------------
|
#-----------------------------------------------
|
||||||
# Uncomment exactly one of the lines labelled (A), (B), and (C) below
|
# Uncomment exactly one of the lines labelled (A), (B), and (C) below
|
||||||
# to switch between compilation modes.
|
# to switch between compilation modes.
|
||||||
@ -24,6 +21,7 @@ CFLAGS += -I. -I./include $(PLATFORM_CCFLAGS) $(OPT)
|
|||||||
CXXFLAGS += -I. -I./include $(PLATFORM_CXXFLAGS) $(OPT)
|
CXXFLAGS += -I. -I./include $(PLATFORM_CXXFLAGS) $(OPT)
|
||||||
|
|
||||||
LDFLAGS += $(PLATFORM_LDFLAGS)
|
LDFLAGS += $(PLATFORM_LDFLAGS)
|
||||||
|
LIBS += $(PLATFORM_LIBS)
|
||||||
|
|
||||||
LIBOBJECTS = $(SOURCES:.cc=.o)
|
LIBOBJECTS = $(SOURCES:.cc=.o)
|
||||||
MEMENVOBJECTS = $(MEMENV_SOURCES:.cc=.o)
|
MEMENVOBJECTS = $(MEMENV_SOURCES:.cc=.o)
|
||||||
@ -71,7 +69,7 @@ SHARED = $(SHARED1)
|
|||||||
else
|
else
|
||||||
# Update db.h if you change these.
|
# Update db.h if you change these.
|
||||||
SHARED_MAJOR = 1
|
SHARED_MAJOR = 1
|
||||||
SHARED_MINOR = 6
|
SHARED_MINOR = 7
|
||||||
SHARED1 = libleveldb.$(PLATFORM_SHARED_EXT)
|
SHARED1 = libleveldb.$(PLATFORM_SHARED_EXT)
|
||||||
SHARED2 = $(SHARED1).$(SHARED_MAJOR)
|
SHARED2 = $(SHARED1).$(SHARED_MAJOR)
|
||||||
SHARED3 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR)
|
SHARED3 = $(SHARED1).$(SHARED_MAJOR).$(SHARED_MINOR)
|
||||||
@ -83,7 +81,7 @@ $(SHARED2): $(SHARED3)
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
$(SHARED3):
|
$(SHARED3):
|
||||||
$(CXX) $(SOURCES) $(LDFLAGS) $(PLATFORM_SHARED_LDFLAGS)$(INSTALL_PATH)$(SHARED2) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) -o $(SHARED3)
|
$(CXX) $(LDFLAGS) $(PLATFORM_SHARED_LDFLAGS)$(SHARED2) $(CXXFLAGS) $(PLATFORM_SHARED_CFLAGS) $(SOURCES) -o $(SHARED3) $(LIBS)
|
||||||
|
|
||||||
endif # PLATFORM_SHARED_EXT
|
endif # PLATFORM_SHARED_EXT
|
||||||
|
|
||||||
@ -101,74 +99,74 @@ $(LIBRARY): $(LIBOBJECTS)
|
|||||||
$(AR) -rs $@ $(LIBOBJECTS)
|
$(AR) -rs $@ $(LIBOBJECTS)
|
||||||
|
|
||||||
db_bench: db/db_bench.o $(LIBOBJECTS) $(TESTUTIL)
|
db_bench: db/db_bench.o $(LIBOBJECTS) $(TESTUTIL)
|
||||||
$(CXX) db/db_bench.o $(LIBOBJECTS) $(TESTUTIL) -o $@ $(LDFLAGS)
|
$(CXX) $(LDFLAGS) db/db_bench.o $(LIBOBJECTS) $(TESTUTIL) -o $@ $(LIBS)
|
||||||
|
|
||||||
db_bench_sqlite3: doc/bench/db_bench_sqlite3.o $(LIBOBJECTS) $(TESTUTIL)
|
db_bench_sqlite3: doc/bench/db_bench_sqlite3.o $(LIBOBJECTS) $(TESTUTIL)
|
||||||
$(CXX) doc/bench/db_bench_sqlite3.o $(LIBOBJECTS) $(TESTUTIL) -o $@ $(LDFLAGS) -lsqlite3
|
$(CXX) $(LDFLAGS) doc/bench/db_bench_sqlite3.o $(LIBOBJECTS) $(TESTUTIL) -o $@ -lsqlite3 $(LIBS)
|
||||||
|
|
||||||
db_bench_tree_db: doc/bench/db_bench_tree_db.o $(LIBOBJECTS) $(TESTUTIL)
|
db_bench_tree_db: doc/bench/db_bench_tree_db.o $(LIBOBJECTS) $(TESTUTIL)
|
||||||
$(CXX) doc/bench/db_bench_tree_db.o $(LIBOBJECTS) $(TESTUTIL) -o $@ $(LDFLAGS) -lkyotocabinet
|
$(CXX) $(LDFLAGS) doc/bench/db_bench_tree_db.o $(LIBOBJECTS) $(TESTUTIL) -o $@ -lkyotocabinet $(LIBS)
|
||||||
|
|
||||||
arena_test: util/arena_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
arena_test: util/arena_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
||||||
$(CXX) util/arena_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
|
$(CXX) $(LDFLAGS) util/arena_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
|
||||||
|
|
||||||
bloom_test: util/bloom_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
bloom_test: util/bloom_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
||||||
$(CXX) util/bloom_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
|
$(CXX) $(LDFLAGS) util/bloom_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
|
||||||
|
|
||||||
c_test: db/c_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
c_test: db/c_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
||||||
$(CXX) db/c_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
|
$(CXX) $(LDFLAGS) db/c_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
|
||||||
|
|
||||||
cache_test: util/cache_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
cache_test: util/cache_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
||||||
$(CXX) util/cache_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
|
$(CXX) $(LDFLAGS) util/cache_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
|
||||||
|
|
||||||
coding_test: util/coding_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
coding_test: util/coding_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
||||||
$(CXX) util/coding_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
|
$(CXX) $(LDFLAGS) util/coding_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
|
||||||
|
|
||||||
corruption_test: db/corruption_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
corruption_test: db/corruption_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
||||||
$(CXX) db/corruption_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
|
$(CXX) $(LDFLAGS) db/corruption_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
|
||||||
|
|
||||||
crc32c_test: util/crc32c_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
crc32c_test: util/crc32c_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
||||||
$(CXX) util/crc32c_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
|
$(CXX) $(LDFLAGS) util/crc32c_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
|
||||||
|
|
||||||
db_test: db/db_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
db_test: db/db_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
||||||
$(CXX) db/db_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
|
$(CXX) $(LDFLAGS) db/db_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
|
||||||
|
|
||||||
dbformat_test: db/dbformat_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
dbformat_test: db/dbformat_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
||||||
$(CXX) db/dbformat_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
|
$(CXX) $(LDFLAGS) db/dbformat_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
|
||||||
|
|
||||||
env_test: util/env_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
env_test: util/env_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
||||||
$(CXX) util/env_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
|
$(CXX) $(LDFLAGS) util/env_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
|
||||||
|
|
||||||
filename_test: db/filename_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
filename_test: db/filename_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
||||||
$(CXX) db/filename_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
|
$(CXX) $(LDFLAGS) db/filename_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
|
||||||
|
|
||||||
filter_block_test: table/filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
filter_block_test: table/filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
||||||
$(CXX) table/filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
|
$(CXX) $(LDFLAGS) table/filter_block_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
|
||||||
|
|
||||||
log_test: db/log_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
log_test: db/log_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
||||||
$(CXX) db/log_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
|
$(CXX) $(LDFLAGS) db/log_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
|
||||||
|
|
||||||
table_test: table/table_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
table_test: table/table_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
||||||
$(CXX) table/table_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
|
$(CXX) $(LDFLAGS) table/table_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
|
||||||
|
|
||||||
skiplist_test: db/skiplist_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
skiplist_test: db/skiplist_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
||||||
$(CXX) db/skiplist_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
|
$(CXX) $(LDFLAGS) db/skiplist_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
|
||||||
|
|
||||||
version_edit_test: db/version_edit_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
version_edit_test: db/version_edit_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
||||||
$(CXX) db/version_edit_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
|
$(CXX) $(LDFLAGS) db/version_edit_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
|
||||||
|
|
||||||
version_set_test: db/version_set_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
version_set_test: db/version_set_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
||||||
$(CXX) db/version_set_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
|
$(CXX) $(LDFLAGS) db/version_set_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
|
||||||
|
|
||||||
write_batch_test: db/write_batch_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
write_batch_test: db/write_batch_test.o $(LIBOBJECTS) $(TESTHARNESS)
|
||||||
$(CXX) db/write_batch_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LDFLAGS)
|
$(CXX) $(LDFLAGS) db/write_batch_test.o $(LIBOBJECTS) $(TESTHARNESS) -o $@ $(LIBS)
|
||||||
|
|
||||||
$(MEMENVLIBRARY) : $(MEMENVOBJECTS)
|
$(MEMENVLIBRARY) : $(MEMENVOBJECTS)
|
||||||
rm -f $@
|
rm -f $@
|
||||||
$(AR) -rs $@ $(MEMENVOBJECTS)
|
$(AR) -rs $@ $(MEMENVOBJECTS)
|
||||||
|
|
||||||
memenv_test : helpers/memenv/memenv_test.o $(MEMENVLIBRARY) $(LIBRARY) $(TESTHARNESS)
|
memenv_test : helpers/memenv/memenv_test.o $(MEMENVLIBRARY) $(LIBRARY) $(TESTHARNESS)
|
||||||
$(CXX) helpers/memenv/memenv_test.o $(MEMENVLIBRARY) $(LIBRARY) $(TESTHARNESS) -o $@ $(LDFLAGS)
|
$(CXX) $(LDFLAGS) helpers/memenv/memenv_test.o $(MEMENVLIBRARY) $(LIBRARY) $(TESTHARNESS) -o $@ $(LIBS)
|
||||||
|
|
||||||
ifeq ($(PLATFORM), IOS)
|
ifeq ($(PLATFORM), IOS)
|
||||||
# For iOS, create universal object files to be used on both the simulator and
|
# For iOS, create universal object files to be used on both the simulator and
|
||||||
|
@ -7,8 +7,11 @@
|
|||||||
# CC C Compiler path
|
# CC C Compiler path
|
||||||
# CXX C++ Compiler path
|
# CXX C++ Compiler path
|
||||||
# PLATFORM_LDFLAGS Linker flags
|
# PLATFORM_LDFLAGS Linker flags
|
||||||
|
# PLATFORM_LIBS Libraries flags
|
||||||
# PLATFORM_SHARED_EXT Extension for shared libraries
|
# PLATFORM_SHARED_EXT Extension for shared libraries
|
||||||
# PLATFORM_SHARED_LDFLAGS Flags for building shared library
|
# PLATFORM_SHARED_LDFLAGS Flags for building shared library
|
||||||
|
# This flag is embedded just before the name
|
||||||
|
# of the shared library without intervening spaces
|
||||||
# PLATFORM_SHARED_CFLAGS Flags for compiling objects for shared library
|
# PLATFORM_SHARED_CFLAGS Flags for compiling objects for shared library
|
||||||
# PLATFORM_CCFLAGS C compiler flags
|
# PLATFORM_CCFLAGS C compiler flags
|
||||||
# PLATFORM_CXXFLAGS C++ compiler flags. Will contain:
|
# PLATFORM_CXXFLAGS C++ compiler flags. Will contain:
|
||||||
@ -51,6 +54,7 @@ CROSS_COMPILE=
|
|||||||
PLATFORM_CCFLAGS=
|
PLATFORM_CCFLAGS=
|
||||||
PLATFORM_CXXFLAGS=
|
PLATFORM_CXXFLAGS=
|
||||||
PLATFORM_LDFLAGS=
|
PLATFORM_LDFLAGS=
|
||||||
|
PLATFORM_LIBS=
|
||||||
PLATFORM_SHARED_EXT="so"
|
PLATFORM_SHARED_EXT="so"
|
||||||
PLATFORM_SHARED_LDFLAGS="-shared -Wl,-soname -Wl,"
|
PLATFORM_SHARED_LDFLAGS="-shared -Wl,-soname -Wl,"
|
||||||
PLATFORM_SHARED_CFLAGS="-fPIC"
|
PLATFORM_SHARED_CFLAGS="-fPIC"
|
||||||
@ -68,7 +72,8 @@ case "$TARGET_OS" in
|
|||||||
PLATFORM=OS_MACOSX
|
PLATFORM=OS_MACOSX
|
||||||
COMMON_FLAGS="$MEMCMP_FLAG -DOS_MACOSX"
|
COMMON_FLAGS="$MEMCMP_FLAG -DOS_MACOSX"
|
||||||
PLATFORM_SHARED_EXT=dylib
|
PLATFORM_SHARED_EXT=dylib
|
||||||
PLATFORM_SHARED_LDFLAGS="-dynamiclib -install_name "
|
[ -z "$INSTALL_PATH" ] && INSTALL_PATH=`pwd`
|
||||||
|
PLATFORM_SHARED_LDFLAGS="-dynamiclib -install_name $INSTALL_PATH/"
|
||||||
PORT_FILE=port/port_posix.cc
|
PORT_FILE=port/port_posix.cc
|
||||||
;;
|
;;
|
||||||
Linux)
|
Linux)
|
||||||
@ -80,19 +85,19 @@ case "$TARGET_OS" in
|
|||||||
SunOS)
|
SunOS)
|
||||||
PLATFORM=OS_SOLARIS
|
PLATFORM=OS_SOLARIS
|
||||||
COMMON_FLAGS="$MEMCMP_FLAG -D_REENTRANT -DOS_SOLARIS"
|
COMMON_FLAGS="$MEMCMP_FLAG -D_REENTRANT -DOS_SOLARIS"
|
||||||
PLATFORM_LDFLAGS="-lpthread -lrt"
|
PLATFORM_LIBS="-lpthread -lrt"
|
||||||
PORT_FILE=port/port_posix.cc
|
PORT_FILE=port/port_posix.cc
|
||||||
;;
|
;;
|
||||||
FreeBSD)
|
FreeBSD)
|
||||||
PLATFORM=OS_FREEBSD
|
PLATFORM=OS_FREEBSD
|
||||||
COMMON_FLAGS="$MEMCMP_FLAG -D_REENTRANT -DOS_FREEBSD"
|
COMMON_FLAGS="$MEMCMP_FLAG -D_REENTRANT -DOS_FREEBSD"
|
||||||
PLATFORM_LDFLAGS="-lpthread"
|
PLATFORM_LIBS="-lpthread"
|
||||||
PORT_FILE=port/port_posix.cc
|
PORT_FILE=port/port_posix.cc
|
||||||
;;
|
;;
|
||||||
NetBSD)
|
NetBSD)
|
||||||
PLATFORM=OS_NETBSD
|
PLATFORM=OS_NETBSD
|
||||||
COMMON_FLAGS="$MEMCMP_FLAG -D_REENTRANT -DOS_NETBSD"
|
COMMON_FLAGS="$MEMCMP_FLAG -D_REENTRANT -DOS_NETBSD"
|
||||||
PLATFORM_LDFLAGS="-lpthread -lgcc_s"
|
PLATFORM_LIBS="-lpthread -lgcc_s"
|
||||||
PORT_FILE=port/port_posix.cc
|
PORT_FILE=port/port_posix.cc
|
||||||
;;
|
;;
|
||||||
OpenBSD)
|
OpenBSD)
|
||||||
@ -104,7 +109,7 @@ case "$TARGET_OS" in
|
|||||||
DragonFly)
|
DragonFly)
|
||||||
PLATFORM=OS_DRAGONFLYBSD
|
PLATFORM=OS_DRAGONFLYBSD
|
||||||
COMMON_FLAGS="$MEMCMP_FLAG -D_REENTRANT -DOS_DRAGONFLYBSD"
|
COMMON_FLAGS="$MEMCMP_FLAG -D_REENTRANT -DOS_DRAGONFLYBSD"
|
||||||
PLATFORM_LDFLAGS="-lpthread"
|
PLATFORM_LIBS="-lpthread"
|
||||||
PORT_FILE=port/port_posix.cc
|
PORT_FILE=port/port_posix.cc
|
||||||
;;
|
;;
|
||||||
OS_ANDROID_CROSSCOMPILE)
|
OS_ANDROID_CROSSCOMPILE)
|
||||||
@ -169,7 +174,7 @@ EOF
|
|||||||
EOF
|
EOF
|
||||||
if [ "$?" = 0 ]; then
|
if [ "$?" = 0 ]; then
|
||||||
COMMON_FLAGS="$COMMON_FLAGS -DSNAPPY"
|
COMMON_FLAGS="$COMMON_FLAGS -DSNAPPY"
|
||||||
PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -lsnappy"
|
PLATFORM_LIBS="$PLATFORM_LIBS -lsnappy"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Test whether tcmalloc is available
|
# Test whether tcmalloc is available
|
||||||
@ -177,7 +182,7 @@ EOF
|
|||||||
int main() {}
|
int main() {}
|
||||||
EOF
|
EOF
|
||||||
if [ "$?" = 0 ]; then
|
if [ "$?" = 0 ]; then
|
||||||
PLATFORM_LDFLAGS="$PLATFORM_LDFLAGS -ltcmalloc"
|
PLATFORM_LIBS="$PLATFORM_LIBS -ltcmalloc"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -188,6 +193,7 @@ echo "CC=$CC" >> $OUTPUT
|
|||||||
echo "CXX=$CXX" >> $OUTPUT
|
echo "CXX=$CXX" >> $OUTPUT
|
||||||
echo "PLATFORM=$PLATFORM" >> $OUTPUT
|
echo "PLATFORM=$PLATFORM" >> $OUTPUT
|
||||||
echo "PLATFORM_LDFLAGS=$PLATFORM_LDFLAGS" >> $OUTPUT
|
echo "PLATFORM_LDFLAGS=$PLATFORM_LDFLAGS" >> $OUTPUT
|
||||||
|
echo "PLATFORM_LIBS=$PLATFORM_LIBS" >> $OUTPUT
|
||||||
echo "PLATFORM_CCFLAGS=$PLATFORM_CCFLAGS" >> $OUTPUT
|
echo "PLATFORM_CCFLAGS=$PLATFORM_CCFLAGS" >> $OUTPUT
|
||||||
echo "PLATFORM_CXXFLAGS=$PLATFORM_CXXFLAGS" >> $OUTPUT
|
echo "PLATFORM_CXXFLAGS=$PLATFORM_CXXFLAGS" >> $OUTPUT
|
||||||
echo "PLATFORM_SHARED_CFLAGS=$PLATFORM_SHARED_CFLAGS" >> $OUTPUT
|
echo "PLATFORM_SHARED_CFLAGS=$PLATFORM_SHARED_CFLAGS" >> $OUTPUT
|
||||||
|
10
db/c.cc
10
db/c.cc
@ -24,6 +24,8 @@ using leveldb::Env;
|
|||||||
using leveldb::FileLock;
|
using leveldb::FileLock;
|
||||||
using leveldb::FilterPolicy;
|
using leveldb::FilterPolicy;
|
||||||
using leveldb::Iterator;
|
using leveldb::Iterator;
|
||||||
|
using leveldb::kMajorVersion;
|
||||||
|
using leveldb::kMinorVersion;
|
||||||
using leveldb::Logger;
|
using leveldb::Logger;
|
||||||
using leveldb::NewBloomFilterPolicy;
|
using leveldb::NewBloomFilterPolicy;
|
||||||
using leveldb::NewLRUCache;
|
using leveldb::NewLRUCache;
|
||||||
@ -582,4 +584,12 @@ void leveldb_free(void* ptr) {
|
|||||||
free(ptr);
|
free(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int leveldb_major_version() {
|
||||||
|
return kMajorVersion;
|
||||||
|
}
|
||||||
|
|
||||||
|
int leveldb_minor_version() {
|
||||||
|
return kMinorVersion;
|
||||||
|
}
|
||||||
|
|
||||||
} // end extern "C"
|
} // end extern "C"
|
||||||
|
@ -165,6 +165,9 @@ int main(int argc, char** argv) {
|
|||||||
char* err = NULL;
|
char* err = NULL;
|
||||||
int run = -1;
|
int run = -1;
|
||||||
|
|
||||||
|
CheckCondition(leveldb_major_version() >= 1);
|
||||||
|
CheckCondition(leveldb_minor_version() >= 1);
|
||||||
|
|
||||||
snprintf(dbname, sizeof(dbname),
|
snprintf(dbname, sizeof(dbname),
|
||||||
"%s/leveldb_c_test-%d",
|
"%s/leveldb_c_test-%d",
|
||||||
GetTempDir(),
|
GetTempDir(),
|
||||||
|
@ -420,7 +420,7 @@ The preceding code associates a
|
|||||||
based filtering policy with the database. Bloom filter based
|
based filtering policy with the database. Bloom filter based
|
||||||
filtering relies on keeping some number of bits of data in memory per
|
filtering relies on keeping some number of bits of data in memory per
|
||||||
key (in this case 10 bits per key since that is the argument we passed
|
key (in this case 10 bits per key since that is the argument we passed
|
||||||
to NewBloomFilter). This filter will reduce the number of unnecessary
|
to NewBloomFilterPolicy). This filter will reduce the number of unnecessary
|
||||||
disk reads needed for <code>Get()</code> calls by a factor of
|
disk reads needed for <code>Get()</code> calls by a factor of
|
||||||
approximately a 100. Increasing the bits per key will lead to a
|
approximately a 100. Increasing the bits per key will lead to a
|
||||||
larger reduction at the cost of more memory usage. We recommend that
|
larger reduction at the cost of more memory usage. We recommend that
|
||||||
@ -430,7 +430,7 @@ lot of random reads set a filter policy.
|
|||||||
If you are using a custom comparator, you should ensure that the filter
|
If you are using a custom comparator, you should ensure that the filter
|
||||||
policy you are using is compatible with your comparator. For example,
|
policy you are using is compatible with your comparator. For example,
|
||||||
consider a comparator that ignores trailing spaces when comparing keys.
|
consider a comparator that ignores trailing spaces when comparing keys.
|
||||||
<code>NewBloomFilter</code> must not be used with such a comparator.
|
<code>NewBloomFilterPolicy</code> must not be used with such a comparator.
|
||||||
Instead, the application should provide a custom filter policy that
|
Instead, the application should provide a custom filter policy that
|
||||||
also ignores trailing spaces. For example:
|
also ignores trailing spaces. For example:
|
||||||
<pre>
|
<pre>
|
||||||
@ -438,7 +438,7 @@ also ignores trailing spaces. For example:
|
|||||||
private:
|
private:
|
||||||
FilterPolicy* builtin_policy_;
|
FilterPolicy* builtin_policy_;
|
||||||
public:
|
public:
|
||||||
CustomFilterPolicy() : builtin_policy_(NewBloomFilter(10)) { }
|
CustomFilterPolicy() : builtin_policy_(NewBloomFilterPolicy(10)) { }
|
||||||
~CustomFilterPolicy() { delete builtin_policy_; }
|
~CustomFilterPolicy() { delete builtin_policy_; }
|
||||||
|
|
||||||
const char* Name() const { return "IgnoreTrailingSpacesFilter"; }
|
const char* Name() const { return "IgnoreTrailingSpacesFilter"; }
|
||||||
|
@ -4,8 +4,8 @@ exception is that the tail of the file may contain a partial block.
|
|||||||
Each block consists of a sequence of records:
|
Each block consists of a sequence of records:
|
||||||
block := record* trailer?
|
block := record* trailer?
|
||||||
record :=
|
record :=
|
||||||
checksum: uint32 // crc32c of type and data[]
|
checksum: uint32 // crc32c of type and data[] ; little-endian
|
||||||
length: uint16
|
length: uint16 // little-endian
|
||||||
type: uint8 // One of FULL, FIRST, MIDDLE, LAST
|
type: uint8 // One of FULL, FIRST, MIDDLE, LAST
|
||||||
data: uint8[length]
|
data: uint8[length]
|
||||||
|
|
||||||
|
@ -18,6 +18,8 @@ The file contains internal pointers. Each such pointer is called
|
|||||||
a BlockHandle and contains the following information:
|
a BlockHandle and contains the following information:
|
||||||
offset: varint64
|
offset: varint64
|
||||||
size: varint64
|
size: varint64
|
||||||
|
See https://developers.google.com/protocol-buffers/docs/encoding#varints
|
||||||
|
for an explanation of varint64 format.
|
||||||
|
|
||||||
(1) The sequence of key/value pairs in the file are stored in sorted
|
(1) The sequence of key/value pairs in the file are stored in sorted
|
||||||
order and partitioned into a sequence of data blocks. These blocks
|
order and partitioned into a sequence of data blocks. These blocks
|
||||||
@ -41,11 +43,11 @@ BlockHandle for the data block.
|
|||||||
|
|
||||||
(6) At the very end of the file is a fixed length footer that contains
|
(6) At the very end of the file is a fixed length footer that contains
|
||||||
the BlockHandle of the metaindex and index blocks as well as a magic number.
|
the BlockHandle of the metaindex and index blocks as well as a magic number.
|
||||||
metaindex_handle: char[p]; // Block handle for metaindex
|
metaindex_handle: char[p]; // Block handle for metaindex
|
||||||
index_handle: char[q]; // Block handle for index
|
index_handle: char[q]; // Block handle for index
|
||||||
padding: char[40-p-q]; // 0 bytes to make fixed length
|
padding: char[40-p-q]; // zeroed bytes to make fixed length
|
||||||
// (40==2*BlockHandle::kMaxEncodedLength)
|
// (40==2*BlockHandle::kMaxEncodedLength)
|
||||||
magic: fixed64; // == 0xdb4775248b80fb57
|
magic: fixed64; // == 0xdb4775248b80fb57 (little-endian)
|
||||||
|
|
||||||
"filter" Meta Block
|
"filter" Meta Block
|
||||||
-------------------
|
-------------------
|
||||||
|
@ -278,6 +278,12 @@ extern void leveldb_env_destroy(leveldb_env_t*);
|
|||||||
malloc()-ed memory returned by this library. */
|
malloc()-ed memory returned by this library. */
|
||||||
extern void leveldb_free(void* ptr);
|
extern void leveldb_free(void* ptr);
|
||||||
|
|
||||||
|
/* Return the major version number for this release. */
|
||||||
|
extern int leveldb_major_version();
|
||||||
|
|
||||||
|
/* Return the minor version number for this release. */
|
||||||
|
extern int leveldb_minor_version();
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* end extern "C" */
|
} /* end extern "C" */
|
||||||
#endif
|
#endif
|
||||||
|
@ -14,7 +14,7 @@ namespace leveldb {
|
|||||||
|
|
||||||
// Update Makefile if you change these
|
// Update Makefile if you change these
|
||||||
static const int kMajorVersion = 1;
|
static const int kMajorVersion = 1;
|
||||||
static const int kMinorVersion = 6;
|
static const int kMinorVersion = 7;
|
||||||
|
|
||||||
struct Options;
|
struct Options;
|
||||||
struct ReadOptions;
|
struct ReadOptions;
|
||||||
|
Loading…
Reference in New Issue
Block a user