9f6468fa7f
We don't have any way to test these, and we do have to go a little out of our way to maintain these builds. Change-Id: Ie191ee26753b719f6ee22264d63fbe4252e69bd5 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/290840 Reviewed-by: Derek Sollenberger <djsollen@google.com> Commit-Queue: Mike Klein <mtklein@google.com>
93 lines
3.1 KiB
Python
93 lines
3.1 KiB
Python
# Copyright 2019 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.
|
|
|
|
|
|
from . import util
|
|
|
|
|
|
# TODO(dogben): Move this mapping to a machine-editable file.
|
|
IMAGES = {
|
|
'gcc-debian10': (
|
|
'gcr.io/skia-public/gcc-debian10@sha256:'
|
|
'89a72df1e2fdea6f774a3fa4199bb9aaa4a0526a3ac1f233e604d689b694f95c'),
|
|
'gcc-debian10-x86': (
|
|
'gcr.io/skia-public/gcc-debian10-x86@sha256:'
|
|
'b1ec55403ac66d9500d033d6ffd7663894d32335711fbbb0fb4c67dfce812203'),
|
|
}
|
|
|
|
|
|
def py_to_gn(val):
|
|
"""Convert val to a string that can be used as GN args."""
|
|
if isinstance(val, bool):
|
|
return 'true' if val else 'false'
|
|
elif isinstance(val, basestring):
|
|
# TODO(dogben): Handle quoting "$\
|
|
return '"%s"' % val
|
|
elif isinstance(val, (list, tuple)):
|
|
return '[%s]' % (','.join(py_to_gn(x) for x in val))
|
|
elif isinstance(val, dict):
|
|
gn = ' '.join(
|
|
'%s=%s' % (k, py_to_gn(v)) for (k, v) in sorted(val.iteritems()))
|
|
return gn
|
|
else: # pragma: nocover
|
|
raise Exception('Converting %s to gn is not implemented.' % type(val))
|
|
|
|
|
|
def compile_fn(api, checkout_root, out_dir):
|
|
compiler = api.vars.builder_cfg.get('compiler', '')
|
|
configuration = api.vars.builder_cfg.get('configuration', '')
|
|
extra_tokens = api.vars.extra_tokens
|
|
extra_tokens.remove('Docker')
|
|
os = api.vars.builder_cfg.get('os', '')
|
|
target_arch = api.vars.builder_cfg.get('target_arch', '')
|
|
|
|
args = {
|
|
'extra_cflags': [],
|
|
'extra_ldflags': [],
|
|
'target_cpu': target_arch,
|
|
'werror': True
|
|
}
|
|
|
|
if configuration == 'Debug':
|
|
args['extra_cflags'].append('-O1')
|
|
else:
|
|
args['is_debug'] = False
|
|
|
|
if 'NoGPU' in extra_tokens:
|
|
args['skia_enable_gpu'] = False
|
|
extra_tokens.remove('NoGPU')
|
|
if 'Shared' in extra_tokens:
|
|
args['is_component_build'] = True
|
|
extra_tokens.remove('Shared')
|
|
|
|
image_name = None
|
|
if os == 'Debian10' and compiler == 'GCC' and not extra_tokens:
|
|
args['cc'] = 'gcc'
|
|
args['cxx'] = 'g++'
|
|
# Newer GCC includes tons and tons of debugging symbols. This seems to
|
|
# negatively affect our bots (potentially only in combination with other
|
|
# bugs in Swarming or recipe code). Use g1 to reduce it a bit.
|
|
args['extra_cflags'].append('-g1')
|
|
if target_arch == 'x86_64':
|
|
image_name = 'gcc-debian10'
|
|
elif target_arch == 'x86':
|
|
image_name = 'gcc-debian10-x86'
|
|
|
|
if not image_name:
|
|
raise Exception('Not implemented: ' + api.vars.builder_name)
|
|
|
|
image_hash = IMAGES[image_name]
|
|
# We always perform an incremental compile, since out dir is cached across
|
|
# compile tasks. However, we need to force a recompile when the toolchain
|
|
# changes. The simplest way to do that is using a C define that changes
|
|
# anytime the image changes.
|
|
args['extra_cflags'].append('-DDUMMY_docker_image=%s' % image_hash)
|
|
|
|
script = api.build.resource('docker-compile.sh')
|
|
api.docker.run('Run build script in Docker', image_hash,
|
|
checkout_root, out_dir, script, args=[py_to_gn(args)])
|
|
|
|
def copy_build_products(api, src, dst):
|
|
util.copy_listed_files(api, src, dst, util.DEFAULT_BUILD_PRODUCTS)
|