-$(obj)/mainboard/$(MAINBOARDDIR)/static.c: $(src)/mainboard/$(MAINBOARDDIR)/Config.lb $(obj)/mainboard/$(MAINBOARDDIR)/config.py
- $(Q)mkdir -p $(obj)/mainboard/$(MAINBOARDDIR)
- (cd $(obj)/mainboard/$(MAINBOARDDIR) ; PYTHONPATH=$(top)/util/sconfig export PYTHONPATH; python config.py $(MAINBOARDDIR) $(top) $(obj)/mainboard/$(MAINBOARDDIR))
-
-$(obj)/mainboard/$(MAINBOARDDIR)/static.o: $(obj)/mainboard/$(MAINBOARDDIR)/static.c
-#
-
-objs:=$(obj)/mainboard/$(MAINBOARDDIR)/static.o
-initobjs:=
-drivers:=
-smmobjs:=
-crt0s:=
-ldscripts:=
-types:=obj initobj driver smmobj
-src_types:=crt0 ldscript
-includemakefiles=$(foreach type,$(2), $(eval $(type)-y:=)) $(eval subdirs-y:=) $(eval include $(1)) $(if $(strip $(3)),$(foreach type,$(2),$(eval $(type)s+=$$(patsubst src/%,$(obj)/%,$$(addprefix $(dir $(1)),$$($(type)-y)))))) $(eval subdirs+=$$(subst $(PWD)/,,$$(abspath $$(addprefix $(dir $(1)),$$(subdirs-y)))))
-evaluate_subdirs=$(eval cursubdirs:=$(subdirs)) $(eval subdirs:=) $(foreach dir,$(cursubdirs),$(eval $(call includemakefiles,$(dir)/Makefile.inc,$(types) $(src_types),$(1)))) $(if $(subdirs),$(eval $(call evaluate_subdirs, $(1))))
+$(obj)/mainboard/$(MAINBOARDDIR)/static.c: $(src)/mainboard/$(MAINBOARDDIR)/devicetree.cb $(objutil)/sconfig/sconfig
+ @printf " SCONFIG $(subst $(src)/,,$(<))\n"
+ mkdir -p $(obj)/mainboard/$(MAINBOARDDIR)
+ $(objutil)/sconfig/sconfig $(MAINBOARDDIR) $(obj)/mainboard/$(MAINBOARDDIR)
+
+$(objutil)/%.o: $(objutil)/%.c
+ @printf " HOSTCC $(subst $(objutil)/,,$(@))\n"
+ $(HOSTCC) -MMD -I$(subst $(objutil)/,util/,$(dir $<)) -I$(dir $<) $(HOSTCFLAGS) -c -o $@ $<
+
+$(obj)/%.ramstage.o: $(obj)/%.c $(obj)/config.h
+ @printf " CC $(subst $(obj)/,,$(@))\n"
+ $(CC) -MMD $(CFLAGS) -c -o $@ $<
+
+ramstage-srcs:=$(obj)/mainboard/$(MAINBOARDDIR)/static.c
+romstage-srcs:=
+driver-srcs:=
+smm-srcs:=
+
+ramstage-objs:=
+romstage-objs:=
+driver-objs:=
+smm-objs:=
+types:=ramstage romstage driver smm
+
+# Clean -y variables, include Makefile.inc
+# Add paths to files in X-y to X-srcs
+# Add subdirs-y to subdirs
+includemakefiles= \
+ $(foreach type,$(2), $(eval $(type)-y:=)) \
+ $(eval subdirs-y:=) \
+ $(eval -include $(1)) \
+ $(foreach type,$(2), \
+ $(eval $(type)-srcs+= \
+ $$(subst $(top)/,, \
+ $$(abspath $$(addprefix $(dir $(1)),$$($(type)-y)))))) \
+ $(eval subdirs+=$$(subst $(CURDIR)/,,$$(abspath $$(addprefix $(dir $(1)),$$(subdirs-y)))))
+
+# For each path in $(subdirs) call includemakefiles
+# Repeat until subdirs is empty
+evaluate_subdirs= \
+ $(eval cursubdirs:=$(subdirs)) \
+ $(eval subdirs:=) \
+ $(foreach dir,$(cursubdirs), \
+ $(eval $(call includemakefiles,$(dir)/Makefile.inc,$(types)))) \
+ $(if $(subdirs),$(eval $(call evaluate_subdirs)))