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