aboutsummaryrefslogtreecommitdiffhomepage
path: root/infra/bots/recipe_modules/build/chromecast.py
blob: fcccf4df2faa782320d57310cb94b35751e1049b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# Copyright 2018 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.


def compile_fn(api, checkout_root, out_dir):
  skia_dir      = checkout_root.join('skia')
  configuration = api.vars.builder_cfg.get('configuration')
  target_arch   = api.vars.builder_cfg.get('target_arch')

  # TODO(kjlubick): can this toolchain be replaced/shared with chromebook?
  toolchain_dir = api.vars.slave_dir.join('cast_toolchain', 'armv7a')
  gles_dir = api.vars.slave_dir.join('chromebook_arm_gles')

  target  = ['-target', 'armv7a-cros-linux-gnueabi']
  sysroot = ['--sysroot',
             '%s/usr/armv7a-cros-linux-gnueabi' % toolchain_dir]

  extra_asmflags = target

  extra_cflags = target + sysroot + [
    '-I%s' % gles_dir.join('include'),
    '-DMESA_EGL_NO_X11_HEADERS',
    "-DSK_NO_COMMAND_BUFFER",
    # Avoid unused warning with yyunput
    '-Wno-error=unused-function',
    # Makes the binary small enough to fit on the small disk.
    '-g0',
    ('-DDUMMY_cast_toolchain_version=%s' %
     api.run.asset_version('cast_toolchain', skia_dir)),
  ]

  extra_ldflags = target + sysroot + [
    # Chromecast does not package libstdc++
    '-static-libstdc++', '-static-libgcc',
    '-L%s' % toolchain_dir.join('lib'),
    '-fuse-ld=gold',
    '-B%s/usr/libexec/gcc' % toolchain_dir,
  ]

  quote = lambda x: '"%s"' % x
  args = {
    'cc':  quote(toolchain_dir.join('usr', 'bin', 'clang-3.9.elf')),
    'cxx': quote(toolchain_dir.join('usr', 'bin', 'clang++-3.9.elf')),
    'ar':  quote(toolchain_dir.join('bin','armv7a-cros-linux-gnueabi-ar')),
    'target_cpu': quote(target_arch),
    'skia_use_fontconfig': 'false',
    'skia_enable_gpu': 'true',
    # The toolchain won't allow system libraries to be used
    # when cross-compiling
    'skia_use_system_freetype2': 'false',
    # Makes the binary smaller
    'skia_use_icu': 'false',
    'skia_use_egl': 'true',
  }

  if configuration != 'Debug':
    args['is_debug'] = 'false'
  args['extra_asmflags'] = repr(extra_asmflags).replace("'", '"')
  args['extra_cflags'] = repr(extra_cflags).replace("'", '"')
  args['extra_ldflags'] = repr(extra_ldflags).replace("'", '"')

  gn_args = ' '.join('%s=%s' % (k,v) for (k,v) in sorted(args.iteritems()))
  gn = skia_dir.join('bin', 'gn')

  with api.context(cwd=skia_dir):
    api.run(api.python, 'fetch-gn',
            script=skia_dir.join('bin', 'fetch-gn'),
            infra_step=True)
    api.run(api.step, 'gn gen', cmd=[gn, 'gen', out_dir, '--args=' + gn_args])
    api.run(api.step, 'ninja',
            cmd=['ninja', '-k', '0', '-C', out_dir, 'nanobench', 'dm'])


def copy_extra_build_products(api, src, dst):
  pass