# ---------------------------------------------------------------------------- #
## \file ccpp.mk
## \author Sebastien Beaugrand
## \sa http://beaugrand.chez.com/
## \copyright CeCILL 2.1 Free Software license
# ---------------------------------------------------------------------------- #
TARDEPEND  += makefiles/ccpp.mk
WARNINGS   ?= -Wall -Wextra -O1 -D_FORTIFY_SOURCE=2 -Wfatal-errors
CFLAGS     += $(WARNINGS)
CXXFLAGS   += $(WARNINGS)
COBJECTS   ?= $(patsubst %.c,%.o,$(wildcard *.c))
CXXOBJECTS ?= $(patsubst %.cpp,%.o,$(wildcard *.cpp))
COBJECTS   := $(addprefix build/,$(COBJECTS))
CXXOBJECTS := $(addprefix build/,$(CXXOBJECTS))
CDEP        = $(patsubst %.o,%.d,$(COBJECTS))
CXXDEP      = $(patsubst %.o,%.d,$(CXXOBJECTS))
ifeq ($(OBJECTS),)
 OBJECTS = $(COBJECTS) $(CXXOBJECTS)
else
 OBJECTS := $(subst build//,/,$(addprefix build/,$(OBJECTS)))
endif
TARGETS += "| clean | mrproper | cppcheck | dep"

.SUFFIXES:

build:
	@mkdir $@

build/%.o: %.c
	$(COMPILE.c) $(OUTPUT_OPTION) $<

build/%.o: %.cpp
	$(COMPILE.cpp) $(OUTPUT_OPTION) $<

/%.o: /%.c
	$(COMPILE.c) $(OUTPUT_OPTION) $<

/%.o: /%.cpp
	$(COMPILE.cpp) $(OUTPUT_OPTION) $<

.PHONY: clean
clean:
	@$(RM) build/*.o build/*.d build/*.elf *~

.PHONY: mrproper
mrproper: clean
	@$(RM) -r build/

.PHONY: cppcheck
cppcheck:
	@eval cppcheck -q --enable=all\
	 `test -f cppcheck.supp && echo --suppressions-list=cppcheck.supp`\
	 --template='{id}:{file}:{line}\ \({severity}\)\ {message}'\
	 -i build -i build-*\
	 $(CPPCHECKINC) .

.PHONY: dep
dep:
	@for f in $(patsubst %.c,%,$(wildcard *.c)); do \
		$(CC) $(CFLAGS) -MM -MF build/$$f.d -MT build/$$f.o $$f.c; \
		cat build/$$f.d; \
	done
	@for f in $(patsubst %.cpp,%,$(wildcard *.cpp)); do \
		$(CXX) $(CXXFLAGS) -MM -MF build/$$f.d -MT build/$$f.o $$f.cpp; \
		cat build/$$f.d; \
	done

-include $(CDEP) $(CXXDEP)

ifeq ($(OBJECTS_NDEP_MAKEFILE_LIST),)
$(OBJECTS): $(MAKEFILE_LIST)
endif