blob: f19348e83fa8ab5047925ed7d61a120c49ff2061 [file] [log] [blame]
import os
import subprocess
from env import FUCHSIA_DIR, BUILD_DIR, PLATFORM
TOPAZ_DIR = os.path.join(FUCHSIA_DIR, 'topaz')
GO_DIR = os.path.join(FUCHSIA_DIR, 'third_party/go')
FIDLC_DIR = 'zircon/tools/fidl'
FIDLGEN_DIR = 'garnet/go/src/fidl'
FIDLGEN_GOLDENS_DIR = 'garnet/go/src/fidl/compiler/backend/goldens'
FIDLDOC_DIR = 'tools/fidl/fidldoc'
FIDLGEN_DART_DIR = 'topaz/bin/fidlgen_dart'
FIDLGEN_GO_DIR = 'tools/fidl/fidlgen_go'
FIDLGEN_BACKEND_DIRS = [
FIDLGEN_DIR,
'tools/fidl/fidlgen_llcpp',
FIDLGEN_GO_DIR,
'tools/fidl/fidlgen_hlcpp',
'tools/fidl/fidlgen_libfuzzer',
'tools/fidl/fidlgen_rust',
'tools/fidl/fidlgen_syzkaller',
]
TEST_FIDLC = os.path.join(BUILD_DIR, 'host_x64/fidl-compiler')
FIDLGEN_TEST_TARGETS = FIDLGEN_BACKEND_DIRS
FIDLGEN_DART_TEST_TARGET = '//topaz/bin/fidlgen_dart'
HLCPP_TEST_TARGET = '//sdk/lib/fidl'
LLCPP_TEST_TARGET = '//src/lib/fidl/llcpp'
C_TEST_TARGET = '//src/lib/fidl/c'
# these tests can't be consolidated under a GN label, because all third_party/go
# tests are located under //third_party/go
GO_TEST_TARGETS = [
'go-fidl-tests',
'go_extended_fidl_test',
'go_unsafevalue_test',
]
RUST_TEST_TARGET = '//src/lib/fidl/rust'
DART_TEST_TARGET = 'fidl_bindings_test'
GIDL_TEST_TARGET = '//tools/fidl/gidl'
HLCPP_CONFORMANCE_TEST_TARGET = 'conformance_test'
HLCPP_HOST_CONFORMANCE_TEST_TARGET = 'fidl_cpp_host_conformance_test'
LLCPP_CONFORMANCE_TEST_TARGET = 'fidl_llcpp_conformance_test'
GO_CONFORMANCE_TEST_TARGET = 'fidl_go_conformance'
RUST_CONFORMANCE_TEST_TARGET = 'fidl_rust_conformance_tests'
HLCPP_RUNTIME = 'sdk/lib/fidl'
LLCPP_RUNTIME = 'src/lib/fidl/llcpp'
C_RUNTIME = 'zircon/system/ulib/fidl'
GO_RUNTIME = 'third_party/go/src/syscall/zx/fidl'
RUST_RUNTIME = 'src/lib/fidl/rust'
DART_RUNTIME = 'topaz/public/dart/fidl/lib'
BUILD_FIDLC = ['fx', 'ninja', '-C', BUILD_DIR, 'host_x64/fidlc']
BUILD_FIDLC_TESTS = ['fx', 'ninja', '-C', BUILD_DIR, 'host_x64/fidl-compiler']
BUILD_FIDLGEN = ['fx', 'build', 'tools/fidl']
BUILD_FIDLGEN_DART = ['fx', 'ninja', '-C', BUILD_DIR, 'host_x64/fidlgen_dart']
def run(command, dry_run, exit_on_failure=False):
"""
Run the given command, returning True if it completed successfuly. If
dry_run is true, just prints rather than running. If exit_on_failure is
true, exits instead of returning False.
WARNING: passing a str command will use shell=True
"""
if dry_run:
print('would run: {}'.format(command))
return True
retcode = subprocess.call(command, shell=isinstance(command, str))
success = retcode == 0
if exit_on_failure and not success:
print_err('Error: command failed with status {}! {}'.format(
retcode, command))
exit(1)
return success
def get_changed_files():
"""
Return a List of paths relative to FUCHSIA_DIR of changed files relative to
the parent. This uses the same logic as fx format-code.
"""
upstream = "origin/master"
local_commit = subprocess.check_output(
"git rev-list HEAD ^{} -- 2>/dev/null | tail -1".format(upstream),
shell=True).strip().decode()
diff_base = subprocess.check_output(
['git', 'rev-parse', local_commit +
'^']).strip().decode() if local_commit else "HEAD"
files = subprocess.check_output(['git', 'diff', '--name-only',
diff_base]).strip().decode().split('\n')
repo = subprocess.check_output(['git', 'rev-parse',
'--show-toplevel']).strip().decode()
# add prefixes so that all and targets can be specified relative to FUCHSIA_DIR
if repo.endswith('topaz'):
files = [os.path.join('topaz', p) for p in files]
elif repo.endswith('third_party/go'):
files = [os.path.join('third_party/go', p) for p in files]
return files
RED = '\033[1;31m'
YELLOW = '\033[1;33m'
NC = '\033[0m'
def print_err(s):
print_color(s, RED)
def print_warning(s):
print_color(s, YELLOW)
def print_color(s, color):
print('{}{}{}'.format(color, s, NC))