+$(BIN_DIR)%.o: %.c
+ @echo "[gcc]: $@"
+ @$(CC) $(CFLAGS) -c -o $@ $<
+
+$(BIN_DIR)%.o: %.S
+ @echo "[as] : $@"
+ @$(CC) $(ASFLAGS) -c -o $@ $<
+
+$(TESTBIN_DIR)%.o: $(TESTSRC_DIR)%.c
+ @echo "[gcc]: $@"
+ @$(CC) $(CFLAGS) -c -o $@ $<
+
+$(TESTBIN_DIR)%.o: $(TESTSRC_DIR)%.S
+ @echo "[as] : $@"
+ @$(CC) $(ASFLAGS) -c -o $@ $<
+
+$(TESTBIN_DIR)%.o: %.c
+ @echo "[gcc]: $@"
+ @$(CC) $(CFLAGS) -c -o $@ $<
+
+$(TESTBIN_DIR)%.o: %.S
+ @echo "[as] : $@"
+ @$(CC) $(ASFLAGS) -c -o $@ $<
+
+
+
+%.o: %.c
+ @echo "[gcc]: $@"
+ @$(CC) $(CFLAGS) -c -o $@ $<
+
+%.o: %.S
+ @echo "[as] : $@"
+ @$(CC) $(ASFLAGS) -c -o $@ $<
+
+#-------------------------------------------------------------------------------
+
+define OBJ_TEMPLATE
+$(1)_OBJ: $(2)
+# @echo " ALGO: $(1)"
+# @echo " REQ: $(2)"
+endef
+
+$(foreach algo, $(ALGORITHMS), $(eval $(call OBJ_TEMPLATE, $(algo), $($(algo)_OBJ))))
+
+
+#-------------------------------------------------------------------------------
+
+define TESTBIN_TEMPLATE
+$(1)_TEST_BIN: $(2)
+endef
+
+$(foreach algo, $(ALGORITHMS), $(eval $(call TESTBIN_TEMPLATE, $(algo), $($(algo)_TEST_BIN))))
+
+#-------------------------------------------------------------------------------
+
+$(BLOCK_CIPHERS_OBJ): $(patsubst %,%_OBJ, $(BLOCK_CIPHERS))
+$(STREAM_CIPHERS_OBJ): $(patsubst %,%_OBJ, $(STREAM_CIPHERS))
+$(HASHES_OBJ): $(patsubst %,%_OBJ, $(HASHES))
+$(PRNGS_OBJ): $(patsubst %,%_OBJ, $(PRNGS))
+$(MACS_OBJ): $(patsubst %,%_OBJ, $(MACS))
+$(ENCODINGS_OBJ): $(patsubst %,%_OBJ, $(ENCODINGS))
+
+#-------------------------------------------------------------------------------
+
+define SIZE_TEMPLATE
+$(1)_size.txt: $(2)
+ @echo "[size]: $(1)_size.txt"
+ @$(SIZE) $(2) > $(1)_size.txt
+endef
+
+$(foreach algo, $(ALGORITHMS), $(eval $(call SIZE_TEMPLATE, $(STAT_DIR)$(call lc,$(algo)), $($(algo)_OBJ))))
+
+#-------------------------------------------------------------------------------
+
+define FLASH_TEMPLATE
+$(1)_FLASH: $(2)
+ @echo "[flash]: $(2)"
+ @$(FLASHCMD)$(call first,$(2))
+endef
+
+$(foreach algo, $(ALGORITHMS),$(eval $(call FLASH_TEMPLATE, $(algo), $(TESTBIN_DIR)main-$(call lc,$(algo))-test.hex) ))