cros_bundle_firmware: allow building GBBs without bitmaps

Embedded chrome OS targets might not require bitmaps in the GBB, it is
useful to be able to build a bootimage without requiring bitmaps.

This patch adds an option (--skip-bmpblk), which makes sure that
futility is invoked in a manner not requiring inclusion of the bitmap.

BUG=chrome-os-partner:31438
TEST=ran 'cros_bundle_firmware' with options requiring and skipping
     bitmap, both cases resulted in a valid firmware image

Change-Id: I3e109b4d256dd16e1f26597ee8c0caee26d2d098
Signed-off-by: Vadim Bendebury <vbendeb@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/232045
Reviewed-by: Bill Richardson <wfrichar@chromium.org>
diff --git a/host/lib/bundle_firmware.py b/host/lib/bundle_firmware.py
index c597c98..afacb4b 100644
--- a/host/lib/bundle_firmware.py
+++ b/host/lib/bundle_firmware.py
@@ -161,7 +161,7 @@
                coreboot_elf=None,
                postload=None, seabios=None, exynos_bl1=None, exynos_bl2=None,
                skeleton=None, ecrw=None, ecro=None, pdrw=None,
-               kernel=None, blobs=None):
+               kernel=None, blobs=None, skip_bmpblk=False):
     """Set up files required for Bundle.
 
     Args:
@@ -181,6 +181,7 @@
       pdrw: The filename of the PD (PD embedded controller) read-write file.
       kernel: The filename of the kernel file if any.
       blobs: List of (type, filename) of arbitrary blobs.
+      skip_bmpblk: True if no bmpblk is required
     """
     self._board = board
     self.uboot_fname = uboot
@@ -198,6 +199,7 @@
     self.pdrw_fname = pdrw
     self.kernel_fname = kernel
     self.blobs = dict(blobs or ())
+    self.skip_bmpblk = skip_bmpblk
 
   def SetOptions(self, small, gbb_flags, force_rw=False, force_efs=False):
     """Set up options supported by Bundle.
@@ -410,15 +412,19 @@
     sizes = ['%#x' % size for size in sizes]
     gbb = 'gbb.bin'
     keydir = self._tools.Filename(self._keydir)
+
+    gbb_set_command = ['-s',
+                       '--hwid=%s' % hardware_id,
+                       '--rootkey=%s/root_key.vbpubk' % keydir,
+                       '--recoverykey=%s/recovery_key.vbpubk' % keydir,
+                       '--flags=%d' % gbb_flags,
+                       gbb]
+    if not self.skip_bmpblk:
+      gbb_set_command[-1:-1] = ['--bmpfv=%s' % self._tools.Filename(
+          self.bmpblk_fname),]
+
     self._tools.Run('gbb_utility', ['-c', ','.join(sizes), gbb], cwd=odir)
-    self._tools.Run('gbb_utility', ['-s',
-        '--hwid=%s' % hardware_id,
-        '--rootkey=%s/root_key.vbpubk' % keydir,
-        '--recoverykey=%s/recovery_key.vbpubk' % keydir,
-        '--bmpfv=%s' % self._tools.Filename(self.bmpblk_fname),
-        '--flags=%d' % gbb_flags,
-        gbb],
-        cwd=odir)
+    self._tools.Run('gbb_utility', gbb_set_command, cwd=odir)
     return os.path.join(odir, gbb)
 
   def _SignBootstub(self, bct, bootstub, text_base):