TARGET   := ./program
CXXFLAGS := -Wall -g -D_REENTRANT -std=c++0x -nostartfiles -v
CXX      := g++
LIBS     := -lrt -lbcm2835
EXT      := cpp
BUILDDIR := build
 
override BUILDDIR := $(strip $(BUILDDIR))
subdirs  := $(wildcard */.)
subdirs  := $(wildcard LIB/*/)
SOURCES  := $(wildcard $(addsuffix *.cpp,$(subdirs)))
OBJECTS  := $(patsubst %.$(EXT), $(BUILDDIR)/%.o, $(SOURCES))
DEPS     := $(patsubst %.$(EXT), $(BUILDDIR)/%.dep, $(SOURCES))
 
.PHONY: all
all: $(TARGET)
 
$(TARGET): $(OBJECTS) $(DEPS)
	$(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJECTS) $(LIBS)
 
ifneq ($(MAKECMDGOALS), clean)
-include $(DEPS)
endif
 
$(OBJECTS): $(BUILDDIR)/%.o: %.$(EXT) $(BUILDDIR)/%.dep $(BUILDDIR)/.tag
	$(CXX) $(CXXFLAGS) -c $< -o $@
 
$(DEPS): $(BUILDDIR)/%.dep: %.$(EXT) $(BUILDDIR)/.tag
	mkdir -p $(dir $(@))
	$(CXX) $(CXXFLAGS) -MM $< -MT $@ -MT $(<:.$(EXT)=.o) -o $@
 
%.tag:
	mkdir -p $(dir $(@))
	touch $@
 
.PHONY: clean
clean:
	$(RM) -r $(BUILDDIR)


