| OLD | NEW |
| 1 # Copyright 2016 The Chromium Authors. All rights reserved. | 1 # Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import default_flavor | 5 import default_flavor |
| 6 import subprocess | 6 import subprocess |
| 7 | 7 |
| 8 """GN Android flavor utils, used for building Skia for Android with GN.""" | 8 """GN Android flavor utils, used for building Skia for Android with GN.""" |
| 9 class GNAndroidFlavorUtils(default_flavor.DefaultFlavorUtils): | 9 class GNAndroidFlavorUtils(default_flavor.DefaultFlavorUtils): |
| 10 def __init__(self, m): | 10 def __init__(self, m): |
| 11 super(GNAndroidFlavorUtils, self).__init__(m) | 11 super(GNAndroidFlavorUtils, self).__init__(m) |
| 12 self._ever_ran_adb = False | 12 self._ever_ran_adb = False |
| 13 | 13 |
| 14 prefix = '/data/local/tmp/' | 14 prefix = '/data/local/tmp/' |
| 15 self.device_dirs = default_flavor.DeviceDirs( | 15 self.device_dirs = default_flavor.DeviceDirs( |
| 16 dm_dir = prefix + 'dm_out', | 16 dm_dir = prefix + 'dm_out', |
| 17 perf_data_dir = prefix + 'perf', | 17 perf_data_dir = prefix + 'perf', |
| 18 resource_dir = prefix + 'resources', | 18 resource_dir = prefix + 'resources', |
| 19 images_dir = prefix + 'images', | 19 images_dir = prefix + 'images', |
| 20 skp_dir = prefix + 'skps', | 20 skp_dir = prefix + 'skps', |
| 21 svg_dir = prefix + 'svgs', | 21 svg_dir = prefix + 'svgs', |
| 22 tmp_dir = prefix + 'tmp') | 22 tmp_dir = prefix + 'tmp') |
| 23 | 23 |
| 24 def supported(self): | 24 def supported(self): |
| 25 return 'GN_Android' == self.m.vars.builder_cfg.get('extra_config', '') | 25 return 'GN_Android' in self.m.vars.builder_cfg.get('extra_config', '') |
| 26 | 26 |
| 27 def _run(self, title, *cmd, **kwargs): | 27 def _run(self, title, *cmd, **kwargs): |
| 28 self.m.vars.default_env = {k: v for (k,v) | 28 self.m.vars.default_env = {k: v for (k,v) |
| 29 in self.m.vars.default_env.iteritems() | 29 in self.m.vars.default_env.iteritems() |
| 30 if k in ['PATH']} | 30 if k in ['PATH']} |
| 31 return self.m.run(self.m.step, title, cmd=list(cmd), | 31 return self.m.run(self.m.step, title, cmd=list(cmd), |
| 32 cwd=self.m.vars.skia_dir, env={}, **kwargs) | 32 cwd=self.m.vars.skia_dir, env={}, **kwargs) |
| 33 | 33 |
| 34 def _adb(self, title, *cmd, **kwargs): | 34 def _adb(self, title, *cmd, **kwargs): |
| 35 self._ever_ran_adb = True | 35 self._ever_ran_adb = True |
| 36 # The only non-infra adb call (check rc) happens to not use _adb(). | 36 # The only non-infra adb call (check rc) happens to not use _adb(). |
| 37 if 'infra_step' not in kwargs: | 37 if 'infra_step' not in kwargs: |
| 38 kwargs['infra_step'] = True | 38 kwargs['infra_step'] = True |
| 39 return self._run(title, 'adb', *cmd, **kwargs) | 39 return self._run(title, 'adb', *cmd, **kwargs) |
| 40 | 40 |
| 41 def compile(self, unused_target, **kwargs): | 41 def compile(self, unused_target, **kwargs): |
| 42 compiler = self.m.vars.builder_cfg.get('compiler') | 42 compiler = self.m.vars.builder_cfg.get('compiler') |
| 43 configuration = self.m.vars.builder_cfg.get('configuration') | 43 configuration = self.m.vars.builder_cfg.get('configuration') |
| 44 extra_config = self.m.vars.builder_cfg.get('extra_config', '') |
| 44 os = self.m.vars.builder_cfg.get('os') | 45 os = self.m.vars.builder_cfg.get('os') |
| 45 target_arch = self.m.vars.builder_cfg.get('target_arch') | 46 target_arch = self.m.vars.builder_cfg.get('target_arch') |
| 46 | 47 |
| 47 assert compiler == 'Clang' # At this rate we might not ever support GCC. | 48 assert compiler == 'Clang' # At this rate we might not ever support GCC. |
| 48 | 49 |
| 49 ndk_asset = 'android_ndk_linux' if os == 'Ubuntu' else 'android_ndk_darwin' | 50 ndk_asset = 'android_ndk_linux' if os == 'Ubuntu' else 'android_ndk_darwin' |
| 50 | 51 |
| 51 quote = lambda x: '"%s"' % x | 52 quote = lambda x: '"%s"' % x |
| 52 gn_args = ' '.join('%s=%s' % (k,v) for (k,v) in sorted({ | 53 args = { |
| 53 'is_debug': 'true' if configuration == 'Debug' else 'false', | |
| 54 'ndk': quote(self.m.vars.slave_dir.join(ndk_asset)), | 54 'ndk': quote(self.m.vars.slave_dir.join(ndk_asset)), |
| 55 'target_cpu': quote(target_arch), | 55 'target_cpu': quote(target_arch), |
| 56 }.iteritems())) | 56 } |
| 57 |
| 58 if configuration != 'Debug': |
| 59 args['is_debug'] = 'false' |
| 60 if 'Vulkan' in extra_config: |
| 61 args['skia_use_vulkan'] = 'true' |
| 62 args['ndk_api'] = 24 |
| 63 |
| 64 gn_args = ' '.join('%s=%s' % (k,v) for (k,v) in sorted(args.iteritems())) |
| 57 | 65 |
| 58 self._run('fetch-gn', self.m.vars.skia_dir.join('bin', 'fetch-gn'), | 66 self._run('fetch-gn', self.m.vars.skia_dir.join('bin', 'fetch-gn'), |
| 59 infra_step=True) | 67 infra_step=True) |
| 60 self._run('gn gen', 'gn', 'gen', self.out_dir, '--args=' + gn_args) | 68 self._run('gn gen', 'gn', 'gen', self.out_dir, '--args=' + gn_args) |
| 61 self._run('ninja', 'ninja', '-C', self.out_dir) | 69 self._run('ninja', 'ninja', '-C', self.out_dir) |
| 62 | 70 |
| 63 def install(self): | 71 def install(self): |
| 64 self._adb('mkdir /data/local/tmp/resources', | 72 self._adb('mkdir /data/local/tmp/resources', |
| 65 'shell', 'mkdir', '-p', '/data/local/tmp/resources') | 73 'shell', 'mkdir', '-p', '/data/local/tmp/resources') |
| 66 | 74 |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 120 def read_file_on_device(self, path): | 128 def read_file_on_device(self, path): |
| 121 return self._adb('read %s' % path, | 129 return self._adb('read %s' % path, |
| 122 'shell', 'cat', path, stdout=self.m.raw_io.output()).stdout | 130 'shell', 'cat', path, stdout=self.m.raw_io.output()).stdout |
| 123 | 131 |
| 124 def remove_file_on_device(self, path): | 132 def remove_file_on_device(self, path): |
| 125 self._adb('rm %s' % path, 'shell', 'rm', '-f', path) | 133 self._adb('rm %s' % path, 'shell', 'rm', '-f', path) |
| 126 | 134 |
| 127 def create_clean_device_dir(self, path): | 135 def create_clean_device_dir(self, path): |
| 128 self._adb('rm %s' % path, 'shell', 'rm', '-rf', path) | 136 self._adb('rm %s' % path, 'shell', 'rm', '-rf', path) |
| 129 self._adb('mkdir %s' % path, 'shell', 'mkdir', '-p', path) | 137 self._adb('mkdir %s' % path, 'shell', 'mkdir', '-p', path) |
| OLD | NEW |