]> git.cryptolib.org Git - avr-crypto-lib.git/blob - Makefile
some tunes at the Makefile + code reorganisation at the nessie test banches
[avr-crypto-lib.git] / Makefile
1 # Makefile for the micro-crypt project
2 # author: Daniel Otte
3
4 BLOCK_CIPHERS  := 
5 STREAM_CIPHERS := 
6 HASHES         :=
7 MACS           :=
8 PRNGS          := 
9
10
11 include avr-makefile.inc
12 include *.mk
13
14 ALGORITHMS = $(BLOCK_CIPHERS) $(STREAM_CIPHERS) $(HASHES) $(PRNGS) $(MACS)
15 ALGORITHMS_OBJ = $(patsubst %,%_OBJ, $(ALGORITHMS))
16 ALGORITHMS_OBJ_IMM = $(foreach a, $(ALGORITHMS_OBJ), $($(a)))
17 ALGORITHMS_TEST_BIN = $(patsubst %,%_TEST_BIN, $(ALGORITHMS))
18 ALGORITHMS_TEST_BIN_MAIN = $(foreach a, $(ALGORITHMS_TEST_BIN), $(firstword $($(a))))
19 ALGORITHMS_TEST_BIN_MAIN_ELF = $(patsubst %.o, %.elf, $(ALGORITHMS_TEST_BIN_MAIN))
20 ALGORITHMS_TEST_BIN_MAIN_HEX = $(patsubst %.o, %.hex, $(ALGORITHMS_TEST_BIN_MAIN))
21
22 ALGORITHMS_TEST_BIN_IMM =  $(foreach a, $(ALGORITHMS_TEST_BIN), $($(a)))
23 ALGORITHMS_NESSIE_TEST = $(patsubst %,%_NESSIE_TEST, $(ALGORITHMS))
24 ALGORITHMS_PERFORMANCE_TEST = $(patsubst %,%_PERORMANCE_TEST, $(ALGORITHMS))
25
26 PRG = remove_me
27
28 DEFS       =
29 LIBS       =
30
31 define BLA_TEMPLATE2
32 $(2): $(3)
33         @echo "[gcc]: $$@"
34 #       echo $$^
35         @$(CC) $(CFLAGS) $(LDFLAGS)$(patsubst %.elf,%.map,$(2)) -o \
36         $(2) \
37         $(3) \
38         $(LIBS)
39 endef
40
41 $(foreach algo, $(ALGORITHMS), $(eval $(call BLA_TEMPLATE2, $(algo), $(patsubst %.o,%.elf,$(firstword $($(algo)_TEST_BIN))), $($(algo)_TEST_BIN) )))
42
43 .PHONY: info
44 info:
45         @echo "infos on micro-crypt:"
46         @echo "  block ciphers:"
47         @echo "    $(BLOCK_CIPHERS)"
48         @echo "  stream ciphers:"
49         @echo "    $(STREAM_CIPHERS)"
50         @echo "  hash functions:"
51         @echo "    $(HASHES)"
52         @echo "  MAC functions:"
53         @echo "    $(MACS)"
54         @echo "  PRNG functions:"
55         @echo "    $(PRNGS)"
56 #       echo $(ALGORITHMS_TEST_BIN_MAIN)
57 #       echo $(ALGORITHMS)
58 #       echo $(firstword $(XTEA_TEST_BIN))
59 #       echo $(patsubst %.o,%.elf,$(firstword $(XTEA_TEST_BIN)))
60 #       echo $(ALGORITHMS_OBJ)
61 #       echo $(ALGORITHMS_OBJ_IMM)
62 #       echo $(ALGORITHMS_TEST_BIN)
63 #       echo $(ALGORITHMS_NESSIE_TEST)
64 #       echo $(ALGORITHMS_PERFORMANCE_TEST)
65
66 %.o: %.c
67         @echo "[gcc]: $@"
68         @$(CC) $(CFLAGS) -c     -o $@ $<
69
70 %.o: %.S
71         @echo "[as] : $@"
72         @$(CC) $(ASFLAGS) -c -o $@ $<
73
74
75 .PHONY: cores
76 cores: $(ALGORITHMS_OBJ)
77
78 .PHONY: blockciphers
79 blockciphers: $(patsubst %, %_OBJ, $(BLOCK_CIPHERS))
80
81 .PHONY: streamciphers
82 streamciphers: $(patsubst %, %_OBJ, $(STREAM_CIPHERS))
83
84 .PHONY:  hashes
85 hashes: $(patsubst %, %_OBJ, $(HASHES))
86
87 .PHONY:  macs
88 macs: $(patsubst %, %_OBJ, $(MACS))
89
90 prngs: $(patsubst %, %_OBJ, $(PRNGS))
91
92 tests: $(ALGORITHMS_TEST_BIN) \
93        $(ALGORITHMS_TEST_BIN_MAIN_ELF) \
94        $(ALGORITHMS_TEST_BIN_MAIN_HEX)
95
96
97 define OBJ_TEMPLATE
98 $(1)_OBJ: $(2)
99 #       @echo " ALGO: $(1)"
100 #       @echo " REQ:  $(2)"
101 endef
102
103 $(foreach algo, $(ALGORITHMS), $(eval $(call OBJ_TEMPLATE, $(algo), $($(algo)_OBJ))))
104
105
106 $(BLOCK_CIPHERS_OBJ): $(patsubst %,%_OBJ, $(BLOCK_CIPHERS)) 
107 $(STREAM_CIPHERS_OBJ): $(patsubst %,%_OBJ, $(STREAM_CIPHERS))
108 $(HASHES_OBJ): $(patsubst %,%_OBJ, $(HASHES))
109 $(PRNGS_OBJ): $(patsubst %,%_OBJ, $(PRNGS))
110 $(MACS_OBJ): $(patsubst %,%_OBJ, $(MACS))
111
112 $(ALGORITHMS_TEST_BIN): $(ALGORITHMS_TEST_BIN_IMM)
113         
114 .PHONY: all
115 all: $(PRG).elf lst text eeprom
116
117
118 .PHONY: clean
119 clean:
120         rm -rf *.o *.elf *.eps *.png *.pdf *.bak 
121         rm -rf *.lst *.map $(EXTRA_CLEAN_FILES)
122
123 flash:
124         $(ERASECMD)
125         $(FLASHCMD)
126         
127 lst:  $(PRG).lst
128
129 %.lst: %.elf
130         $(OBJDUMP) -h -S $< > $@
131
132 # Rules for building the .text rom images
133
134 text: hex bin srec
135
136 hex:  $(PRG).hex
137 bin:  $(PRG).bin
138 srec: $(PRG).srec
139
140 %.hex: %.elf
141         $(OBJCOPY) -j .text -j .data -O ihex $< $@
142
143 %.srec: %.elf
144         $(OBJCOPY) -j .text -j .data -O srec $< $@
145
146 %.bin: %.elf
147         $(OBJCOPY) -j .text -j .data -O binary $< $@
148
149 # Rules for building the .eeprom rom images
150
151 eeprom: ehex ebin esrec
152
153 ehex:  $(PRG)_eeprom.hex
154 ebin:  $(PRG)_eeprom.bin
155 esrec: $(PRG)_eeprom.srec
156
157 %_eeprom.hex: %.elf
158         $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O ihex $< $@
159
160 %_eeprom.srec: %.elf
161         $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O srec $< $@
162
163 %_eeprom.bin: %.elf
164         $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O binary $< $@
165
166 %_size.txt: %.o
167         $(SIZE)  $< > $@
168         
169         
170         
171 # Every thing below here is used by avr-libc's build system and can be ignored
172 # by the casual user.
173
174 FIG2DEV          = fig2dev
175 EXTRA_CLEAN_FILES       = *.hex *.bin *.srec
176
177 dox: eps png pdf
178
179 eps: $(PRG).eps
180 png: $(PRG).png
181 pdf: $(PRG).pdf
182
183
184 %.eps: %.fig
185         $(FIG2DEV) -L eps $< $@
186
187 %.pdf: %.fig
188         $(FIG2DEV) -L pdf $< $@
189
190 %.png: %.fig
191         $(FIG2DEV) -L png $< $@