summaryrefslogtreecommitdiff
path: root/libs/libmdbx/src/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'libs/libmdbx/src/Makefile')
-rw-r--r--libs/libmdbx/src/Makefile75
1 files changed, 59 insertions, 16 deletions
diff --git a/libs/libmdbx/src/Makefile b/libs/libmdbx/src/Makefile
index 145b7fadcc..2d261bc7c3 100644
--- a/libs/libmdbx/src/Makefile
+++ b/libs/libmdbx/src/Makefile
@@ -1,4 +1,4 @@
-# GNU Makefile for libmdbx, https://github.com/leo-yuriev/libmdbx
+# GNU Makefile for libmdbx, https://abf.io/erthink/libmdbx
########################################################################
# Configuration. The compiler options must enable threaded compilation.
@@ -23,17 +23,18 @@ suffix ?=
CC ?= gcc
CXX ?= g++
+LD ?= ld
CFLAGS ?= -O2 -g3 -Wall -Werror -Wextra -ffunction-sections -fPIC -fvisibility=hidden
-XCFLAGS ?= -DNDEBUG=1 -DMDBX_DEBUG=0 -DLIBMDBX_EXPORTS=1
+XCFLAGS ?= -DNDEBUG=1 -DLIBMDBX_EXPORTS=1
CFLAGS += -D_GNU_SOURCE=1 -std=gnu11 -pthread $(XCFLAGS)
CXXFLAGS = -std=c++11 $(filter-out -std=gnu11,$(CFLAGS))
TESTDB ?= $(shell [ -d /dev/shm ] && echo /dev/shm || echo /tmp)/mdbx-test.db
TESTLOG ?= $(shell [ -d /dev/shm ] && echo /dev/shm || echo /tmp)/mdbx-test.log
# LY: '--no-as-needed,-lrt' for ability to built with modern glibc, but then run with the old
-LDFLAGS ?= -Wl,--gc-sections,-z,relro,-O,--no-as-needed,-lrt
-EXE_LDFLAGS ?= -pthread -lrt
+LDFLAGS ?= $(shell $(LD) --help 2>/dev/null | grep -q -- --gc-sections && echo '-Wl,--gc-sections,-z,relro,-O1')$(shell $(LD) --help 2>/dev/null | grep -q -- -dead_strip && echo '-Wl,-dead_strip')
+EXE_LDFLAGS ?= -pthread
# LY: just for benchmarking
IOARENA ?= $(shell \
@@ -44,16 +45,55 @@ NN ?= 25000000
########################################################################
+ifdef MSVC
+ UNAME := Windows
+ LCK_IMPL := windows
+ TEST_OSAL := windows
+ TEST_ITER := 42
+else
+ UNAME := $(shell uname -s 2>/dev/null || echo Unknown)
+ define uname2lck
+ case "$(UNAME)" in
+ Linux) echo linux;;
+ CYGWIN*|MINGW*|MSYS*|Windows*) echo windows;;
+ *) echo posix;;
+ esac
+ endef
+ define uname2osal
+ case "$(UNAME)" in
+ CYGWIN*|MINGW*|MSYS*|Windows*) echo windows;;
+ *) echo unix;;
+ esac
+ endef
+ define uname2titer
+ case "$(UNAME)" in
+ Darwin*|Mach*) echo 3;;
+ *) echo 42;;
+ esac
+ endef
+ define uname2suffix
+ case "$(UNAME)" in
+ Darwin*|Mach*) echo dylib;;
+ CYGWIN*|MINGW*|MSYS*|Windows*) echo dll;;
+ *) echo so;;
+ esac
+ endef
+ LCK_IMPL := $(shell $(uname2lck))
+ TEST_OSAL := $(shell $(uname2osal))
+ TEST_ITER := $(shell $(uname2titer))
+ SO_SUFFIX := $(shell $(uname2suffix))
+endif
+
HEADERS := mdbx.h
-LIBRARIES := libmdbx.a libmdbx.so
+LIBRARIES := libmdbx.a libmdbx.$(SO_SUFFIX)
TOOLS := mdbx_stat mdbx_copy mdbx_dump mdbx_load mdbx_chk
MANPAGES := mdbx_stat.1 mdbx_copy.1 mdbx_dump.1 mdbx_load.1
SHELL := /bin/bash
-CORE_SRC := $(filter-out src/lck-windows.c, $(wildcard src/*.c))
+CORE_SRC := src/lck-$(LCK_IMPL).c $(filter-out $(wildcard src/lck-*.c), $(wildcard src/*.c))
CORE_INC := $(wildcard src/*.h)
CORE_OBJ := $(patsubst %.c,%.o,$(CORE_SRC))
-TEST_SRC := $(filter-out test/osal-windows.cc, $(wildcard test/*.cc))
+TEST_SRC := test/osal-$(TEST_OSAL).cc $(filter-out $(wildcard test/osal-*.cc), $(wildcard test/*.cc))
TEST_INC := $(wildcard test/*.h)
TEST_OBJ := $(patsubst %.cc,%.o,$(TEST_SRC))
@@ -61,10 +101,10 @@ TEST_OBJ := $(patsubst %.cc,%.o,$(TEST_SRC))
all: $(LIBRARIES) $(TOOLS) mdbx_test example
-mdbx: libmdbx.a libmdbx.so
+mdbx: libmdbx.a libmdbx.$(SO_SUFFIX)
-example: mdbx.h tutorial/sample-mdbx.c libmdbx.so
- $(CC) $(CFLAGS) -I. tutorial/sample-mdbx.c ./libmdbx.so -o example
+example: mdbx.h tutorial/sample-mdbx.c libmdbx.$(SO_SUFFIX)
+ $(CC) $(CFLAGS) -I. tutorial/sample-mdbx.c ./libmdbx.$(SO_SUFFIX) -o example
tools: $(TOOLS)
@@ -82,16 +122,19 @@ clean:
rm -rf $(TOOLS) mdbx_test @* *.[ao] *.[ls]o *~ tmp.db/* *.gcov *.log *.err src/*.o test/*.o
check: all
- rm -f $(TESTDB) $(TESTLOG) && (set -o pipefail; ./mdbx_test --repeat=42 --pathname=$(TESTDB) --dont-cleanup-after basic | tee -a $(TESTLOG) | tail -n 42) \
+ rm -f $(TESTDB) $(TESTLOG) && (set -o pipefail; ./mdbx_test --repeat=$(TEST_ITER) --pathname=$(TESTDB) --dont-cleanup-after basic | tee -a $(TESTLOG) | tail -n 42) \
&& ./mdbx_chk -vvn $(TESTDB) && ./mdbx_chk -vvn $(TESTDB)-copy
check-singleprocess: all
- rm -f $(TESTDB) $(TESTLOG) && (set -o pipefail; ./mdbx_test --repeat=42 --pathname=$(TESTDB) --dont-cleanup-after --hill --copy | tee -a $(TESTLOG) | tail -n 42) \
+ rm -f $(TESTDB) $(TESTLOG) && (set -o pipefail; \
+ ./mdbx_test --repeat=4 --pathname=$(TESTDB) --dont-cleanup-after --hill && \
+ ./mdbx_test --repeat=2 --pathname=$(TESTDB) --dont-cleanup-before --dont-cleanup-after --copy \
+ | tee -a $(TESTLOG) | tail -n 42) \
&& ./mdbx_chk -vvn $(TESTDB) && ./mdbx_chk -vvn $(TESTDB)-copy
check-fault: all
rm -f $(TESTDB) $(TESTLOG) && (set -o pipefail; ./mdbx_test --pathname=$(TESTDB) --inject-writefault=42 --dump-config --dont-cleanup-after basic | tee -a $(TESTLOG) | tail -n 42) \
- && ./mdbx_chk -vvn $(TESTDB) && ./mdbx_chk -vvn $(TESTDB)-copy
+ ; ./mdbx_chk -vvnw $(TESTDB) && ([ ! -e $(TESTDB)-copy ] || ./mdbx_chk -vvn $(TESTDB)-copy)
define core-rule
$(patsubst %.c,%.o,$(1)): $(1) $(CORE_INC) mdbx.h Makefile
@@ -110,13 +153,13 @@ $(foreach file,$(TEST_SRC),$(eval $(call test-rule,$(file))))
libmdbx.a: $(CORE_OBJ)
$(AR) rs $@ $?
-libmdbx.so: $(CORE_OBJ)
+libmdbx.$(SO_SUFFIX): $(CORE_OBJ)
$(CC) $(CFLAGS) -save-temps $^ -pthread -shared $(LDFLAGS) -o $@
mdbx_%: src/tools/mdbx_%.c libmdbx.a
$(CC) $(CFLAGS) $^ $(EXE_LDFLAGS) -o $@
-mdbx_test: $(TEST_OBJ) libmdbx.so
+mdbx_test: $(TEST_OBJ) libmdbx.$(SO_SUFFIX)
$(CXX) $(CXXFLAGS) $(TEST_OBJ) -Wl,-rpath . -L . -l mdbx $(EXE_LDFLAGS) -o $@
###############################################################################
@@ -142,7 +185,7 @@ bench-$(1)_$(2).txt: $(3) $(IOARENA) Makefile
endef
-$(eval $(call bench-rule,mdbx,$(NN),libmdbx.so))
+$(eval $(call bench-rule,mdbx,$(NN),libmdbx.$(SO_SUFFIX)))
$(eval $(call bench-rule,sophia,$(NN)))
$(eval $(call bench-rule,leveldb,$(NN)))