CC            = gcc
CXX           = g++
LIBS          = -L/usr/local/lib/bCAPServer -lbCAPServer -pthread
INCS          = -I./ -IInclude/ -IInclude/bCAPServer

BUILDDIR      = Build
CSRCS         = bcm2835.c
CPPSRCS       = BCap.cpp GPIOController.cpp

COBJS         = $(addprefix $(BUILDDIR)/,$(patsubst %.c,%.o,$(CSRCS)))
CPPOBJS       = $(addprefix $(BUILDDIR)/,$(patsubst %.cpp,%.o,$(CPPSRCS)))
PROGRAM       = GPIOController
DEPENDFILE    = depend.inc
OPTS          = -Wall -c -g

.PHONY: all
all:            depend $(PROGRAM)

$(PROGRAM):     $(BUILDDIR) $(COBJS) $(CPPOBJS)
	$(CXX) $(COBJS) $(CPPOBJS) $(LIBS) -o $(BUILDDIR)/$(PROGRAM) 

$(BUILDDIR):
	mkdir -p $(BUILDDIR)

$(BUILDDIR)/%.o: %.c $(BUILDDIR)
	$(CC) $(OPTS) -o $@ $<

$(BUILDDIR)/%.o: %.cpp $(BUILDDIR)
	$(CXX) $(OPTS) -std=c++11 -o $@ $<

.PHONY: clean
clean:
	rm -rf $(BUILDDIR) 

.PHONY: install
install:
	cp $(BUILDDIR)/$(PROGRAM) /usr/local/sbin/

.PHONY: depend
depend: $(CSRCS) $(CPPSRCS)
	-@ $(RM) depend.inc
	-@ for i in $^; do\
		$(CXX) -std=c++11 -MM $$i | sed "s/\ [_a-zA-Z0-9][_a-zA-Z0-9]*\.cpp//g" | sed "s/\ [_a-zA-Z0-9][_a-zA-Z0-9]*\.c//g" >> $(DEPENDFILE);\
	done

-include $(DEPENDFILE)
