-PRG = serpent-test
-#PRG = tdes-test
-# camellia
-# cryptotest
-SERPENT_OBJ = main-serpent-test.o debug.o uart.o serial-tools.o serpent.o
-CAMELLIA_OBJ = main-camellia-test.o debug.o uart.o serial-tools.o camellia.o camellia-asm.o
-SKIPJACK_OBJ = main-skipjack-test.o debug.o uart.o serial-tools.o skipjack.o
-SHA1_OBJ = main-sha1-test.o debug.o uart.o serial-tools.o sha1-asm.o
-MD5_OBJ = main-md5-test.o debug.o uart.o serial-tools.o md5.o
-CAST5_OBJ = main-cast5-test.o debug.o uart.o serial-tools.o cast5.o
-RC6_OBJ = main-rc6-test.o debug.o uart.o serial-tools.o rc6.o
-Multi_OBJ = main.o debug.o uart.o serial-tools.o sha256-asm.o xtea-asm.o arcfour-asm.o prng.o cast5.o
-DES_OBJ = main-des-test.o debug.o uart.o serial-tools.o des.o
-TDES_OBJ = main-tdes-test.o debug.o uart.o serial-tools.o des.o
-SEED_OBJ = main-seed-test.o debug.o uart.o serial-tools.o seed.o seed-asm.o
-SHABEA_OBJ = main-shabea-test.o debug.o uart.o serial-tools.o shabea.o sha256-asm.o
-
-OBJ = $(SERPENT_OBJ)
-MCU_TARGET = atmega32
-OPTIMIZE = -Os
-
-FLASHCMD = avrdude -p $(MCU_TARGET) -P /dev/ttyUSB0 -c avr911 -U flash:w:$(PRG).hex
-# -U eeprom:w:$(PRG)_eeprom.hex
-#uisp -dprog=bsd -dlpt=/dev/parport1 --upload if=$(PRG).hex
-ERASECMD =
+# Makefile for the micro-crypt project
+# author: Daniel Otte
+
+BLOCK_CIPHERS :=
+STREAM_CIPHERS :=
+HASHES :=
+MACS :=
+PRNGS :=
+
+# we use the gnu make standard library
+include gmsl
+include avr-makefile.inc
+include *.mk
+
+ALGORITHMS = $(BLOCK_CIPHERS) $(STREAM_CIPHERS) $(HASHES) $(PRNGS) $(MACS)
+ALGORITHMS_OBJ = $(patsubst %,%_OBJ, $(ALGORITHMS))
+ALGORITHMS_OBJ_IMM = $(foreach a, $(ALGORITHMS_OBJ), $($(a)))
+ALGORITHMS_TEST_BIN = $(patsubst %,%_TEST_BIN, $(ALGORITHMS))
+ALGORITHMS_TEST_BIN_MAIN = $(foreach a, $(ALGORITHMS_TEST_BIN), $(firstword $($(a))))
+ALGORITHMS_TEST_BIN_MAIN_ELF = $(patsubst %.o, %.elf, $(ALGORITHMS_TEST_BIN_MAIN))
+ALGORITHMS_TEST_BIN_MAIN_HEX = $(patsubst %.o, %.hex, $(ALGORITHMS_TEST_BIN_MAIN))
+
+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 = #algorithm names in lowercase
+#ALGORITHMS_LC = $(foreach a, $(ALGORITHMS), $$(lc Text))
+ALGORITHMS_LC = $(call lc,$(ALGORITHMS))
+PRG = remove_me