Export arc USE flag in metadata

BUG=b:34064810
TEST=cbuildbot_run_unittest
`cbuildbot --local -p chromiumos/chromite reef-compile-only-pre-cq`
Verify arc USE flag appears in logs as expected.

Change-Id: I206363392d35564ee2ec54023733e74bd068d2f0
Reviewed-on: https://chromium-review.googlesource.com/434222
Commit-Ready: Bernie Thompson <bhthompson@chromium.org>
Tested-by: Bernie Thompson <bhthompson@chromium.org>
Reviewed-by: Mike Frysinger <vapier@chromium.org>
(cherry picked from commit 5b556b565386221a405bf6c2dc4d08b84c22c4b6)
Reviewed-on: https://chromium-review.googlesource.com/442208
Reviewed-by: Bernie Thompson <bhthompson@chromium.org>
Commit-Queue: Bernie Thompson <bhthompson@chromium.org>
diff --git a/cbuildbot/cbuildbot_run.py b/cbuildbot/cbuildbot_run.py
index b4be6c2..1bbc9bd 100644
--- a/cbuildbot/cbuildbot_run.py
+++ b/cbuildbot/cbuildbot_run.py
@@ -802,6 +802,10 @@
 
     return calc_version
 
+  def HasUseFlag(self, board, use_flag):
+    """Return the state of a USE flag for a board as a boolean."""
+    return use_flag in portage_util.GetBoardUseFlags(board)
+
   def DetermineAndroidBranch(self, board):
     """Returns the Android branch in use by the active container ebuild."""
     try:
diff --git a/cbuildbot/stages/android_stages.py b/cbuildbot/stages/android_stages.py
index ad6d073..e2346dc 100644
--- a/cbuildbot/stages/android_stages.py
+++ b/cbuildbot/stages/android_stages.py
@@ -82,10 +82,11 @@
                            generic_stages.ArchivingStageMixin):
   """Stage that records Android container version in metadata.
 
-  This should attempt to generate three types of metadata:
+  This should attempt to generate four types of metadata:
   - a unique Android version if it exists.
   - a unique Android branch if it exists.
   - a per-board Android version for each board.
+  - a per-board arc USE flag value.
   """
 
   def __init__(self, builder_run, **kwargs):
@@ -136,6 +137,11 @@
           logging.info('Board %s has Android branch %s', board, branch)
         except cbuildbot_run.NoAndroidBranchError as ex:
           logging.info('Board %s does not contain Android (%s)', board, ex)
+        arc_use = self._run.HasUseFlag(board, 'arc')
+        logging.info('Board %s %s arc USE flag set.', board,
+                     'has' if arc_use else 'does not have')
+        builder_run.attrs.metadata.UpdateBoardDictWithDict(
+            board, {'arc-use-set': arc_use})
     # If there wasn't a version or branch specified in the manifest but there is
     # a unique one across all the boards, treat it as the version for the
     # entire step.
diff --git a/lib/portage_util.py b/lib/portage_util.py
index 8fecc38..fc23dca 100644
--- a/lib/portage_util.py
+++ b/lib/portage_util.py
@@ -1655,6 +1655,15 @@
   return path
 
 
+def GetBoardUseFlags(board):
+  """Returns a list of USE flags in effect for a board."""
+  portageq = 'portageq-%s' % board
+  cmd = [portageq, 'envvar', 'USE']
+  return cros_build_lib.RunCommand(
+      cmd, cwd=constants.SOURCE_ROOT, enter_chroot=True,
+      capture_output=True).output.split()
+
+
 def GetPackageDependencies(board, package):
   """Returns the depgraph list of packages for a board and package."""
   emerge = 'emerge-%s' % board