OS_NAME ?= $(shell uname)
VPATH = AdsLib
LIBS = -lpthread
LIB_NAME = AdsLib-$(OS_NAME).a
SHARED_LIB_NAME = adslib.so
INSTALL_DIR=/usr/lib/
CXX :=$(CROSS_COMPILE)$(CXX)
CFLAGS += -std=c++11
CFLAGS += -pedantic
CFLAGS += -Wall
CFLAGS += -fPIC

SRC_DIR := AdsLib/
OBJ_DIR := obj/

# Automatically collect all .cpp files
CPP_FILES := $(wildcard $(SRC_DIR)*.cpp)
# Create list of corresponding .obj outputs
OBJ_FILES := $(addprefix $(OBJ_DIR),$(notdir $(CPP_FILES:.cpp=.o)))


LDFLAGS += -lpthread
LDFLAGS_Darwin += -lc++
LDFLAGS_win32 += -lws2_32
LDFLAGS += $(LDFLAGS_$(OS_NAME))

all: $(SHARED_LIB_NAME)

$(OBJ_FILES): $(OBJ_DIR)%.o: %.cpp
	mkdir -p $(OBJ_DIR)
	$(CXX) -c $(CFLAGS) $< -o $@ -I AdsLib/

$(SHARED_LIB_NAME): $(OBJ_FILES)
	$(CXX) -shared -fPIC -o $(SHARED_LIB_NAME) $?

AdsLibTest.bin: AdsLibTest/main.o $(LIB_NAME)
	$(CXX) $^ $(LIBS) -o $@

test: AdsLibTest.bin
	./$<

install: $(SHARED_LIB_NAME)
	cp $? $(INSTALL_DIR)$(SHARED_LIB_NAME)
	sudo chmod 755 $(INSTALL_DIR)$(SHARED_LIB_NAME)

clean:
	rm -f *.a *.o *.bin AdsLibTest/*.o $(OBJ_DIR)*.o *.so

uncrustify:
	uncrustify --no-backup -c tools/uncrustify.cfg AdsLib*/*.h AdsLib*/*.cpp example/*.cpp

prepare-hooks:
	rm -f .git/hooks/pre-commit
	ln -Fv tools/pre-commit.uncrustify .git/hooks/pre-commit
	chmod a+x .git/hooks/pre-commit

.PHONY: clean uncrustify prepare-hooks
