xref: /aosp_15_r20/external/perfetto/tools/test_gen_amalgamated.py (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1*6dbdd20aSAndroid Build Coastguard Worker#!/usr/bin/env python3
2*6dbdd20aSAndroid Build Coastguard Worker# Copyright (C) 2019 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
16*6dbdd20aSAndroid Build Coastguard Workerfrom __future__ import print_function
17*6dbdd20aSAndroid Build Coastguard Worker
18*6dbdd20aSAndroid Build Coastguard Workerimport os
19*6dbdd20aSAndroid Build Coastguard Workerimport shutil
20*6dbdd20aSAndroid Build Coastguard Workerimport subprocess
21*6dbdd20aSAndroid Build Coastguard Workerimport sys
22*6dbdd20aSAndroid Build Coastguard Worker
23*6dbdd20aSAndroid Build Coastguard Workerfrom compat import quote
24*6dbdd20aSAndroid Build Coastguard Workerfrom platform import system
25*6dbdd20aSAndroid Build Coastguard Worker
26*6dbdd20aSAndroid Build Coastguard WorkerGN_ARGS = ' '.join(
27*6dbdd20aSAndroid Build Coastguard Worker    quote(s) for s in (
28*6dbdd20aSAndroid Build Coastguard Worker        'is_debug=false',
29*6dbdd20aSAndroid Build Coastguard Worker        'is_perfetto_build_generator=true',
30*6dbdd20aSAndroid Build Coastguard Worker        'is_perfetto_embedder=true',
31*6dbdd20aSAndroid Build Coastguard Worker        'use_custom_libcxx=false',
32*6dbdd20aSAndroid Build Coastguard Worker        'enable_perfetto_ipc=true',
33*6dbdd20aSAndroid Build Coastguard Worker    ))
34*6dbdd20aSAndroid Build Coastguard Worker
35*6dbdd20aSAndroid Build Coastguard WorkerROOT_DIR = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
36*6dbdd20aSAndroid Build Coastguard WorkerOUT_DIR = os.path.join('out', 'amalgamated')
37*6dbdd20aSAndroid Build Coastguard WorkerGEN_AMALGAMATED = os.path.join('tools', 'gen_amalgamated')
38*6dbdd20aSAndroid Build Coastguard Worker
39*6dbdd20aSAndroid Build Coastguard Worker
40*6dbdd20aSAndroid Build Coastguard Workerdef call(cmd, *args):
41*6dbdd20aSAndroid Build Coastguard Worker  command = [cmd] + list(args)
42*6dbdd20aSAndroid Build Coastguard Worker  print('Running:', ' '.join(quote(c) for c in command))
43*6dbdd20aSAndroid Build Coastguard Worker  try:
44*6dbdd20aSAndroid Build Coastguard Worker    return subprocess.check_output(command, cwd=ROOT_DIR).decode()
45*6dbdd20aSAndroid Build Coastguard Worker  except subprocess.CalledProcessError as e:
46*6dbdd20aSAndroid Build Coastguard Worker    assert False, 'Command: %s failed: %s' % (' '.join(command), e)
47*6dbdd20aSAndroid Build Coastguard Worker
48*6dbdd20aSAndroid Build Coastguard Worker
49*6dbdd20aSAndroid Build Coastguard Workerdef check_amalgamated_output():
50*6dbdd20aSAndroid Build Coastguard Worker  call(GEN_AMALGAMATED, '--quiet')
51*6dbdd20aSAndroid Build Coastguard Worker
52*6dbdd20aSAndroid Build Coastguard Worker
53*6dbdd20aSAndroid Build Coastguard Workerdef check_amalgamated_build():
54*6dbdd20aSAndroid Build Coastguard Worker  args = [
55*6dbdd20aSAndroid Build Coastguard Worker      '-std=c++17', '-Werror', '-Wall', '-Wextra',
56*6dbdd20aSAndroid Build Coastguard Worker      '-DPERFETTO_AMALGAMATED_SDK_TEST', '-I' + OUT_DIR,
57*6dbdd20aSAndroid Build Coastguard Worker      OUT_DIR + '/perfetto.cc', 'test/client_api_example.cc', '-o',
58*6dbdd20aSAndroid Build Coastguard Worker      OUT_DIR + '/test'
59*6dbdd20aSAndroid Build Coastguard Worker  ]
60*6dbdd20aSAndroid Build Coastguard Worker  if system().lower() == 'linux':
61*6dbdd20aSAndroid Build Coastguard Worker    args += ['-lpthread', '-lrt']
62*6dbdd20aSAndroid Build Coastguard Worker
63*6dbdd20aSAndroid Build Coastguard Worker  if sys.platform.startswith('linux'):
64*6dbdd20aSAndroid Build Coastguard Worker    llvm_script = os.path.join(ROOT_DIR, 'gn', 'standalone', 'toolchain',
65*6dbdd20aSAndroid Build Coastguard Worker                               'linux_find_llvm.py')
66*6dbdd20aSAndroid Build Coastguard Worker    cxx = subprocess.check_output([llvm_script]).splitlines()[2].decode()
67*6dbdd20aSAndroid Build Coastguard Worker  else:
68*6dbdd20aSAndroid Build Coastguard Worker    cxx = 'clang++'
69*6dbdd20aSAndroid Build Coastguard Worker  call(cxx, *args)
70*6dbdd20aSAndroid Build Coastguard Worker
71*6dbdd20aSAndroid Build Coastguard Worker
72*6dbdd20aSAndroid Build Coastguard Workerdef check_amalgamated_dependencies():
73*6dbdd20aSAndroid Build Coastguard Worker  os_deps = {}
74*6dbdd20aSAndroid Build Coastguard Worker  for os_name in ['android', 'linux', 'mac']:
75*6dbdd20aSAndroid Build Coastguard Worker    gn_args = (' target_os="%s"' % os_name) + GN_ARGS
76*6dbdd20aSAndroid Build Coastguard Worker    os_deps[os_name] = call(GEN_AMALGAMATED, '--gn_args', gn_args, '--out',
77*6dbdd20aSAndroid Build Coastguard Worker                            OUT_DIR, '--dump-deps', '--quiet').split('\n')
78*6dbdd20aSAndroid Build Coastguard Worker  for os_name, deps in os_deps.items():
79*6dbdd20aSAndroid Build Coastguard Worker    for dep in deps:
80*6dbdd20aSAndroid Build Coastguard Worker      for other_os, other_deps in os_deps.items():
81*6dbdd20aSAndroid Build Coastguard Worker        if not dep in other_deps:
82*6dbdd20aSAndroid Build Coastguard Worker          raise AssertionError('Discrepancy in amalgamated build dependencies: '
83*6dbdd20aSAndroid Build Coastguard Worker                               '%s is missing on %s.' % (dep, other_os))
84*6dbdd20aSAndroid Build Coastguard Worker
85*6dbdd20aSAndroid Build Coastguard Worker
86*6dbdd20aSAndroid Build Coastguard Workerdef main():
87*6dbdd20aSAndroid Build Coastguard Worker  check_amalgamated_dependencies()
88*6dbdd20aSAndroid Build Coastguard Worker  check_amalgamated_output()
89*6dbdd20aSAndroid Build Coastguard Worker  check_amalgamated_build()
90*6dbdd20aSAndroid Build Coastguard Worker  shutil.rmtree(OUT_DIR)
91*6dbdd20aSAndroid Build Coastguard Worker
92*6dbdd20aSAndroid Build Coastguard Worker
93*6dbdd20aSAndroid Build Coastguard Workerif __name__ == '__main__':
94*6dbdd20aSAndroid Build Coastguard Worker  exit(main())
95