Fix camcount to work with caffeine proxitude
[7seg/.git] / Makefile
1 # Makefile copied from WinAVR Sample makefile written by Eric B. Weddington, J�rg Wunsch, et al.
2 # Released to the Public Domain
3 #
4 # On command line:
5 #
6 # make all = Make software.
7 # make clean = Clean out built project files.
8 # make coff = Convert ELF to AVR COFF (for use with AVR Studio 3.x or VMLAB).
9 # make extcoff = Convert ELF to AVR Extended COFF (for use with AVR Studio
10 #                4.07 or greater).
11 # make program = Download the hex file to the device, using avrdude.  Please
12 #                customize the avrdude settings below first!
13 # make filename.s = Just compile filename.c into the assembler code only
14
15 # MCU name
16 MCU = atmega48
17
18 # Processor frequency.
19 #     This will define a symbol, F_CPU, in all source code files equal to the 
20 #     processor frequency. You can then use this symbol in your source code to 
21 #     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
22 #     automatically to create a 32-bit value in your source code.
23 F_CPU = 1000000
24
25
26 # Output format. (can be srec, ihex, binary)
27 FORMAT = ihex
28
29 # Target file name (without extension).
30 TARGET = main
31
32 # Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization.
33 # (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
34 #OPT = s
35 OPT=s
36 #OPT = 0
37
38 # List C source files here. (C dependencies are automatically generated.)
39 SRC = $(TARGET).c
40
41 # You can also wrap lines by appending a backslash to the end of the line:
42 #SRC += baz.c \
43 #xyzzy.c
44
45
46
47 # List Assembler source files here.
48 # Make them always end in a capital .S.  Files ending in a lowercase .s
49 # will not be considered source files but generated files (assembler
50 # output from the compiler), and will be deleted upon "make clean"!
51 # Even though the DOS/Win* filesystem matches both .s and .S the same,
52 # it will preserve the spelling of the filenames, and gcc itself does
53 # care about how the name is spelled on its command-line.
54 ASRC = 
55
56
57 # List any extra directories to look for include files here.
58 #     Each directory must be seperated by a space.
59 EXTRAINCDIRS = 
60
61
62 # Optional compiler flags.
63 #  -g:        generate debugging information (for GDB, or for COFF conversion)
64 #  -O*:       optimization level
65 #  -f...:     tuning, see gcc manual and avr-libc documentation
66 #  -Wall...:  warning level
67 #  -Wa,...:   tell GCC to pass this to the assembler.
68 #    -ahlms:  create assembler listing
69 CFLAGS = -g -O$(OPT) \
70 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \
71 -Wall -Wstrict-prototypes \
72 -Wa,-adhlns=$(<:.c=.lst) \
73 $(patsubst %,-I%,$(EXTRAINCDIRS)) \
74 -DF_CPU=$(F_CPU)
75
76
77 # Set a "language standard" compiler flag.
78 #   Unremark just one line below to set the language standard to use.
79 #   gnu99 = C99 + GNU extensions. See GCC manual for more information.
80 #CFLAGS += -std=c89
81 #CFLAGS += -std=gnu89
82 #CFLAGS += -std=c99
83 CFLAGS += -std=gnu99
84
85
86
87 # Optional assembler flags.
88 #  -Wa,...:   tell GCC to pass this to the assembler.
89 #  -ahlms:    create listing
90 #  -gstabs:   have the assembler create line number information; note that
91 #             for use in COFF files, additional information about filenames
92 #             and function names needs to be present in the assembler source
93 #             files -- see avr-libc docs [FIXME: not yet described there]
94 ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 
95
96
97
98 # Optional linker flags.
99 #  -Wl,...:   tell GCC to pass this to linker.
100 #  -Map:      create map file
101 #  --cref:    add cross reference to  map file
102 LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
103
104
105
106 # Additional libraries
107
108 # Minimalistic printf version
109 #LDFLAGS += -Wl,-u,vfprintf -lprintf_min
110
111 # Floating point printf version (requires -lm below)
112 #LDFLAGS += -Wl,-u,vfprintf -lprintf_flt
113
114 # -lm = math library
115 #LDFLAGS += -lm
116
117
118
119
120 # Programming support using avrdude. Settings and variables.
121
122 # Programming hardware: alf avr910 avrisp bascom bsd 
123 # dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
124 #
125 # Type: avrdude -c ?
126 # to get a full listing.
127 #
128 AVRDUDE_PROGRAMMER = avrispmkII
129
130
131 AVRDUDE_PORT = usb         # programmer connected to serial device
132 #AVRDUDE_PORT = lpt1    # programmer connected to parallel port
133
134 AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
135 #AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
136
137 AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
138
139 # Uncomment the following if you want avrdude's erase cycle counter.
140 # Note that this counter needs to be initialized first using -Yn,
141 # see avrdude manual.
142 #AVRDUDE_ERASE += -y
143
144 # Uncomment the following if you do /not/ wish a verification to be
145 # performed after programming the device.
146 #AVRDUDE_FLAGS += -V
147
148 # Increase verbosity level.  Please use this when submitting bug
149 # reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
150 # to submit bug reports.
151 #AVRDUDE_FLAGS += -v -v
152
153
154
155
156 # ---------------------------------------------------------------------------
157
158 # Define programs and commands.
159 SHELL = sh
160
161 CC = avr-gcc
162
163 OBJCOPY = avr-objcopy
164 OBJDUMP = avr-objdump
165 SIZE = avr-size
166
167
168 # Programming support using avrdude.
169 AVRDUDE = sudo avrdude
170
171 REMOVE = rm -f
172 COPY = cp
173
174 HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
175 #mt - use hexadecimal output-fromat // org:  ELFSIZE = $(SIZE) -A $(TARGET).elf
176 ELFSIZE = $(SIZE) -x -A $(TARGET).elf
177
178
179 # Define Messages
180 MSG_ERRORS_NONE = Errors: none
181 MSG_BEGIN = -------- begin --------
182 MSG_END = --------  end  --------
183 MSG_SIZE_BEFORE = Size before: 
184 MSG_SIZE_AFTER = Size after:
185 MSG_COFF = Converting to AVR COFF:
186 MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
187 MSG_FLASH = Creating load file for Flash:
188 MSG_EEPROM = Creating load file for EEPROM:
189 MSG_EXTENDED_LISTING = Creating Extended Listing:
190 MSG_SYMBOL_TABLE = Creating Symbol Table:
191 MSG_LINKING = Linking:
192 MSG_COMPILING = Compiling:
193 MSG_ASSEMBLING = Assembling:
194 MSG_CLEANING = Cleaning project:
195
196
197
198
199 # Define all object files.
200 OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
201
202 # Define all listing files.
203 LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)
204
205 # Combine all necessary flags and optional flags.
206 # Add target processor to flags.
207 ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
208 ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
209
210
211
212 # Default target.
213 all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \
214         $(TARGET).lss $(TARGET).sym sizeafter finished end
215
216
217 # Eye candy.
218 # AVR Studio 3.x does not check make's exit code but relies on
219 # the following magic strings to be generated by the compile job.
220 begin:
221         @echo
222         @echo $(MSG_BEGIN)
223
224 finished:
225         @echo $(MSG_ERRORS_NONE)
226
227 end:
228         @echo $(MSG_END)
229         @echo
230
231
232 # Display size of file.
233 sizebefore:
234         @if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi
235
236 sizeafter:
237         @if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi
238
239
240
241 # Display compiler version information.
242 gccversion : 
243         @$(CC) --version
244
245
246
247
248 # Convert ELF to COFF for use in debugging / simulating in
249 # AVR Studio or VMLAB.
250 COFFCONVERT=$(OBJCOPY) --debugging \
251         --change-section-address .data-0x800000 \
252         --change-section-address .bss-0x800000 \
253         --change-section-address .noinit-0x800000 \
254         --change-section-address .eeprom-0x810000 
255
256
257 coff: $(TARGET).elf
258         @echo
259         @echo $(MSG_COFF) $(TARGET).cof
260         $(COFFCONVERT) -O coff-avr $< $(TARGET).cof
261
262
263 extcoff: $(TARGET).elf
264         @echo
265         @echo $(MSG_EXTENDED_COFF) $(TARGET).cof
266         $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
267
268
269
270
271 # Program the device.  
272 program: $(TARGET).hex $(TARGET).eep
273         $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
274         make clean
275
276
277
278
279 # Create final output files (.hex, .eep) from ELF output file.
280 %.hex: %.elf
281         @echo
282         @echo $(MSG_FLASH) $@
283         $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
284
285 %.eep: %.elf
286         @echo
287         @echo $(MSG_EEPROM) $@
288         -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
289         --change-section-lma .eeprom=0 -O $(FORMAT) $< $@
290
291 # Create extended listing file from ELF output file.
292 %.lss: %.elf
293         @echo
294         @echo $(MSG_EXTENDED_LISTING) $@
295         $(OBJDUMP) -h -S $< > $@
296
297 # Create a symbol table from ELF output file.
298 %.sym: %.elf
299         @echo
300         @echo $(MSG_SYMBOL_TABLE) $@
301         avr-nm -n $< > $@
302
303
304
305 # Link: create ELF output file from object files.
306 .SECONDARY : $(TARGET).elf
307 .PRECIOUS : $(OBJ)
308 %.elf: $(OBJ)
309         @echo
310         @echo $(MSG_LINKING) $@
311         $(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)
312
313
314 # Compile: create object files from C source files.
315 %.o : %.c
316         @echo
317         @echo $(MSG_COMPILING) $<
318         $(CC) -c $(ALL_CFLAGS) $< -o $@
319
320
321 # Compile: create assembler files from C source files.
322 %.s : %.c
323         $(CC) -S $(ALL_CFLAGS) $< -o $@
324
325
326 # Assemble: create object files from assembler source files.
327 %.o : %.S
328         @echo
329         @echo $(MSG_ASSEMBLING) $<
330         $(CC) -c $(ALL_ASFLAGS) $< -o $@
331
332
333
334
335
336
337 # Target: clean project.
338 clean: begin clean_list finished end
339
340 clean_list :
341         @echo
342         @echo $(MSG_CLEANING)
343         $(REMOVE) $(TARGET).hex
344         $(REMOVE) $(TARGET).eep
345         $(REMOVE) $(TARGET).obj
346         $(REMOVE) $(TARGET).cof
347         $(REMOVE) $(TARGET).elf
348         $(REMOVE) $(TARGET).map
349         $(REMOVE) $(TARGET).obj
350         $(REMOVE) $(TARGET).a90
351         $(REMOVE) $(TARGET).sym
352         $(REMOVE) $(TARGET).lnk
353         $(REMOVE) $(TARGET).lss
354         $(REMOVE) $(OBJ)
355         $(REMOVE) $(LST)
356         $(REMOVE) $(SRC:.c=.s)
357         $(REMOVE) $(SRC:.c=.d)
358
359
360 # Automatically generate C source code dependencies. 
361 # (Code originally taken from the GNU make user manual and modified 
362 # (See README.txt Credits).)
363 #
364 # Note that this will work with sh (bash) and sed that is shipped with WinAVR
365 # (see the SHELL variable defined above).
366 # This may not work with other shells or other seds.
367 #
368 %.d: %.c
369         set -e; $(CC) -MM $(ALL_CFLAGS) $< \
370         | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \
371         [ -s $@ ] || rm -f $@
372
373
374 # Remove the '-' if you want to see the dependency files generated.
375 -include $(SRC:.c=.d)
376
377
378
379 # Listing of phony targets.
380 .PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \
381         clean clean_list program
382
383
384 CFLAGS=-Wall -ggdb
385 blit_fb: shit.c
386         /usr/bin/c99 ${CFLAGS} shit.c -lpng -o blit_fb