summaryrefslogtreecommitdiff
path: root/i/chuck/src/Makefile.defs
blob: aa882b7983921db68b319ccbd9757f77b57a30f2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
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: