diff --git a/src/arch/i386/Config.lb b/src/arch/i386/Config.lb index ec1dd1ee0d..4c0241d69c 100644 --- a/src/arch/i386/Config.lb +++ b/src/arch/i386/Config.lb @@ -79,8 +79,8 @@ if USE_FAILOVER_IMAGE 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 diff --git a/src/boot/hardwaremain.c b/src/boot/hardwaremain.c index bf2853a4b9..74f3dfcd97 100644 --- a/src/boot/hardwaremain.c +++ b/src/boot/hardwaremain.c @@ -36,6 +36,7 @@ it with the version available from LANL. #include #include #include +#include /** * @brief Main function of the DRAM part of coreboot. diff --git a/util/newconfig/config.g b/util/newconfig/config.g index eddff03092..c2f7e20aed 100644 --- a/util/newconfig/config.g +++ b/util/newconfig/config.g @@ -22,7 +22,9 @@ global_uses_options = {} 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 @@ class romimage: 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 startromimage(name): 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 writeimagemakefile(image): # 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 @@ def writemakefile(path): 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():