REPO_DIR=$(shell pwd)
INCLUDE_DIR=$(REPO_DIR)/include
SRC_DIR=$(REPO_DIR)/src
SUBMOD_DIR=$(REPO_DIR)/submodule
BUILD_DIR=$(REPO_DIR)/build


CXX=clang++
CXX_FLAGS=-g -std=c++14 \
          -I/usr/local/include \
          -I$(INCLUDE_DIR) \
          -I$(SUBMOD_DIR)/json/single_include
LD_FLAGS=-L/usr/local/lib \
         -lboost_system \
         -lboost_filesystem \
         -l:libexchange_server.a \
         -l:libomniDynamic4.a \
         -l:libCOSNotify4.a \
         -l:libCOS4.a \
         -l:libomniZIOP4.a \
         -l:libomniCodeSets4.a \
         -l:libomniORB4.a \
         -l:libomnithread.a \
         -lz \
         -lpthread


XSTEST_HDRS=$(INCLUDE_DIR)/test/Config.h $(INCLUDE_DIR)/test/Service.h $(INCLUDE_DIR)/test/Tester.h $(INCLUDE_DIR)/test/Expectation.h
XSTEST_SRCS=$(SRC_DIR)/xs-test.cc $(SRC_DIR)/test/Config.cc $(SRC_DIR)/test/Service.cc $(SRC_DIR)/test/Tester.cc $(SRC_DIR)/test/Expectation.cc
XSTEST_OBJS=$(subst $(REPO_DIR),$(BUILD_DIR),$(XSTEST_SRCS:.cc=.o))

GREETING_SRCS=$(REPO_DIR)/example/greeting.cc
GREETING_OBJS=$(subst $(REPO_DIR),$(BUILD_DIR),$(GREETING_SRCS:.cc=.o))

all: $(BUILD_DIR)/xs-test example

$(BUILD_DIR)/xs-test: $(XSTEST_OBJS)
	$(CXX) -o $@ $(XSTEST_OBJS) $(LD_FLAGS) 

$(BUILD_DIR)/%.o: $(REPO_DIR)/%.cc $(XSTEST_HDRS)
	mkdir -p $(dir $@)
	$(CXX) -o $@ -c $(CXX_FLAGS) $<

example: $(BUILD_DIR)/greeting

$(BUILD_DIR)/greeting: $(GREETING_OBJS)
	$(CXX) -o $@ $(GREETING_OBJS) $(LD_FLAGS) 

clean:
	rm -rf $(BUILD_DIR)/xs-test
	rm -rf $(BUILD_DIR)/greeting
	rm -rf $(XSTEST_OBJS)
	rm -rf $(GREETING_OBJS)