LPBASEDIR=/opt/replibit
LPINCDIR=$(LPBASEDIR)/include
LPLIBDIR=$(LPBASEDIR)/lib

CFLAGS=-O3 -pipe -D_GNU_SOURCE -I. -I$(LPINCDIR)
CFLAGS_DEBUG=-O0 -ggdb3 -pipe -DDEBUG -D_GNU_SOURCE -I. -I$(LPINCDIR)

CLIENT_CFLAGS=-DVT_CLIENT
CLIENT_LDFLAGS=-L$(LPLIBDIR) -lcurl -ljson-c
CLIENT_NAME=vaulttransferclient2
CLIENT_STATIC_LDFLAGS=-lz -lpthread -lssl -lcrypto -ldl -lz

SERVER_CFLAGS=-DVT_SERVER
SERVER_LDFLAGS=-L$(LPLIBDIR) -Wl,-rpath=$(LPLIBDIR) -lgcrypt -lgpg-error -lgnutls -lgmp -lhogweed -lidn -lgmp -lnettle -ltasn1 -lz -lpthread -lmicrohttpd
SERVER_NAME=vaulttransferserver2

COMMON_SRC=common/vt_log.c common/vt_subr.c
COMMON_OBJ=$(COMMON_SRC:%.c=%.o)

SERVER_SRC=server/main.c ${COMMON_SRC}
CLIENT_SRC=client/main.c ${COMMON_SRC}

SERVER_OBJ=$(SERVER_SRC:.c=.o)
CLIENT_OBJ=$(CLIENT_SRC:.c=.o)
DESTINATION_DIR=/dest

ALL_TGTS=${CLIENT_NAME} ${SERVER_NAME} ${CLIENT_NAME}-dbg ${SERVER_NAME}-dbg
CLEAN_TGTS=${ALL_TGTS}
CLEAN_OBJS=${SERVER_OBJ} ${CLIENT_OBJ} ${COMMON_OBJ}

all: ${COMMON_OBJ} ${CLIENT_NAME} ${SERVER_NAME}

debug: ${COMMON_OBJ} ${ALL_TGTS}

${SERVER_NAME}: server/main.c server/main.h ${COMMON_SRC} Makefile
	gcc ${CFLAGS} ${SERVER_CFLAGS} -o ${DESTINATION_DIR}/$@ $< ${COMMON_OBJ} -static ${SERVER_LDFLAGS} ${SERVER_LDFLAGS}

${CLIENT_NAME}: client/main.c client/main.h ${COMMON_SRC} Makefile
	gcc ${CFLAGS} ${CLIENT_CFLAGS} -o ${DESTINATION_DIR}/$@ $< ${COMMON_OBJ} ${CLIENT_LDFLAGS}

${SERVER_NAME}-dbg: server/main.c server/main.h ${COMMON_SRC} Makefile
	gcc ${CFLAGS_DEBUG} ${SERVER_CFLAGS} -o ${DESTINATION_DIR}/$@ $< ${COMMON_OBJ} -static ${SERVER_LDFLAGS} ${SERVER_LDFLAGS}

${CLIENT_NAME}-dbg: client/main.c client/main.h ${COMMON_SRC} Makefile
	gcc ${CFLAGS_DEBUG} ${CLIENT_CFLAGS} -o ${DESTINATION_DIR}/$@ $< ${COMMON_OBJ} ${CLIENT_LDFLAGS}


.PHONY: clean

clean:
	@rm -rf ${CLEAN_OBJS} && cd ${DESTINATION_DIR} && rm -rf ${CLEAN_TGTS}