-$(eval $(call create_cc_template,objs,c))
-$(eval $(call create_cc_template,objs,S,,-DASSEMBLY))
-$(eval $(call create_cc_template,initobjs,c,.initobj))
-$(eval $(call create_cc_template,initobjs,S,.initobj,-DASSEMBLY))
-$(eval $(call create_cc_template,drivers,c,.driver))
-$(eval $(call create_cc_template,drivers,S,.driver,-DASSEMBLY))
-$(eval $(call create_cc_template,smmobjs,c,.smmobj))
-$(eval $(call create_cc_template,smmobjs,S,.smmobj))
-
-usetemplate=$(foreach d,$(sort $(dir $($(1)))),$(eval $(call $(1)_$(2)_template,$(subst $(obj)/,,$(d)))))
-usetemplate=$(foreach d,$(sort $(dir $($(1)))),$(eval $(call $(1)_$(2)_template,$(subst $(obj)/,,$(d)))))
-$(eval $(call usetemplate,objs,asl))
-$(eval $(call usetemplate,objs,c))
-$(eval $(call usetemplate,objs,S))
-$(eval $(call usetemplate,initobjs,c))
-$(eval $(call usetemplate,initobjs,S))
-$(eval $(call usetemplate,drivers,c))
-$(eval $(call usetemplate,drivers,S))
-$(eval $(call usetemplate,smmobjs,c))
-$(eval $(call usetemplate,smmobjs,S))
+$(eval $(call create_cc_template,ramstage,c))
+$(eval $(call create_cc_template,ramstage,S,-DASSEMBLY))
+$(eval $(call create_cc_template,romstage,c,-D__PRE_RAM__))
+$(eval $(call create_cc_template,romstage,S,-DASSEMBLY -D__PRE_RAM__))
+$(eval $(call create_cc_template,driver,c))
+$(eval $(call create_cc_template,driver,S,-DASSEMBLY))
+$(eval $(call create_cc_template,smm,c))
+$(eval $(call create_cc_template,smm,S))
+
+foreach-src=$(foreach file,$($(1)-srcs),$(eval $(call $(1)-objs_$(subst .,,$(suffix $(file)))_template,$(subst src/,,$(basename $(file))))))
+$(eval $(foreach type,$(types),$(call foreach-src,$(type))))
+
+DEPENDENCIES = $(ramstage-objs:.o=.d) $(romstage-objs:.o=.d) $(driver-objs:.o=.d) $(smm-objs:.o=.d)
+-include $(DEPENDENCIES)