summaryrefslogtreecommitdiff
path: root/i/chuck/src/Makefile.defs
diff options
context:
space:
mode:
Diffstat (limited to 'i/chuck/src/Makefile.defs')
-rw-r--r--i/chuck/src/Makefile.defs112
1 files changed, 112 insertions, 0 deletions
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: