From 8f486613be58ced269db1d437e560c16558604e8 Mon Sep 17 00:00:00 2001 From: becquet Date: Thu, 10 May 2007 18:49:20 +0000 Subject: Création de chuck, le programme du robot 2007. --- i/chuck/src/Makefile.defs | 112 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 i/chuck/src/Makefile.defs (limited to 'i/chuck/src/Makefile.defs') diff --git a/i/chuck/src/Makefile.defs b/i/chuck/src/Makefile.defs new file mode 100644 index 0000000..aa882b7 --- /dev/null +++ b/i/chuck/src/Makefile.defs @@ -0,0 +1,112 @@ +# Flags. +CXXFLAGS = -Wall -g +CPPFLAGS = -MMD $(INCLUDES) +INCLUDES = -I$(SRCDIR) -I. + +# Tests de coverage (man gcov). +ifeq ($(COV),) +CXXFLAGS += -O2 +else +CXXFLAGS += -fprofile-arcs -ftest-coverage +endif + +# Profiling (man gprof). +ifneq ($(PROF),) +CXXFLAGS += -pg +LDFLAGS += -pg +endif + +# Messages sur une ligne. +CXXFLAGS += -fmessage-length=0 + +SUBDIRS = utils utils/meta \ + parser \ + interpreter config tester \ + log serial timer \ + data scheduler \ + proto asserv es \ + motor socket ai + +# Répertoire où placer les objets. +OBJ_DIR := obj + + +# Utilise le compilateur C++ pour l'édition des liens. +LINK.o = $(CXX) $(LDFLAGS) $(TARGET_ARCH) +# Et les outils GNU pour lex et yacc. +LEX := flex +YACC := bison + +# Où trouver les sources, apdmc. +vpath %.cc $(SUBDIRS:%=$(SRCDIR)/%) $(EXTRA_SUBDIRS) +vpath %.ll $(SUBDIRS:%=$(SRCDIR)/%) $(EXTRA_SUBDIRS) +vpath %.yy $(SUBDIRS:%=$(SRCDIR)/%) $(EXTRA_SUBDIRS) + +# régle par défault. Le build-all permet de reporter à plus tard sa +# définition. +all: build-all + +# Inclus les autres répertoires. +include $(SUBDIRS:%=$(SRCDIR)/%/Makefile.defs) \ + $(EXTRA_SUBDIRS:%=%/Makefile.defs) + +OBJECTS := $(filter %.o,$(foreach PROGRAM,$(PROGRAMS),$($(PROGRAM)_OBJECTS))) +OBJECTS := $(OBJECTS:%.o=$(OBJ_DIR)/%.o) + +build-all: $(PROGRAMS) + +utest: $(UTESTS:%=%.utest) + +# Fabrique les règles pour créer les exécutables. +define PROGRAMS_template +$(1): $$($(1)_OBJECTS:%.o=$$(OBJ_DIR)/%.o) + $$(LINK.o) $$^ $$(LOADLIBES) $$(LDLIBS) -o $$@ +endef + +$(foreach prog,$(PROGRAMS),$(eval $(call PROGRAMS_template,$(prog)))) + +# Creation of utest rules +define UTESTS_template +ifndef $(1)_UTEST +$(1)_UTEST = PATH=$$(PATH):. $$^ +endif +$(1).utest: + @echo "$$($(1)_UTEST)"; \ + $$($(1)_UTEST); \ + RETVAL=$$$$?; \ + echo -n "$(1).utest: "; \ + if [ "$$$$RETVAL" -eq "0" ]; \ + then \ + echo "Succeed"; \ + else \ + echo "Failed"; \ + fi; \ + exit $$$$RETVAL +endef + +$(foreach utest,$(UTESTS),$(eval $(call UTESTS_template,$(utest)))) + +# Régles implicites. +%.cc: %.ll + $(LEX) $< + +%.cc: %.yy + $(YACC) -o $@ $< + +$(OBJ_DIR)/%.o: %.cc + @mkdir -p $(OBJ_DIR) + $(COMPILE.cc) $(OUTPUT_OPTION) $< + +# Dépendances. +-include $(OBJECTS:%.o=%.d) + +# Ménage. +clean: + rm -f $(OBJ_DIR)/*.o $(OBJ_DIR)/*.d $(PROGRAMS) + rm -f *.bbg *.bb *.da *.gcov + rm -f gmon.out + rm -f $(EXTRA_CLEAN) + rmdir --ignore-fail-on-non-empty $(OBJ_DIR) + +.PHONY: all build-all clean +.SUFFIXES: -- cgit v1.2.3