cros_generate_breakpad_symbols: add --sysroot support

We don't use it directly, but makes for easier testing and local uploads.

BUG=None
TEST=precq passes

Change-Id: I0779b350ae794890fc8da69dcbed0795744f42c9
Reviewed-on: https://chromium-review.googlesource.com/1091960
Commit-Ready: Mike Frysinger <vapier@chromium.org>
Tested-by: Mike Frysinger <vapier@chromium.org>
Reviewed-by: Benjamin Gordon <bmgordon@chromium.org>
diff --git a/scripts/cros_generate_breakpad_symbols.py b/scripts/cros_generate_breakpad_symbols.py
index 8e70de5..e24bff7 100644
--- a/scripts/cros_generate_breakpad_symbols.py
+++ b/scripts/cros_generate_breakpad_symbols.py
@@ -185,10 +185,10 @@
   Returns:
     The number of errors that were encountered.
   """
-  if breakpad_dir is None:
-    breakpad_dir = FindBreakpadDir(board)
   if sysroot is None:
     sysroot = cros_build_lib.GetSysroot(board=board)
+  if breakpad_dir is None:
+    breakpad_dir = FindBreakpadDir(board, sysroot=sysroot)
   if clean_breakpad:
     logging.info('cleaning out %s first', breakpad_dir)
     osutils.RmDir(breakpad_dir, ignore_missing=True, sudo=True)
@@ -197,7 +197,7 @@
   if not os.access(breakpad_dir, os.W_OK):
     cros_build_lib.SudoRunCommand(['chown', '-R', str(os.getuid()),
                                    breakpad_dir])
-  debug_dir = FindDebugDir(board)
+  debug_dir = FindDebugDir(board, sysroot=sysroot)
   exclude_paths = [os.path.join(debug_dir, x) for x in exclude_dirs]
   if file_list is None:
     file_list = []
@@ -282,15 +282,16 @@
   return bg_errors.value
 
 
-def FindDebugDir(board):
+def FindDebugDir(board, sysroot=None):
   """Given a |board|, return the path to the split debug dir for it"""
-  sysroot = cros_build_lib.GetSysroot(board=board)
+  if sysroot is None:
+    sysroot = cros_build_lib.GetSysroot(board=board)
   return os.path.join(sysroot, 'usr', 'lib', 'debug')
 
 
-def FindBreakpadDir(board):
+def FindBreakpadDir(board, sysroot=None):
   """Given a |board|, return the path to the breakpad dir for it"""
-  return os.path.join(FindDebugDir(board), 'breakpad')
+  return os.path.join(FindDebugDir(board, sysroot=sysroot), 'breakpad')
 
 
 def main(argv):
@@ -299,7 +300,9 @@
   parser.add_argument('--board', default=None,
                       help='board to generate symbols for')
   parser.add_argument('--breakpad_root', type='path', default=None,
-                      help='root directory for breakpad symbols')
+                      help='root output directory for breakpad symbols')
+  parser.add_argument('--sysroot', type='path', default=None,
+                      help='root input directory for files')
   parser.add_argument('--exclude-dir', type=str, action='append',
                       default=[],
                       help='directory (relative to |board| root) to not search')
@@ -319,12 +322,13 @@
   opts = parser.parse_args(argv)
   opts.Freeze()
 
-  if opts.board is None:
-    cros_build_lib.Die('--board is required')
+  if opts.board is None and opts.sysroot is None:
+    cros_build_lib.Die('--board or --sysroot is required')
 
   ret = GenerateBreakpadSymbols(opts.board, breakpad_dir=opts.breakpad_root,
                                 strip_cfi=opts.strip_cfi,
                                 generate_count=opts.generate_count,
+                                sysroot=opts.sysroot,
                                 num_processes=opts.jobs,
                                 clean_breakpad=opts.clean,
                                 exclude_dirs=opts.exclude_dir,