#############################################################
# Makefile to build RESTBED in toolchain
#
#

TOPDIR=..
LIBNAME=restbed
HAS_ONLY_RELEASE_MODE_PRECOMPILED=1
REALTOP=$(shell readlink -f ..)
include $(TOPDIR)/Makefiles/Repo-defines.mk

ASIO_INCLUDE_PATH=/usr/include/asio
RESTBED_DIR_NAME=restbed-4.8
RESTBED_TARBALL=restbed-4.8.tar.gz

ifneq ($(RUNTIME), OL9)
OPENSSL_INCLUDE_PATH=/usr/include/openssl
OPENSSL_LIB_PATH=/usr/lib64
endif

RESTBED_SOVER=4.7

.PHONY: all links untar config build regen_precompiled clean distclean

all:
	$(MKDIR) $(PRECOMPILED_DIR)
	$(MAKE) untar
	$(MAKE) patch
	$(MAKE) config
	$(MAKE) build

untar:
	@echo "=== Untarring RESTBED"
	rm -rf $(RESTBED_DIR_NAME)
	mkdir -p $(PRECOMPILED_DIR) include
	tar -xvzf $(RESTBED_TARBALL) && \
		cd $(RESTBED_DIR_NAME)

patch:
	@echo "=== Applying Empirix patches to RESTBED"
	patch -p0 < ./patches/restbed.patch

config:
	@echo "=== Configuring RESTBED"
ifeq ($(RUNTIME), OL9)
	cd $(RESTBED_DIR_NAME) && \
		CC=$(TOOLBIN)/gcc CXX=$(TOOLBIN)/g++ AR=$(TOOLBIN)/ar RANLIB=$(TOOLBIN)/ranlib \
		CFLAGS="$(OPENSSL_FLAGS) $(EMPIRIX_LDFLAGS) $(EXTRA_CFLAGS)" \
		CPPFLAGS="$(OPENSSL_FLAGS) $(EMPIRIX_LDFLAGS) $(EXTRA_CFLAGS)" \
		CXXFLAGS="$(OPENSSL_FLAGS) $(EMPIRIX_LDFLAGS) $(EXTRA_CFLAGS)" \
		CMAKE_LIBRARY_PATH=$(OPENSSL_LIB_PATH) \
		cmake3 -DBUILD_TESTS=NO -DBUILD_SSL=ON .
else
	cd $(RESTBED_DIR_NAME) && \
		CC=$(TOOLBIN)/gcc CXX=$(TOOLBIN)/g++ AR=$(TOOLBIN)/ar RANLIB=$(TOOLBIN)/ranlib \
		CFLAGS="$(OPENSSL_FLAGS) $(EMPIRIX_LDFLAGS) $(EXTRA_CFLAGS)" \
		CPPFLAGS="$(OPENSSL_FLAGS) $(EMPIRIX_LDFLAGS) $(EXTRA_CFLAGS)" \
		CXXFLAGS="$(OPENSSL_FLAGS) $(EMPIRIX_LDFLAGS) $(EXTRA_CFLAGS)" \
		CMAKE_INCLUDE_PATH=$(OPENSSL_INCLUDE_PATH) \
		CMAKE_LIBRARY_PATH=$(OPENSSL_LIB_PATH) \
		cmake3 -DBUILD_TESTS=NO -DBUILD_SSL=ON .
endif

build:
	@echo "=== Building RESTBED"
	cd $(RESTBED_DIR_NAME) && \
		make -j$(NUM_PROCS) VERBOSE=1 && \
		make install
	cp -fv $(RESTBED_DIR_NAME)/distribution/library/librestbed.so.$(RESTBED_SOVER)      ./$(PRECOMPILED_DIR)
	cp -fvr $(RESTBED_DIR_NAME)/distribution/include/*                                  ./include
	@$(LIBLINKS) $(PRECOMPILED_DIR)/*.so.$(RESTBED_SOVER)


clean_build_intermediate_artifacts:
	rm -rf $(RESTBED_DIR_NAME) $(CPPRESTBED_DIR_NAME)


clean_build_outputs: clean
	rm -f $(PRECOMPILED_DIR)/*.so*
	rm -rf include/*

include $(TOPDIR)/Makefiles/ThirdPartyTargetHelpers.mk
