+# Makefile for the AVR-Crypto-Lib project
+# author: Daniel Otte
+
+BLOCK_CIPHERS :=
+STREAM_CIPHERS :=
+HASHES :=
+MACS :=
+PRNGS :=
+ENCODINGS :=
+
+# we use the gnu make standard library
+include gmsl
+include avr-makefile.inc
+include mkfiles/*.mk
+
+ALGORITHMS = $(BLOCK_CIPHERS) $(STREAM_CIPHERS) $(HASHES) $(PRNGS) $(MACS) $(ENCODINGS)
+ALGORITHMS_OBJ = $(patsubst %,%_OBJ, $(ALGORITHMS))
+ALGORITHMS_TEST_BIN = $(patsubst %,%_TEST_BIN, $(ALGORITHMS))
+
+define OBJinBINDIR_TEMPLATE
+$(1) = $(2)
+endef
+
+$(foreach a, $(ALGORITHMS_OBJ), $(eval $(call OBJinBINDIR_TEMPLATE, $(a), $(patsubst %.o,$(BIN_DIR)%.o,$($(a))))))
+
+$(foreach a, $(ALGORITHMS_TEST_BIN), $(eval $(call OBJinBINDIR_TEMPLATE, $(a), $(patsubst %.o,$(TESTBIN_DIR)%.o,$($(a))))))
+
+
+#ALGORITHMS_TEST_BIN_IMM = $(foreach a, $(ALGORITHMS_TEST_BIN), $($(a)))
+ALGORITHMS_NESSIE_TEST = $(patsubst %,%_NESSIE_TEST, $(ALGORITHMS))
+ALGORITHMS_PERFORMANCE_TEST = $(patsubst %,%_PERORMANCE_TEST, $(ALGORITHMS))
+
+ALGORITHMS_LC = $(call lc,$(ALGORITHMS))
+
+ALGORITHMS_TEST_TARGET_ELF = $(patsubst %, $(TESTBIN_DIR)main-%-test.elf, $(ALGORITHMS_LC))
+ALGORITHMS_TEST_TARGET_HEX = $(patsubst %, $(TESTBIN_DIR)main-%-test.hex, $(ALGORITHMS_LC))
+
+
+#-------------------------------------------------------------------------------
+
+all: $(foreach algo, $(ALGORITHMS), $(algo)_OBJ)
+
+#-------------------------------------------------------------------------------
+
+define MAIN_OBJ_TEMPLATE
+$(2): $(3) $(4)
+ @echo "[ld] : $$@"
+# echo $$^
+ @$(CC) $(CFLAGS) $(LDFLAGS)$(patsubst %.elf,%.map,$(2)) -o \
+ $(2) \
+ $(3) $(4) \
+ $(LIBS)
+endef
+
+$(foreach algo, $(ALGORITHMS), $(eval $(call MAIN_OBJ_TEMPLATE, \
+ $(algo), \
+ $(TESTBIN_DIR)main-$(call lc,$(algo))-test.elf, \
+ $(patsubst %.o,%.o,$($(algo)_TEST_BIN)), \
+ $(patsubst %.o,%.o,$($(algo)_OBJ)) )))
+
+
+
+
+#-------------------------------------------------------------------------------
+.PHONY: help
+help: info
+
+info:
+ @echo "infos on AVR-Crypto-lib:"
+ @echo " block ciphers:"
+ @echo " $(BLOCK_CIPHERS)"
+ @echo " stream ciphers:"
+ @echo " $(STREAM_CIPHERS)"
+ @echo " hash functions:"
+ @echo " $(HASHES)"
+ @echo " MAC functions:"
+ @echo " $(MACS)"
+ @echo " PRNG functions:"
+ @echo " $(PRNGS)"
+ @echo " encodings:"
+ @echo " $(ENCODINGS)"
+# @echo " ALGORITHMS_TEST_BIN:"
+# @echo " $(ALGORITHMS_TEST_BIN)"
+# @echo " ALGORITHMS_TEST_TARGET_ELF:"
+# @echo " $(ALGORITHMS_TEST_TARGET_ELF)"
+ @echo " targets:"
+ @echo " all - all algorithm cores"
+ @echo " cores - all algorithm cores"
+ @echo " listings - all algorithm core listings"
+ @echo " tests - all algorithm test programs"
+ @echo " stats - all algorithm size statistics"
+ @echo " blockciphers - all blockcipher cores"
+ @echo " streamciphers - all streamcipher cores"
+ @echo " hashes - all hash cores"
+ @echo " macs - all MAC cores"
+ @echo " prngs - all PRNG cores"
+ @echo " all_testrun - testrun all algorithms"
+ @echo " docu - build doxygen documentation"
+ @echo " clean - remove a lot of builded files"
+ @echo " xclean - also remove dependency files"
+ @echo " *_TEST_BIN - build test program"
+ @echo " *_TESTRUN - run nessie test"
+ @echo " *_OBJ - build algorithm core"
+ @echo " *_FLASH - flash test program"
+ @echo " *_LIST - build assembler listing"
+
+#-------------------------------------------------------------------------------
+