diff options
Diffstat (limited to 'libs/libmdbx/src/Makefile')
-rw-r--r-- | libs/libmdbx/src/Makefile | 75 |
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))) |