Index: src/boot/hardwaremain.c
===================================================================
--- src/boot/hardwaremain.c	(Revision 4048)
+++ src/boot/hardwaremain.c	(Arbeitskopie)
@@ -36,6 +36,7 @@
 #include <part/hard_reset.h>
 #include <part/init_timer.h>
 #include <boot/elf.h>
+#include <romfs.h>
 
 /**
  * @brief Main function of the DRAM part of coreboot.
Index: src/arch/i386/Config.lb
===================================================================
--- src/arch/i386/Config.lb	(Revision 4048)
+++ src/arch/i386/Config.lb	(Arbeitskopie)
@@ -79,8 +79,8 @@
 	end
 else
 	makerule coreboot.rom 
-		depends	"coreboot.strip buildrom $(PAYLOAD-1)" 
-		action "./buildrom $< $@ $(PAYLOAD-1) $(ROM_IMAGE_SIZE) $(ROM_SECTION_SIZE)"
+		depends	"coreboot.strip buildrom $(PAYLOAD-1)"
+		action "PAYLOAD=$(PAYLOAD-1); if [ $(CONFIG_ROMFS) -eq 1 ]; then PAYLOAD=/dev/null; fi; ./buildrom $< $@ $$PAYLOAD $(ROM_IMAGE_SIZE) $(ROM_SECTION_SIZE)"
 	end
 end
 
Index: util/newconfig/config.g
===================================================================
--- util/newconfig/config.g	(Revision 4048)
+++ util/newconfig/config.g	(Arbeitskopie)
@@ -22,7 +22,9 @@
 global_exported_options = []
 romimages = {}
 buildroms = []
+rommapping = {}
 curimage = 0
+bootblocksize = 0
 alloptions = 0 # override uses at top level
 
 local_path = re.compile(r'^\.')
@@ -277,8 +279,11 @@
 		self.arch = arch
 
 	def setpayload(self, payload):
+		global rommapping
 		self.payload = payload
 
+		rommapping[self.name] = payload
+
 	def setinitfile(self, initfile):
 		self.initfile = initfile
 
@@ -1351,7 +1356,10 @@
 
 def endromimage():
 	global curimage
+	global bootblocksize
 	mainboard()
+	imagesize = getoption("ROM_IMAGE_SIZE", curimage)
+	bootblocksize += imagesize
 	print "End ROMIMAGE"
 	curimage = 0
 	#curpart = 0
@@ -2209,16 +2217,22 @@
 
 #
 def writemakefile(path):
+	global rommapping
+	global bootblocksize
 	makefilepath = os.path.join(path, "Makefile")
 	print "Creating", makefilepath
 	file = safe_open(makefilepath, 'w+')
 	writemakefileheader(file, makefilepath)
 
 	# main rule
-	file.write("\nall:")
+	file.write("\nall: romtool")
 	for i in buildroms:
-		file.write(" %s" % i.name)
+		file.write(" %sfs" % i.name)
 	file.write("\n\n")	
+
+	# romtool rules
+	file.write("\nromtool:\n\tcd $(TOP)/util/romtool; make\n")
+
 	file.write("include Makefile.settings\n\n")
 	for i, o in romimages.items():
 		file.write("%s/coreboot.rom:\n" % o.getname())
@@ -2245,9 +2259,26 @@
 		for j in i.roms:
 			file.write(" %s/coreboot.rom " % j)
 		file.write("> %s\n\n" %i.name)
+		# build the bootblock here as well. 
+		file.write("\n")
+		file.write("\t cat ")
+		for j in i.roms:
+			file.write(" %s/coreboot.strip " % j)
+		file.write("> %s.bootblock\n\n" %i.name)
 
+	romsize = getoption("ROM_SIZE", image)
+	# i.name? That can not be right, can it? 
+	file.write("%sfs: %s $(TOP)/util/romtool/romtool\n" %(i.name,i.name));
+	file.write("\trm -f coreboot.romfs\n");
+	file.write("\t$(TOP)/util/romtool/romtool %sfs create %s %s %s.bootblock\n" % (i.name, romsize, bootblocksize, i.name))
+	for i in buildroms:
+		for j in i.roms:
+			#failover is a hack that will go away soon. 
+			if (j != "failover") and (rommapping[j] != "/dev/null"):
+				file.write("\t $(TOP)/util/romtool/romtool %sfs add-payload %s %s/payload\n" % (i.name, rommapping[j], j))
+		file.write("\t $(TOP)/util/romtool/romtool %sfs print\n" % i.name)
 
-	file.write(".PHONY: all clean")
+	file.write(".PHONY: all clean romtool")
 	for i in romimages.keys():
 		file.write(" %s-clean" % i)
 	for i, o in romimages.items():
