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