xref: /aosp_15_r20/external/perfetto/tools/run_buildtools_binary.py (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1*6dbdd20aSAndroid Build Coastguard Worker#!/usr/bin/env python3
2*6dbdd20aSAndroid Build Coastguard Worker# Copyright (C) 2021 The Android Open Source Project
3*6dbdd20aSAndroid Build Coastguard Worker#
4*6dbdd20aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
5*6dbdd20aSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
6*6dbdd20aSAndroid Build Coastguard Worker# You may obtain a copy of the License at
7*6dbdd20aSAndroid Build Coastguard Worker#
8*6dbdd20aSAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
9*6dbdd20aSAndroid Build Coastguard Worker#
10*6dbdd20aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
11*6dbdd20aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
12*6dbdd20aSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*6dbdd20aSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
14*6dbdd20aSAndroid Build Coastguard Worker# limitations under the License.
15*6dbdd20aSAndroid Build Coastguard Worker""" A wrapper to run gn, ninja and other buildtools/ for all platforms. """
16*6dbdd20aSAndroid Build Coastguard Worker
17*6dbdd20aSAndroid Build Coastguard Workerfrom __future__ import print_function
18*6dbdd20aSAndroid Build Coastguard Worker
19*6dbdd20aSAndroid Build Coastguard Workerimport os
20*6dbdd20aSAndroid Build Coastguard Workerimport subprocess
21*6dbdd20aSAndroid Build Coastguard Workerimport sys
22*6dbdd20aSAndroid Build Coastguard Worker
23*6dbdd20aSAndroid Build Coastguard Workerfrom platform import system
24*6dbdd20aSAndroid Build Coastguard Worker
25*6dbdd20aSAndroid Build Coastguard WorkerROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
26*6dbdd20aSAndroid Build Coastguard Worker
27*6dbdd20aSAndroid Build Coastguard Worker
28*6dbdd20aSAndroid Build Coastguard Workerdef run_buildtools_binary(args):
29*6dbdd20aSAndroid Build Coastguard Worker  if len(args) < 1:
30*6dbdd20aSAndroid Build Coastguard Worker    print('Usage %s command [args]\n' % sys.argv[0])
31*6dbdd20aSAndroid Build Coastguard Worker    return 1
32*6dbdd20aSAndroid Build Coastguard Worker
33*6dbdd20aSAndroid Build Coastguard Worker  sys_name = system().lower()
34*6dbdd20aSAndroid Build Coastguard Worker  os_dir = None
35*6dbdd20aSAndroid Build Coastguard Worker  ext = ''
36*6dbdd20aSAndroid Build Coastguard Worker  if sys_name == 'windows':
37*6dbdd20aSAndroid Build Coastguard Worker    os_dir = 'win'
38*6dbdd20aSAndroid Build Coastguard Worker    ext = '.exe'
39*6dbdd20aSAndroid Build Coastguard Worker  elif sys_name == 'darwin':
40*6dbdd20aSAndroid Build Coastguard Worker    os_dir = 'mac'
41*6dbdd20aSAndroid Build Coastguard Worker  elif sys_name == 'linux':
42*6dbdd20aSAndroid Build Coastguard Worker    os_dir = 'linux64'
43*6dbdd20aSAndroid Build Coastguard Worker  else:
44*6dbdd20aSAndroid Build Coastguard Worker    print('OS not supported: %s\n' % sys_name)
45*6dbdd20aSAndroid Build Coastguard Worker    return 1
46*6dbdd20aSAndroid Build Coastguard Worker
47*6dbdd20aSAndroid Build Coastguard Worker  cmd = args[0]
48*6dbdd20aSAndroid Build Coastguard Worker  args = args[1:]
49*6dbdd20aSAndroid Build Coastguard Worker
50*6dbdd20aSAndroid Build Coastguard Worker  # Some binaries have been migrated to third_party/xxx. Look into that path
51*6dbdd20aSAndroid Build Coastguard Worker  # first (see b/261398524)
52*6dbdd20aSAndroid Build Coastguard Worker  exe_path = os.path.join(ROOT_DIR, 'third_party', cmd, cmd) + ext
53*6dbdd20aSAndroid Build Coastguard Worker  if not os.path.exists(exe_path):
54*6dbdd20aSAndroid Build Coastguard Worker    exe_path = os.path.join(ROOT_DIR, 'buildtools', os_dir, cmd) + ext
55*6dbdd20aSAndroid Build Coastguard Worker
56*6dbdd20aSAndroid Build Coastguard Worker  if sys_name == 'windows':
57*6dbdd20aSAndroid Build Coastguard Worker    # execl() behaves oddly on Windows: the spawned process doesn't seem to
58*6dbdd20aSAndroid Build Coastguard Worker    # receive CTRL+C. Use subprocess instead.
59*6dbdd20aSAndroid Build Coastguard Worker    sys.exit(subprocess.call([exe_path] + args))
60*6dbdd20aSAndroid Build Coastguard Worker  else:
61*6dbdd20aSAndroid Build Coastguard Worker    os.execl(exe_path, os.path.basename(exe_path), *args)
62*6dbdd20aSAndroid Build Coastguard Worker
63*6dbdd20aSAndroid Build Coastguard Worker
64*6dbdd20aSAndroid Build Coastguard Workerif __name__ == '__main__':
65*6dbdd20aSAndroid Build Coastguard Worker  run_buildtools_binary(sys.argv[1:])
66