Packages
Eventually consistent durable KV store for Elixir with zero runtime dependencies. Data survives node restarts, node death, and network partitions. Direct member replication across Erlang nodes with delta sync.
Current section
Files
Jump to
Current section
Files
Makefile
PRIV_DIR = $(MIX_APP_PATH)/priv
OUTPUT = $(PRIV_DIR)/ekv_sqlite3_nif.so
ERL_INCLUDE = $(ERTS_INCLUDE_DIR)
SRC = c_src/ekv_sqlite3_nif.c c_src/sqlite3.c
CFLAGS += -O2 -fPIC -I$(ERL_INCLUDE) -Ic_src \
-DSQLITE_THREADSAFE=1 \
-DSQLITE_USE_URI=1 \
-DSQLITE_DQS=0 \
-DHAVE_USLEEP=1 \
-DSQLITE_ENABLE_STAT4=1 \
-DSQLITE_LIKE_DOESNT_MATCH_BLOBS=1 \
-DNDEBUG=1
# Cross-compilation: cc_precompiler sets CROSSCOMPILE prefix
ifdef CROSSCOMPILE
CC = $(CROSSCOMPILE)gcc
endif
# Platform-specific linker flags
# cc_precompiler sets TARGET_ABI; fall back to uname for native builds
ifndef TARGET_ABI
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Darwin)
TARGET_ABI = darwin
endif
endif
ifeq ($(TARGET_ABI),darwin)
LDFLAGS += -dynamiclib -undefined dynamic_lookup
else
LDFLAGS += -shared -lpthread -ldl -lm
endif
all: $(OUTPUT)
$(OUTPUT): $(SRC) Makefile
@mkdir -p $(PRIV_DIR)
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(SRC)
clean:
rm -f $(OUTPUT)
.PHONY: all clean