lib: Parallel emerge during ramfs/kernel builds

.. since it's possible that dependent packages can be emerge'ing for the
first time, then the non-parallel emerge'ing is not efficient.

BUG=none
TEST=./run_tests

Change-Id: I6cdccfe30084cedd8385681f01f25b706ac000f8
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/4229286
Reviewed-by: Mike Frysinger <vapier@chromium.org>
Tested-by: Jae Hoon Kim <kimjae@chromium.org>
Commit-Queue: Jae Hoon Kim <kimjae@chromium.org>
diff --git a/scripts/build_minios.py b/scripts/build_minios.py
index 67b048d..7140ba7 100644
--- a/scripts/build_minios.py
+++ b/scripts/build_minios.py
@@ -7,6 +7,7 @@
 And inserting them into the Chromium OS images.
 """
 
+import os
 import tempfile
 
 from chromite.lib import commandline
@@ -69,6 +70,13 @@
         "debug flags. Use with --mod-for-dev in case kernel is "
         "not already built or needs to be rebuilt.",
     )
+    parser.add_argument(
+        "--jobs",
+        type=int,
+        default=os.cpu_count(),
+        help="Number of packages to build in parallel. "
+        "(Default: %(default)s)",
+    )
     return parser
 
 
@@ -88,6 +96,7 @@
             opts.private_key,
             opts.keyblock,
             opts.serial,
+            opts.jobs,
             build_kernel,
             opts.mod_for_dev,
         )
diff --git a/scripts/build_minios_unittest.py b/scripts/build_minios_unittest.py
index a6d54b1..1e0d4cc 100644
--- a/scripts/build_minios_unittest.py
+++ b/scripts/build_minios_unittest.py
@@ -39,6 +39,11 @@
         test_board = "test-board"
         test_version = "0.0.0.0"
         test_image = "/some/image/path"
+        self.PatchObject(
+            os,
+            "cpu_count",
+            return_value=777,
+        )
         build_minios.main(
             [
                 # --board is a required argument.
@@ -65,6 +70,7 @@
                     constants.MINIOS_DATA_PRIVATE_KEY,
                     constants.MINIOS_KEYBLOCK,
                     None,
+                    777,
                     True,
                     False,
                 )
@@ -91,6 +97,7 @@
         test_private_key = "test-private-key"
         test_keyblock = "test-keyblock"
         test_serial = "test-serial"
+        test_jobs = 777
         build_minios.main(
             [
                 # --board is a required argument.
@@ -113,6 +120,8 @@
                 "--serial",
                 test_serial,
                 "--force-build",
+                "--jobs",
+                str(test_jobs),
             ]
         )
 
@@ -128,6 +137,7 @@
                     test_private_key,
                     test_keyblock,
                     test_serial,
+                    test_jobs,
                     True,
                     False,
                 )
@@ -149,6 +159,13 @@
         test_board = "test-board"
         test_version = "0.0.0.0"
         test_image = "/some/image/path"
+        test_jobs = 777
+        self.PatchObject(
+            os,
+            "cpu_count",
+            return_value=str(test_jobs),
+        )
+
         build_minios.main(
             [
                 # --board is a required argument.
@@ -176,6 +193,7 @@
                     constants.MINIOS_DATA_PRIVATE_KEY,
                     constants.MINIOS_KEYBLOCK,
                     None,
+                    test_jobs,
                     False,
                     True,
                 )
@@ -197,6 +215,7 @@
         test_board = "test-board"
         test_version = "0.0.0.0"
         test_image = "/some/image/path"
+        test_jobs = 777
         build_minios.main(
             [
                 # --board is a required argument.
@@ -210,6 +229,8 @@
                 test_image,
                 "--mod-for-dev",
                 "--force-build",
+                "--jobs",
+                str(test_jobs),
             ]
         )
 
@@ -225,6 +246,7 @@
                     constants.MINIOS_DATA_PRIVATE_KEY,
                     constants.MINIOS_KEYBLOCK,
                     None,
+                    test_jobs,
                     True,
                     True,
                 )