Original version
[makefile] / Makefile
1 baudrate=19200
2 avrType=attiny2313
3 avrFreq=20000000
4 programmerDev=/dev/ttyUSB003
5 programmerType=arduino
6 src=project
7
8 # GCC-option            GOOD                            BAD
9 # -Werror=address       setup();                        setup;
10 # -Werror=unused-value  DDRB = _BS(PB1) | _BS(PB2);     DDRB = _BS(PB1); _BS(PB2);
11 # -Werror=parentheses   ( a & b ) | c;                  a & b | c;
12 # -Werror=overflow      uint8_t n = ( uint8_t ) ~ 0xf5; uint8_t n = ~ 0xf5;
13 # -Werror=narrowing     char n = ( char ) ~ 0xf5;       char n = ~ 0xf5;
14
15 cflags=-g -DF_CPU=$(avrFreq) -Wall -Os -Werror -Wextra
16 memoryTypes=calibration eeprom efuse flash fuse hfuse lfuse lock signature application apptable boot prodsig usersig
17
18 SHELL := /bin/bash
19
20 ifdef baudrate
21         baud=-b$(baudrate)
22 else
23         baud=
24 endif
25
26 .PHONY: backup clean disassemble dumpelf edit eeprom elf flash fuses help hex makefile object program
27
28 help:
29         @echo 'backup           Read all known memory types from controller and write it into a file. Available memory types: $(memoryTypes)'
30         @echo 'clean            Delete automatically created files.'
31         @echo 'disassemble      Compile source code, then disassemble object file to mnemonics.'
32         @echo 'dumpelf          Dump the contents of the .elf file. Useful for information purposes only.'
33         @echo 'edit             Edit the .cpp source file.'
34         @echo 'eeprom           Extract EEPROM data from .elf file and program the device with it.'
35         @echo 'elf              Create $(src).elf'
36         @echo 'flash            Program $(src).hex to controller flash memory.'
37         @echo 'fuses            Extract FUSES data from .elf file and program the device with it.'
38         @echo 'help             Show this text.'
39         @echo 'hex              Create all hex files for flash, eeprom and fuses.'
40         @echo 'object           Create $(src).o'
41         @echo 'program          Do all programming to controller.'
42
43 edit:
44         [[ ! -f $(src).cpp ]] && echo '// VERSION: ' > $(src).cpp
45         vi '$(src).cpp' -s <( printf ":set number\n:1 s/^\/\/ VERSION: .*$$/\/\/ VERSION: $$(date)/g\n" )
46
47 makefile:
48         vi Makefile
49
50 #all: object elf hex
51
52 clean: 
53         rm $(src).elf $(src).eeprom.hex $(src).fuses.hex $(src).lfuse.hex $(src).hfuse.hex $(src).efuse.hex $(src).flash.hex $(src).o
54         date
55
56 object:
57         # *** BEGIN project specific lines ***
58         #avr-gcc $(cflags) -mmcu=$(avrType) -S -fdump-tree-original -fdump-tree-optimized -c $(src).cpp 
59         #grep -E '^[ \t]*uint16_t (ubrr|ocr1a)' $(src).cpp.003t.original
60         # *** END project specific lines ***
61         avr-gcc $(cflags) -mmcu=$(avrType) -Wa,-ahlmns=$(src).lst -c -o $(src).o $(src).cpp 
62
63 elf: object
64         avr-gcc $(cflags) -mmcu=$(avrType) -o $(src).elf $(src).o
65         chmod a-x $(src).elf 2>&1
66
67 hex:    elf
68         avr-objcopy -j .text -j .data -O ihex $(src).elf $(src).flash.hex
69         avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 -O ihex $(src).elf $(src).eeprom.hex
70         avr-objcopy -j .fuse -O ihex $(src).elf $(src).fuses.hex --change-section-lma .fuse=0
71         srec_cat $(src).fuses.hex -Intel -crop 0x00 0x01 -offset  0x00 -O $(src).lfuse.hex -Intel
72         srec_cat $(src).fuses.hex -Intel -crop 0x01 0x02 -offset -0x01 -O $(src).hfuse.hex -Intel
73         srec_cat $(src).fuses.hex -Intel -crop 0x02 0x03 -offset -0x02 -O $(src).efuse.hex -Intel
74
75 disassemble: elf
76         avr-objdump -s -j .fuse $(src).elf
77         avr-objdump -C -d $(src).elf 2>&1
78
79 eeprom: hex
80         #avrdude -p$(avrType) -c$(programmerType) -P$(programmerDev) $(baud) -v -U eeprom:w:$(src).eeprom.hex
81         date
82
83 fuses: hex
84         avrdude -p$(avrType) -c$(programmerType) -P$(programmerDev) $(baud) -v -U lfuse:w:$(src).lfuse.hex
85         #avrdude -p$(avrType) -c$(programmerType) -P$(programmerDev) $(baud) -v -U hfuse:w:$(src).hfuse.hex
86         #avrdude -p$(avrType) -c$(programmerType) -P$(programmerDev) $(baud) -v -U efuse:w:$(src).efuse.hex
87         date
88
89 dumpelf: elf
90         avr-objdump -s -h $(src).elf
91
92 program: flash eeprom fuses
93
94 flash: hex
95         avrdude -p$(avrType) -c$(programmerType) -P$(programmerDev) $(baud) -v -U flash:w:$(src).flash.hex
96         date
97
98 backup:
99         echo "$(baud)"
100         @for memory in $(memoryTypes); do \
101                 avrdude -p $(avrType) -c$(programmerType) -P$(programmerDev) $(baud) -v -U $$memory:r:./$(avrType).$$memory.hex:i; \
102         done