From deb5575fbdc5b3f7cdd0a0aaed73b1f43af39eab Mon Sep 17 00:00:00 2001 From: Fumitoshi Ukai Date: Tue, 25 Feb 2025 23:28:16 -0800 Subject: [PATCH] autoninja: move use_siso default logic in autoninja.py chromium now doesn't use `use_siso` value for build graph, so no need to use use_siso_default.py in gn context. use_siso value is only used to determine autoninja use siso or ninja, so put use_siso default logic in autoninja.py. Will remove build/toolchain/use_siso_default.py in chromium Bug: 397994249 Change-Id: Idb31c4e75f0a1c3bc4a97089494ec16be9879a49 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/6301272 Reviewed-by: Takuto Ikuta Auto-Submit: Fumitoshi Ukai Commit-Queue: Fumitoshi Ukai --- autoninja.py | 60 ++++++++++++++++++++++++++++++++++------------------ 1 file changed, 39 insertions(+), 21 deletions(-) diff --git a/autoninja.py b/autoninja.py index 6e9b65823..020401196 100755 --- a/autoninja.py +++ b/autoninja.py @@ -40,6 +40,11 @@ import siso if sys.platform in ["darwin", "linux"]: import resource +_SISO_SUGGESTION = """Please run 'gn clean {output_dir}' when convenient to +upgrade this output directory to Siso (Chromium’s Ninja replacement). If you +run into any issues, please file a bug via go/siso-bug and switch back +temporarily by setting the GN arg 'use_siso = false'""" + _SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) _NINJALOG_UPLOADER = os.path.join(_SCRIPT_DIR, "ninjalog_uploader.py") @@ -156,30 +161,43 @@ def _get_use_reclient_value(output_dir): return r -def _get_use_siso_default(output_dir): - # TODO(379584977): move this in depot_tools - # once gn rule for action_remote.py, which check use_siso` is removed. +def _siso_supported(output_dir): root_dir = gclient_paths.GetPrimarySolutionPath() if not root_dir: - return None - script_path = os.path.join(root_dir, "build/toolchain/use_siso_default.py") - if not os.path.exists(script_path): - return None + return False + sisoenv_path = os.path.join(root_dir, "build/config/siso/.sisoenv") + if not os.path.exists(sisoenv_path): + return False + # If it's not chromium project, use Ninja. + gclient_args_gni = os.path.join(root_dir, "build/config/gclient_args.gni") + if not os.path.exists(gclient_args_gni): + return False + with open(gclient_args_gni) as f: + if "build_with_chromium = true" not in f.read(): + return False + # Use Siso by default for Googlers working on corp machine. + if _is_google_corp_machine(): + return True + # Otherwise, use Ninja, until we are ready to roll it out + # on non-corp machines, too. + # TODO(378078715): enable True by default. + return False - script = _import_from_path("use_siso_default", script_path) - try: - # Older versions of chromium won't have this function. - use_siso_default = getattr(script, "use_siso_default_and_suggest_siso", script.use_siso_default) - r = use_siso_default(output_dir) - except: - raise RuntimeError( - 'Could not call method "use_siso_default" in {}"'.format( - script_path)) - if not isinstance(r, bool): - raise TypeError( - 'Method "use_siso_default" in "{}" returns invalid result. Expected bool, got "{}" (type "{}")' - .format(script_path, r, type(r))) - return r + +def _get_use_siso_default(output_dir): + """Returns use_siso default value.""" + if not _siso_supported(output_dir): + return False + + # This output directory is already using Siso. + if os.path.exists(os.path.join(output_dir, ".siso_deps")): + return True + + # This output directory is still using Ninja. + if os.path.exists(os.path.join(output_dir, ".ninja_deps")): + print(_SISO_SUGGESTION.format(output_dir=output_dir), file=sys.stderr) + return False + return True def _main_inner(input_args, build_id, should_collect_logs=False):