-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmakefile
179 lines (130 loc) · 4.7 KB
/
makefile
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
######## AVR Project Makefile ########
##### #####
##### Makefile produit et ecrit par #####
##### Simon Barrette & Jerome Collin pour #####
##### INF1995 - 2016 #####
##### #####
##### Inspire de Pat Deegan - #####
##### Psychogenic Inc (www.psychogenic.com) #####
##################################################
# Ce Makefile vous permet de compiler des projets
# pour les microcontroleurs Atmel AVR sur
# Linux ou Unix, en utilisant l'outil AVR-GCC.
# Ce Makefile supporte C & C++
##### Details specifique a la cible #####
##### Vous devez les adapter a votre projet #####
# Nom du microcontroleur cible
# (exemple: 'at90s8515')
MCU=atmega324pa
# Nom de votre projet
# (utilisez un seul mot, exemple: 'monprojet')
PROJECTNAME=test
# Fichiers sources
# (Listez tous les fichiers a compiler, ex: 'tp1.c, tp2.cpp'):
# Utilisez le suffixe .cpp pour les fichiers C++
PRJSRC= codeC.cpp
# Inclusions additionnels (ex: -I/path/to/mydir)
INC=
# Libraires a lier (ex: -lmylib)
LIBS=
# Niveau d'optimization
# Utilisez s (size opt), 1, 2, 3 ou 0 (off)
OPTLEVEL=s
# Programmer ID - Ne pas changer
# Liste complete des IDs disponible avec avrdude
AVRDUDE_PROGRAMMERID=usbasp
####################################################
##### Configuration terminee #####
##### #####
##### Le reste de cette section contient les #####
##### details d'implementation vous permettant #####
##### de mieux comprendre le fonctionnement de #####
##### ce Makefile en vue de sa modification #####
####################################################
####### variables #######
#compilateur utilise
CC=avr-gcc
#pour copier le contenu d'un fichier objet vers un autre
OBJCOPY=avr-objcopy
#pour permettre le transfert vers le microcontroleur
AVRDUDE=avrdude
#pour supprimer les fichiers lorsque l'on appel make clean
REMOVE=rm -f
# HEXFORMAT -- format pour les fichiers produient .hex
HEXFORMAT=ihex
####### Options de compilation #######
# Flags pour le compilateur en C
CFLAGS=-I. -MMD $(INC) -g -mmcu=$(MCU) -O$(OPTLEVEL) \
-fpack-struct -fshort-enums \
-funsigned-bitfields -funsigned-char \
-Wall
# Flags pour le compilateur en C++
CXXFLAGS=-fno-exceptions
# Linker pour lier les librairies utilisees
LDFLAGS=-Wl,-Map,$(TRG).map -mmcu=$(MCU)
####### Cible (Target) #######
#Nom des cibles par defaut
TRG=$(PROJECTNAME).out
HEXROMTRG=$(PROJECTNAME).hex
HEXTRG=$(HEXROMTRG) $(PROJECTNAME).ee.hex
####### Definition de tout les fichiers objets #######
# Cette fonction permet de differencier les fichiers .c
# des fichiers .cpp
# Fichier C
CFILES=$(filter %.c, $(PRJSRC))
# Fichier C++
CPPFILES=$(filter %.cpp, $(PRJSRC))
# Liste de tout les fichiers objet que nous devons creer
OBJDEPS=$(CFILES:.c=.o) \
$(CPPFILES:.cpp=.o)
# Pour plus d'information sur cette section, consulter :
# http://bit.ly/257R53E
# Les fonctions $(filter pattern…,text) &
# $(patsubst pattern,replacement,text) sont pertinentes
####### Creation des commandes du Makefile #######
# Creation des cibles Phony (Phony Target)
# En plus de la commande make qui permet de compiler
# votre projet, vous pouvez utilisez les commandes
# make all, make install et make clean
.PHONY: all install clean
# Make all permet simplement de compiler le projet
#
all: $(TRG)
# Implementation de la cible
$(TRG): $(OBJDEPS)
$(CC) $(LDFLAGS) -o $(TRG) $(OBJDEPS) \
-lm $(LIBS)
# Production des fichiers object
# De C a objet
%.o: %.c
$(CC) $(CFLAGS) -c $<
# De C++ a objet
%.o: %.cpp
$(CC) $(CFLAGS) $(CXXFLAGS) -c $<
# Verification des dependances (header dependencies)
-include *.d
# Pour plus d'information sur cette section, consulter:
# http://bit.ly/2580FU8
# Production des fichiers hex a partir des fichiers elf
%.hex: %.out
$(OBJCOPY) -j .text -j .data \
-O $(HEXFORMAT) $< $@
# Make install permet de compiler le projet puis
# d'ecrire le programme en memoire flash dans votre
# microcontroleur. Celui-ci doit etre branche par cable USB
install: $(HEXROMTRG)
$(AVRDUDE) -c $(AVRDUDE_PROGRAMMERID) \
-p $(MCU) -P -e -U flash:w:$(HEXROMTRG)
# Make clean permet d'effacer tout les fichiers generes
# lors de la compilation
clean:
$(REMOVE) $(TRG) $(TRG).map $(OBJDEPS) $(HEXTRG) *.d
# Pour plus d'information sur les phony target, consulter:
# http://bit.ly/1WBQe61
# De plus, pour mieux comprendre les makefiles et
# leur fonctionnement, consulter la documentation de GNU Make:
# http://bit.ly/23Vpk8s
# Finalement, ce tutoriel en ligne constitut une bonne
# introduction au Makefile:
# http://bit.ly/1XvxsN3
##### EOF #####