Packages
rocksdb
0.14.0
3.1.1
3.1.0
3.0.0
2.6.2
2.6.1
retired
2.6.0
retired
2.5.0
2.4.1
2.4.0
2.3.0
2.2.0
2.1.0
2.0.0
1.9.0
1.8.0
1.7.0
1.6.0
1.5.1
1.5.0
1.4.0
1.3.2
1.3.1
1.3.0
1.2.0
1.1.1
1.1.0
1.0.0
0.26.2
0.26.1
0.26.0
0.25.0
0.24.0
0.23.3
0.23.2
0.23.1
0.23.0
0.22.0
0.21.0
0.20.1
0.20.0
0.19.0
0.18.0
0.17.0
0.16.0
0.15.0
0.14.0
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.1
0.7.0
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
RocksDB for Erlang
Current section
Files
Jump to
Current section
Files
c_src/Makefile
# Based on c_src.mk from erlang.mk by Loic Hoguin <essen@ninenines.eu>
.PHONY: clean deps help
CURDIR := $(shell pwd)
BASEDIR := $(abspath $(CURDIR)/..)
PROJECT := rocksdb
ERTS_INCLUDE_DIR ?= $(shell erl -noshell -s init stop -eval "io:format(\"~s/erts-~s/include/\", [code:root_dir(), erlang:system_info(version)]).")
ERL_INTERFACE_INCLUDE_DIR ?= $(shell erl -noshell -s init stop -eval "io:format(\"~s\", [code:lib_dir(erl_interface, include)]).")
ERL_INTERFACE_LIB_DIR ?= $(shell erl -noshell -s init stop -eval "io:format(\"~s\", [code:lib_dir(erl_interface, lib)]).")
C_SRC_DIR = $(CURDIR)
C_SRC_OUTPUT ?= $(CURDIR)/../priv/$(PROJECT).so
# System type and C compiler/flags.
UNAME_SYS := $(shell uname -s)
ifeq ($(UNAME_SYS), Darwin)
CC ?= cc
CFLAGS ?= -O3 -std=c99 -arch x86_64 -Wall -Wmissing-prototypes
CXXFLAGS ?= -O3 -arch x86_64 -Wall
LDFLAGS ?= -arch x86_64 -flat_namespace -undefined suppress
else ifeq ($(UNAME_SYS), FreeBSD)
CC = clang
CXX = clang++
CFLAGS ?= -O3 -std=c99 -Wall -Wmissing-prototypes
CFLAGS += -D_GCLIBCXX_USE_C99
CXXFLAGS ?= -O3 -Wall
CXXFLAGS += -std=c++11 -stdlib=libc++ -D_GCLIBCXX_USE_C99
else ifeq ($(UNAME_SYS), OpenBSD)
CC = egcc
CXX = eg++
CFLAGS ?= -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes
CFLAGS += -D_GCLIBCXX_USE_C99
CXXFLAGS ?= -O3 -Wall
CXXFLAGS += -std=c++11 -pthread -finline-functions -D_GCLIBCXX_USE_C99
else ifeq ($(UNAME_SYS), DragonFly)
CC = c++48
CXX = c++48
CFLAGS ?= -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes
CFLAGS += -D_GCLIBCXX_USE_C99
CXXFLAGS ?= -O3 -finline-functions -Wall
CXXFLAGS += -D_GCLIBCXX_USE_C99
else ifeq ($(UNAME_SYS), NetBSD)
CC = c++48
CXX = c++48
CFLAGS ?= -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes
CFLAGS += -D_GCLIBCXX_USE_C99
CXXFLAGS ?= -O3 -finline-functions -Wall
CXXFLAGS += -D_GCLIBCXX_USE_C99
else ifeq ($(UNAME_SYS), SunOS)
ifeq ($(shell uname -v | sed 's/_.*$$//'), joyent)
CC = gcc
CXX = g++
else
CC = c++48
CXX = c++48
endif
CFLAGS ?= -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes
CFLAGS += -D_GCLIBCXX_USE_C99
CXXFLAGS ?= -O3 -finline-functions -Wall
CXXFLAGS += -D_GCLIBCXX_USE_C99
else ifeq ($(UNAME_SYS), Linux)
CC ?= gcc
CFLAGS ?= -O3 -std=c99 -finline-functions -Wall -Wmissing-prototypes
CXXFLAGS ?= -O3 -finline-functions -Wall
endif
ROCKSDBLIBS = rocksdb/librocksdb.a system/lib/libsnappy.a
ROCKSDB_PLATFORM_LDFLAGS=$(shell cat rocksdb/make_config.mk | grep PLATFORM_LDFLAGS | cut -d' ' -f2- | sed -e 's/-lsnappy//')
CFLAGS += -g -fPIC -I $(ERTS_INCLUDE_DIR) -I $(ERL_INTERFACE_INCLUDE_DIR) -I rocksdb/include
CXXFLAGS += -g -fPIC -I $(ERTS_INCLUDE_DIR) -I $(ERL_INTERFACE_INCLUDE_DIR) -I rocksdb/include -std=c++11
LDLIBS += -L $(ERL_INTERFACE_LIB_DIR) -lerl_interface -lei
ifeq ($(UNAME_SYS), OpenBSD)
LDLIBS += -lestdc++
else
LDLIBS += -lstdc++
endif
LDLIBS += $(ROCKSDBLIBS)
LDFLAGS += -shared $(ROCKSDB_PLATFORM_LDFLAGS)
# Verbosity.
c_verbose_0 = @echo " C " $(?F);
c_verbose = $(c_verbose_$(V))
cpp_verbose_0 = @echo " CPP " $(?F);
cpp_verbose = $(cpp_verbose_$(V))
link_verbose_0 = @echo " LD " $(@F);
link_verbose = $(link_verbose_$(V))
SOURCES := $(shell find $(C_SRC_DIR) -maxdepth 1 -type f \( -name "*.c" -o -name "*.C" -o -name "*.cc" -o -name "*.cpp" \))
OBJECTS = $(addsuffix .o, $(basename $(SOURCES)))
COMPILE_C = $(c_verbose) $(CC) $(CFLAGS) $(CPPFLAGS) -c
COMPILE_CPP = $(cpp_verbose) $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c
help: ## This documentation
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
all: $(C_SRC_OUTPUT) ## Build all
$(C_SRC_OUTPUT): $(ROCKSDBLIBS) $(OBJECTS)
@mkdir -p $(BASEDIR)/priv/
$(link_verbose) $(CC) $(OBJECTS) $(LDLIBS) $(LDFLAGS) -o $(C_SRC_OUTPUT)
%.o: %.c rocksdb
$(COMPILE_C) $(OUTPUT_OPTION) $<
%.o: %.cc
$(COMPILE_CPP) $(OUTPUT_OPTION) $<
%.o: %.C
$(COMPILE_CPP) $(OUTPUT_OPTION) $<
%.o: %.cpp
$(COMPILE_CPP) $(OUTPUT_OPTION) $<
$(ROCKSDBLIBS): deps
deps: ## Build deps for rocksdb
ifdef BIN_ROCKSDB
if [ ! -d rocksdb ]; then \
tar -xzf $(BIN_ROCKSDB);\
fi
else
./build_deps.sh
endif
clean: ## Clean all files
./build_deps.sh clean
@rm -f $(C_SRC_OUTPUT) $(OBJECTS)
tar: all ## Creates a tar.gz file containing a pre-build rocksdb library (with src)
set -e ;\
TAG=$$(git describe --tags) ;\
TAR_FILE=rocksdb-e-$$TAG.tar.gz ;\
tar -cvzf $$TAR_FILE rocksdb/* system/*;\
echo "";\
echo "Created tar archive $$TAR_FILE";\
echo 'Reuse with BIN_ROCKSDB variable:';\
echo '$ BIN_ROCKSDB=<path to tar> rebar3 compile';\
echo '$ BIN_ROCKSDB=http://<url to tar> rebar3 compile';\