-define initobjs_c_template
-$(obj)/$(1)%.o: src/$(1)%.c
- @printf " CC $$(subst $$(obj)/,,$$(@))\n"
- $(CC) -m32 $$(CFLAGS) -c -o $$@ $$<
-endef
-
-define initobjs_S_template
-$(obj)/$(1)%.o: src/$(1)%.S
- @printf " CC $$(subst $$(obj)/,,$$(@))\n"
- $(CC) -m32 -DASSEMBLY $$(CFLAGS) -c -o $$@ $$<
-endef
-
-define drivers_c_template
-$(obj)/$(1)%.o: src/$(1)%.c
- @printf " CC $$(subst $$(obj)/,,$$(@))\n"
- $(CC) -m32 $$(CFLAGS) -c -o $$@ $$<
-endef
-
-define drivers_S_template
-$(obj)/$(1)%.o: src/$(1)%.S
- @printf " CC $$(subst $$(obj)/,,$$(@))\n"
- $(CC) -m32 -DASSEMBLY $$(CFLAGS) -c -o $$@ $$<
-endef
-
-define smmobjs_c_template
-$(obj)/$(1)%.o: src/$(1)%.c
- @printf " CC $$(subst $$(obj)/,,$$(@))\n"
- $(CC) -m32 $$(CFLAGS) -c -o $$@ $$<
-endef
-
-define smmobjs_S_template
-$(obj)/$(1)%.o: src/$(1)%.S
- @printf " CC $$(subst $$(obj)/,,$$(@))\n"
- $(CC) -m32 $$(CFLAGS) -c -o $$@ $$<
-endef
+$(eval $(call create_cc_template,objs,c))
+$(eval $(call create_cc_template,objs,S,,-DASSEMBLY))
+$(eval $(call create_cc_template,initobjs,c,.initobj,-D__PRE_RAM__))
+$(eval $(call create_cc_template,initobjs,S,.initobj,-DASSEMBLY -D__PRE_RAM__))
+$(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))