[go: nahoru, domu]

Select autosiso vs autoninja in rebuild_baselines.py & benchmark.py

Changes gn_helpers.CreateBuildCommand() to use autoninja when no
deps files are present so that scripts work for clean builds.

Bug: None
Change-Id: I5cb4dbb2c718f129ca3856ab66ec043870407956
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4675666
Commit-Queue: Andrew Grieve <agrieve@chromium.org>
Reviewed-by: Peter Wen <wnwen@chromium.org>
Commit-Queue: Peter Wen <wnwen@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1168903}
diff --git a/build/gn_helpers.py b/build/gn_helpers.py
index 82c26974..58f5b8d 100644
--- a/build/gn_helpers.py
+++ b/build/gn_helpers.py
@@ -550,11 +550,16 @@
   suffix = '.bat' if sys.platform.startswith('win32') else ''
   # Prefer the version on PATH, but fallback to known version if PATH doesn't
   # have one (e.g. on bots).
-  prefix = ''
   if not shutil.which(f'autoninja{suffix}'):
     prefix = os.path.join(_CHROMIUM_ROOT, 'third_party', 'depot_tools', '')
-  ninja_cmd = [f'{prefix}autoninja{suffix}']
-  siso_cmd = [f'{prefix}autosiso{suffix}']
+    # Also - bots configure reclient manually, and so do not use the "auto"
+    # wrappers.
+    ninja_cmd = [f'{prefix}ninja{suffix}']
+    siso_cmd = [f'{prefix}siso{suffix}', 'ninja']
+  else:
+    ninja_cmd = [f'autoninja{suffix}']
+    siso_cmd = [f'autosiso{suffix}']
+
   if output_directory and os.path.relpath(output_directory) != '.':
     ninja_cmd += ['-C', output_directory]
     siso_cmd += ['-C', output_directory]
@@ -564,12 +569,6 @@
     raise Exception('Found both .siso_deps and .ninja_deps in '
                     f'{output_directory}. Not sure which build tool to use. '
                     'Please delete one, or better, run "gn clean".')
-  if not (siso_deps or ninja_deps):
-    raise Exception('Found neither .siso_deps nor .ninja_deps in '
-                    f'{output_directory}. Not sure which build tool to use. '
-                    'Please choose a tool via either:\n'
-                    f'{shlex.join(ninja_cmd)} build.ninja\n'
-                    f'{shlex.join(siso_cmd)} build.ninja\n')
   if siso_deps:
     return siso_cmd
   return ninja_cmd
diff --git a/build/gn_helpers_unittest.py b/build/gn_helpers_unittest.py
index 410f308..be9d0c7c 100755
--- a/build/gn_helpers_unittest.py
+++ b/build/gn_helpers_unittest.py
@@ -3,6 +3,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import os
 import pathlib
 import shutil
 import sys
@@ -317,14 +318,20 @@
   def test_CreateBuildCommand(self):
     with tempfile.TemporaryDirectory() as temp_dir:
       suffix = '.bat' if sys.platform.startswith('win32') else ''
-      with self.assertRaisesRegex(Exception, 'Found neither'):
-        gn_helpers.CreateBuildCommand(temp_dir)
+      self.assertEqual(f'autoninja{suffix}',
+                       gn_helpers.CreateBuildCommand(temp_dir)[0])
 
       siso_deps = pathlib.Path(temp_dir) / '.siso_deps'
       siso_deps.touch()
       self.assertEqual(f'autosiso{suffix}',
                        gn_helpers.CreateBuildCommand(temp_dir)[0])
 
+      with mock.patch('shutil.which', lambda x: None):
+        cmd = gn_helpers.CreateBuildCommand(temp_dir)
+        self.assertIn('depot_tools', cmd[0])
+        self.assertIn(f'{os.sep}siso', cmd[0])
+        self.assertEqual(['ninja', '-C', temp_dir], cmd[1:])
+
       ninja_deps = pathlib.Path(temp_dir) / '.ninja_deps'
       ninja_deps.touch()
 
@@ -336,7 +343,10 @@
                        gn_helpers.CreateBuildCommand(temp_dir)[0])
 
       with mock.patch('shutil.which', lambda x: None):
-        self.assertIn('depot_tools', gn_helpers.CreateBuildCommand(temp_dir)[0])
+        cmd = gn_helpers.CreateBuildCommand(temp_dir)
+        self.assertIn('depot_tools', cmd[0])
+        self.assertIn(f'{os.sep}ninja', cmd[0])
+        self.assertEqual(['-C', temp_dir], cmd[1:])
 
 
 if __name__ == '__main__':
diff --git a/third_party/android_build_tools/lint/rebuild_baselines.py b/third_party/android_build_tools/lint/rebuild_baselines.py
index 96714af..8b0ed86 100755
--- a/third_party/android_build_tools/lint/rebuild_baselines.py
+++ b/third_party/android_build_tools/lint/rebuild_baselines.py
@@ -8,15 +8,18 @@
 import logging
 import pathlib
 import subprocess
+import sys
 from typing import List, Optional
 
 _SRC_PATH = pathlib.Path(__file__).resolve().parents[3]
 _CLANK_PATH = _SRC_PATH / 'clank'
 _OUTPUT_DIR_ROOT = _SRC_PATH / 'out'
-_AUTONINJA_PATH = _SRC_PATH / 'third_party' / 'depot_tools' / 'autoninja'
 _NINJA_PATH = _SRC_PATH / 'third_party' / 'ninja' / 'ninja'
 _GN_PATH = _SRC_PATH / 'buildtools' / 'linux64' / 'gn'
 
+sys.path.insert(1, str(_SRC_PATH / 'build'))
+import gn_helpers
+
 
 def build_all_lint_targets(
         out_dir: pathlib.Path,
@@ -61,9 +64,9 @@
         logging.info('Did not find any targets to build.')
     else:
         logging.info(f'Re-building lint targets: {target_names}')
-        subprocess.run([_AUTONINJA_PATH, '-C', out_dir] + target_names,
-                       check=True,
-                       capture_output=not verbose)
+        cmd = gn_helpers.CreateBuildCommand(str(out_dir)) + target_names
+        # Do not show output by default since all lint warnings are printed.
+        subprocess.run(cmd, check=True, capture_output=not verbose)
 
     return built_targets + target_names
 
diff --git a/tools/android/build_speed/benchmark.py b/tools/android/build_speed/benchmark.py
index 70c5fae..fd10b18e 100755
--- a/tools/android/build_speed/benchmark.py
+++ b/tools/android/build_speed/benchmark.py
@@ -40,16 +40,17 @@
 USE_PYTHON_3 = f'{__file__} will only run under python3.'
 
 _SRC_ROOT = pathlib.Path(__file__).resolve().parents[3]
-sys.path.append(str(_SRC_ROOT / 'build/android'))
+sys.path.insert(1, str(_SRC_ROOT / 'build'))
+import gn_helpers
+
+sys.path.insert(1, str(_SRC_ROOT / 'build/android'))
 from pylib import constants
 import devil_chromium
 
-sys.path.append(str(_SRC_ROOT / 'third_party/catapult/devil'))
+sys.path.insert(1, str(_SRC_ROOT / 'third_party/catapult/devil'))
 from devil.android.sdk import adb_wrapper
 from devil.android import device_utils
 
-_AUTONINJA_PATH = _SRC_ROOT / 'third_party/depot_tools/autoninja'
-_NINJA_PATH = _SRC_ROOT / 'third_party/ninja/ninja'
 _GN_PATH = _SRC_ROOT / 'third_party/depot_tools/gn'
 
 _EMULATOR_AVD_DIR = _SRC_ROOT / 'tools/android/avd'
@@ -322,16 +323,11 @@
     return _run_and_time_cmd([str(_GN_PATH), 'gen', '-C', str(out_dir)])
 
 
-def _run_autoninja(out_dir: pathlib.Path, target: str) -> float:
-    return _run_and_time_cmd(
-        [str(_AUTONINJA_PATH), '-C',
-         str(out_dir), target])
-
-
-def _run_ninja(out_dir: pathlib.Path, target: str, j: str) -> float:
-    return _run_and_time_cmd(
-        [str(_NINJA_PATH), '-j', j, '-C',
-         str(out_dir), target])
+def _compile(out_dir: pathlib.Path, target: str, j: Optional[str]) -> float:
+    cmd = gn_helpers.CreateBuildCommand(str(out_dir))
+    if j is not None:
+        cmd += ['-j', j]
+    return _run_and_time_cmd(cmd + [target])
 
 
 def _run_install(out_dir: pathlib.Path, target: str,
@@ -352,10 +348,7 @@
 def _run_and_maybe_install(out_dir: pathlib.Path, target: str,
                            emulator: Optional[device_utils.DeviceUtils],
                            j: Optional[str]) -> float:
-    if j is None:
-        total_time = _run_autoninja(out_dir, target)
-    else:
-        total_time = _run_ninja(out_dir, target, j)
+    total_time = _compile(out_dir, target, j)
     if emulator:
         total_time += _run_install(out_dir, target, emulator.serial)
     return total_time