Selaa lähdekoodia

add siso wrapper

Bug: b/277855544, b/277859568
Change-Id: I520834647881745db7a42fd357bc829a7c6779d8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/4413517
Reviewed-by: Philipp Wollermann <philwo@google.com>
Reviewed-by: Joanna Wang <jojwang@chromium.org>
Reviewed-by: Takuto Ikuta <tikuta@chromium.org>
Reviewed-by: Junji Watanabe <jwata@google.com>
Commit-Queue: Joanna Wang <jojwang@chromium.org>
Commit-Queue: Junji Watanabe <jwata@google.com>
Auto-Submit: Fumitoshi Ukai <ukai@google.com>
Fumitoshi Ukai 2 vuotta sitten
vanhempi
commit
3ca8d0d0ca
6 muutettua tiedostoa jossa 100 lisäystä ja 7 poistoa
  1. 2 2
      BUILD_OWNERS
  2. 5 4
      OWNERS
  3. 8 0
      siso
  4. 12 0
      siso.bat
  5. 72 0
      siso.py
  6. 1 1
      tests/OWNERS

+ 2 - 2
GOMA_OWNERS → BUILD_OWNERS

@@ -1,6 +1,6 @@
-jojwang@chromium.org
-jojwang@google.com
 jwata@google.com
+philwo@google.com
+richardwa@google.com
 tikuta@chromium.org
 tikuta@google.com
 ukai@chromium.org

+ 5 - 4
OWNERS

@@ -13,14 +13,12 @@ per-file gn*=dpranke@google.com
 
 per-file ninja*=dpranke@google.com
 per-file ninja*=thakis@chromium.org
-per-file ninja_reclient.py=file://GOMA_OWNERS
+per-file ninja_reclient.py=file://BUILD_OWNERS
 per-file ninjalog*=tikuta@chromium.org
 per-file post_build_ninja_summary.py=brucedawson@chromium.org
 
 per-file presubmit*.py=brucedawson@chromium.org
 
-per-file cipd_manifest*=file://GOMA_OWNERS
-
 per-file pylint*=vapier@chromium.org
 
 per-file cbuildbot=file://CROS_OWNERS
@@ -33,7 +31,10 @@ per-file repo_launcher=file://CROS_OWNERS
 per-file CROS_OWNERS=file://CROS_OWNERS
 
 # for the Goma client update
-per-file cipd_manifest*=file://GOMA_OWNERS
+per-file cipd_manifest*=file://BUILD_OWNERS
+
+per-file BUILD_OWNERS=file://BUILD_OWNERS
+per-file siso*=file://BUILD_OWNERS
 
 # LUCI related tooling
 per-file bb*=file://LUCI_OWNERS

+ 8 - 0
siso

@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+
+# Copyright (c) 2023 Google Inc. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+base_dir=$(dirname "$0")
+PYTHONDONTWRITEBYTECODE=1 exec python3 "$base_dir/siso.py" "$@"

+ 12 - 0
siso.bat

@@ -0,0 +1,12 @@
+@echo off
+:: Copyright 2023 The Chromium Authors. All rights reserved.
+:: Use of this source code is governed by a BSD-style license that can be
+:: found in the LICENSE file.
+setlocal
+
+:: Ensure that "depot_tools" is somewhere in PATH so this tool can be used
+:: standalone, but allow other PATH manipulations to take priority.
+set PATH=%PATH%;%~dp0
+
+:: Defer control.
+python3 "%~dp0\siso.py" "%*"

+ 72 - 0
siso.py

@@ -0,0 +1,72 @@
+#!/usr/bin/env python3
+# Copyright 2023 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""This script is a wrapper around the siso binary that is pulled to
+third_party as part of gclient sync. It will automatically find the siso
+binary when run inside a gclient source tree, so users can just type
+"siso" on the command line."""
+
+import os
+import subprocess
+import sys
+
+import gclient_paths
+
+
+def main(args):
+  # On Windows the siso.bat script passes along the arguments enclosed in
+  # double quotes. This prevents multiple levels of parsing of the special '^'
+  # characters needed when compiling a single file.  When this case is detected,
+  # we need to split the argument. This means that arguments containing actual
+  # spaces are not supported by siso.bat, but that is not a real limitation.
+  if sys.platform.startswith('win') and len(args) == 2:
+    args = args[:1] + args[1].split()
+
+  # macOS's python sets CPATH, LIBRARY_PATH, SDKROOT implicitly.
+  # https://openradar.appspot.com/radar?id=5608755232243712
+  #
+  # Removing those environment variables to avoid affecting clang's behaviors.
+  if sys.platform == 'darwin':
+    os.environ.pop("CPATH", None)
+    os.environ.pop("LIBRARY_PATH", None)
+    os.environ.pop("SDKROOT", None)
+
+  environ = os.environ.copy()
+
+  # Get gclient root + src.
+  primary_solution_path = gclient_paths.GetPrimarySolutionPath()
+  gclient_root_path = gclient_paths.FindGclientRoot(os.getcwd())
+  gclient_src_root_path = None
+  if gclient_root_path:
+    gclient_src_root_path = os.path.join(gclient_root_path, 'src')
+
+  for base_path in set(
+      [primary_solution_path, gclient_root_path, gclient_src_root_path]):
+    if not base_path:
+      continue
+    env = environ.copy()
+    sisoenv_path = os.path.join(base_path, 'build', 'config', 'siso',
+                                '.sisoenv')
+    if os.path.exists(sisoenv_path):
+      with open(sisoenv_path) as f:
+        for line in f.readlines():
+          k, v = line.rstrip().split('=', 1)
+          env[k] = v
+    siso_path = os.path.join(base_path, 'third_party', 'siso',
+                             'siso' + gclient_paths.GetExeSuffix())
+    if os.path.isfile(siso_path):
+      return subprocess.call([siso_path] + args[1:], env=env)
+
+  print(
+      'depot_tools/siso.py: Could not find Siso in the third_party of '
+      'the current project.',
+      file=sys.stderr)
+  return 1
+
+
+if __name__ == '__main__':
+  try:
+    sys.exit(main(sys.argv))
+  except KeyboardInterrupt:
+    sys.exit(1)

+ 1 - 1
tests/OWNERS

@@ -1,4 +1,4 @@
 per-file autoninja_test.py=brucedawson@chromium.org
 per-file autoninja_test.py=tikuta@chromium.org
 per-file ninjalog_uploader_test.py=tikuta@chromium.org
-per-file ninja_reclient_test.py=file://GOMA_OWNERS
+per-file ninja_reclient_test.py=file://BUILD_OWNERS