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 |