|
|
|
OUT=webdis
|
|
|
|
HIREDIS_OBJ?=src/hiredis/hiredis.o src/hiredis/sds.o src/hiredis/net.o src/hiredis/async.o src/hiredis/read.o src/hiredis/dict.o
|
|
|
|
JANSSON_OBJ?=src/jansson/src/dump.o src/jansson/src/error.o src/jansson/src/hashtable.o src/jansson/src/load.o src/jansson/src/strbuffer.o src/jansson/src/utf.o src/jansson/src/value.o src/jansson/src/variadic.o
|
|
|
|
B64_OBJS?=src/b64/cencode.o
|
|
|
|
FORMAT_OBJS?=src/formats/json.o src/formats/raw.o src/formats/common.o src/formats/custom-type.o
|
|
|
|
HTTP_PARSER_OBJS?=src/http-parser/http_parser.o
|
|
|
|
|
|
|
|
CFLAGS ?= -Wall -Wextra -Isrc -Isrc/jansson/src -Isrc/http-parser -MD
|
|
|
|
LDFLAGS ?= -levent -pthread
|
|
|
|
|
|
|
|
# Pass preprocessor macros to the compile invocation
|
|
|
|
CFLAGS += $(CPPFLAGS)
|
|
|
|
|
|
|
|
# check for MessagePack
|
|
|
|
MSGPACK_LIB=$(shell ls /usr/lib/libmsgpack.so 2>/dev/null)
|
|
|
|
ifneq ($(strip $(MSGPACK_LIB)),)
|
|
|
|
FORMAT_OBJS += src/formats/msgpack.o
|
|
|
|
CFLAGS += -DMSGPACK=1
|
|
|
|
LDFLAGS += -lmsgpack
|
|
|
|
else
|
|
|
|
# check for MessagePackC
|
|
|
|
MSGPACKC_LIB=$(shell ls /usr/lib/libmsgpackc.so 2>/dev/null)
|
|
|
|
ifneq ($(strip $(MSGPACKC_LIB)),)
|
|
|
|
FORMAT_OBJS += src/formats/msgpack.o
|
|
|
|
CFLAGS += -DMSGPACK=1
|
|
|
|
LDFLAGS += -lmsgpackc
|
|
|
|
else
|
|
|
|
# check for MessagePack on macOS
|
|
|
|
MSGPACK_OSX_LIB=$(shell ls /usr/local/lib/libmsgpackc.dylib 2>/dev/null)
|
|
|
|
ifneq ($(strip $(MSGPACK_OSX_LIB)),)
|
|
|
|
FORMAT_OBJS += src/formats/msgpack.o
|
|
|
|
CFLAGS += -DMSGPACK=1
|
|
|
|
LDFLAGS += -lmsgpackc
|
|
|
|
else
|
|
|
|
# check for MessagePackC using ld (returns 1 in both cases on macOS)
|
|
|
|
MSGPACKC_LD=$(shell ld -lmsgpackc >/dev/null 2>/dev/null; echo $$?)
|
|
|
|
ifeq ($(strip $(MSGPACKC_LD)),0)
|
|
|
|
FORMAT_OBJS += src/formats/msgpack.o
|
|
|
|
CFLAGS += -DMSGPACK=1
|
|
|
|
LDFLAGS += -lmsgpackc
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
# if `make` is run with DEBUG=1, include debug symbols
|
|
|
|
DEBUG_FLAGS=
|
|
|
|
ifeq ($(DEBUG),1)
|
|
|
|
DEBUG_FLAGS += -O0
|
|
|
|
ifeq ($(shell cc -v 2>&1 | grep -cw 'gcc version'),1) # GCC used: add GDB debugging symbols
|
|
|
|
DEBUG_FLAGS += -ggdb3
|
|
|
|
else ifeq ($(shell gcc -v 2>&1 | grep -cw 'clang version'),1) # Clang used: add LLDB debugging symbols
|
|
|
|
DEBUG_FLAGS += -g3 -glldb
|
|
|
|
endif
|
|
|
|
else
|
|
|
|
DEBUG_FLAGS += -O3
|
|
|
|
endif
|
|
|
|
|
|
|
|
CFLAGS += $(DEBUG_FLAGS)
|
|
|
|
|
|
|
|
OBJS_DEPS=$(wildcard *.d)
|
|
|
|
DEPS=$(FORMAT_OBJS) $(HIREDIS_OBJ) $(JANSSON_OBJ) $(HTTP_PARSER_OBJS) $(B64_OBJS)
|
|
|
|
OBJS=src/webdis.o src/cmd.o src/worker.o src/slog.o src/server.o src/acl.o src/md5/md5.o src/sha1/sha1.o src/http.o src/client.o src/websocket.o src/pool.o src/conf.o $(DEPS)
|
|
|
|
|
|
|
|
|
|
|
|
PREFIX ?= /usr/local
|
|
|
|
CONFDIR ?= $(DESTDIR)/etc
|
|
|
|
SELF_DIR:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
|
|
|
|
|
|
|
|
INSTALL_DIRS = $(DESTDIR)$(PREFIX) \
|
|
|
|
$(DESTDIR)$(PREFIX)/bin \
|
|
|
|
$(CONFDIR)
|
|
|
|
|
|
|
|
all: $(OUT) Makefile
|
|
|
|
|
|
|
|
$(OUT): $(OBJS) Makefile
|
|
|
|
$(CC) -o $(OUT) $(OBJS) $(LDFLAGS)
|
|
|
|
|
|
|
|
%.o: %.c %.h Makefile
|
|
|
|
$(CC) -c $(CFLAGS) -o $@ $<
|
|
|
|
|
|
|
|
%.o: %.c Makefile
|
|
|
|
$(CC) -c $(CFLAGS) -o $@ $<
|
|
|
|
|
|
|
|
$(INSTALL_DIRS):
|
|
|
|
mkdir -p $@
|
|
|
|
|
|
|
|
clean:
|
|
|
|
rm -f $(OBJS) $(OUT) $(OBJS_DEPS)
|
|
|
|
find "$(SELF_DIR)" -name '*.d' -delete
|
|
|
|
|
|
|
|
install: $(OUT) $(INSTALL_DIRS)
|
|
|
|
cp $(OUT) $(DESTDIR)$(PREFIX)/bin
|
|
|
|
cp webdis.prod.json $(CONFDIR)
|
|
|
|
|
|
|
|
|
|
|
|
WEBDIS_PORT ?= 7379
|
|
|
|
|
|
|
|
test_all: test perftest
|
|
|
|
|
|
|
|
test:
|
|
|
|
python3 tests/basic.py
|
|
|
|
python3 tests/limits.py
|
|
|
|
./tests/pubsub -p $(WEBDIS_PORT)
|
|
|
|
|
|
|
|
perftest:
|
|
|
|
# This is a performance test that requires apache2-utils and curl
|
|
|
|
./tests/bench.sh
|
|
|
|
|
|
|
|
-include $(OBJS:.o=.d)
|