summaryrefslogtreecommitdiff
path: root/mk/cc.mk
diff options
context:
space:
mode:
Diffstat (limited to 'mk/cc.mk')
-rw-r--r--mk/cc.mk32
1 files changed, 32 insertions, 0 deletions
diff --git a/mk/cc.mk b/mk/cc.mk
new file mode 100644
index 0000000..36e16b2
--- /dev/null
+++ b/mk/cc.mk
@@ -0,0 +1,32 @@
+cc_srcs = $(call require_core_paths,$(1),cc_files)
+cc_objs = $(call cc_srcs_to_objs,$(1),$(call cc_srcs,$(1)))
+cc_srcs_to_objs = $(addsuffix .o,$(addprefix $(obj)/cc/$(1)/,$(basename $(notdir $(2)))))
+
+define hooks/cc
+ define obj_rules
+ cc_binary := $$(call require_core_objs,$(1),ld_binary)
+
+ $$(cc_binary): | $$(obj)/cc/$(1)
+ $$(cc_binary): $$(call cc_objs,$(1)) $$(obj_deps)
+ $$(call run,LD,$$@) $$(core_info/$(1)/cross)gcc \
+ $$(core_info/$(1)/cc_flags) $$(core_info/$(1)/ld_flags) \
+ $$(call cc_objs,$(1)) -o $$@
+
+ $$(obj)/cc/$(1): $$(obj)
+ @mkdir -p $$@
+ endef
+
+ $$(eval $$(call add_obj_rules,$(1)))
+
+ $$(foreach src,$$(call cc_srcs,$(1)), \
+ $$(eval $$(call cc_unit_rule,$(1),$$(src),$$(call cc_srcs_to_objs,$(1),$$(src)))))
+endef
+
+define cc_unit_rule
+ define obj_rules
+ $(3): $(2) $$(obj_deps)
+ $$(call run,CC,$$<) $(core_info/$(1)/cross)gcc $(core_info/$(1)/cc_flags) -c $$< -o $$@
+ endef
+
+ $$(eval $$(call add_obj_rules,$(1)))
+endef