Chromium Code Reviews| Index: infra/bots/recipe_modules/flavor/gn_flavor.py |
| diff --git a/infra/bots/recipe_modules/flavor/gn_flavor.py b/infra/bots/recipe_modules/flavor/gn_flavor.py |
| index 3154ef3425acc738fbabd11b00de3bc5029ea3fc..61b12a1262c46df9031befc95ec0a7abb1764f47 100644 |
| --- a/infra/bots/recipe_modules/flavor/gn_flavor.py |
| +++ b/infra/bots/recipe_modules/flavor/gn_flavor.py |
| @@ -10,15 +10,17 @@ class GNFlavorUtils(default_flavor.DefaultFlavorUtils): |
| extra_config = self.m.vars.builder_cfg.get('extra_config', '') |
| return any([ |
| - extra_config == 'GN', |
| + 'SAN' in extra_config, |
| extra_config == 'Fast', |
| + extra_config == 'GN', |
| extra_config.startswith('SK') |
| ]) |
| - def _run(self, title, cmd): |
| - path = self.m.vars.default_env['PATH'] |
| - self.m.vars.default_env = {'PATH': path} |
| - self.m.run(self.m.step, title, cmd=cmd, cwd=self.m.vars.skia_dir) |
| + def _run(self, title, cmd, env=None): |
| + self.m.vars.default_env = {k: v for (k,v) |
| + in self.m.vars.default_env.iteritems() |
| + if k in ['PATH']} |
| + self.m.run(self.m.step, title, cmd=cmd, env=env, cwd=self.m.vars.skia_dir) |
| def compile(self, unused_target, **kwargs): |
| """Build Skia with GN.""" |
| @@ -27,13 +29,15 @@ class GNFlavorUtils(default_flavor.DefaultFlavorUtils): |
| extra_config = self.m.vars.builder_cfg.get('extra_config', '') |
| os = self.m.vars.builder_cfg.get('os', '') |
| + clang_linux = str(self.m.vars.slave_dir.join('clang_linux')) |
|
borenet
2016/09/08 14:47:33
Why str() instead of using pathObj.join(...) ?
mtklein
2016/09/08 14:51:10
Just seems easier to convert to string here once t
borenet
2016/09/08 15:06:39
Ok, I'm not sure that str(pathObj) will resolve th
|
| + |
| cc, cxx = None, None |
| extra_cflags = [] |
| extra_ldflags = [] |
| if compiler == 'Clang' and os == 'Ubuntu': |
| - cc = self.m.vars.slave_dir.join('clang_linux', 'bin', 'clang') |
| - cxx = self.m.vars.slave_dir.join('clang_linux', 'bin', 'clang++') |
| + cc = clang_linux + '/bin/clang' |
| + cxx = clang_linux + '/bin/clang++' |
| extra_ldflags.append('-fuse-ld=lld') |
| elif compiler == 'Clang': |
| cc, cxx = 'clang', 'clang++' |
| @@ -44,17 +48,22 @@ class GNFlavorUtils(default_flavor.DefaultFlavorUtils): |
| extra_cflags.extend(['-march=native', '-fomit-frame-pointer', '-O3']) |
| if extra_config.startswith('SK'): |
| extra_cflags.append('-D' + extra_config) |
| + if extra_config == 'MSAN': |
| + extra_ldflags.append('-L' + clang_linux + '/msan') |
| args = {} |
| if configuration != 'Debug': |
| args['is_debug'] = 'false' |
| + if extra_config == 'MSAN': |
| + args['skia_use_fontconfig'] = 'false' |
| for (k,v) in { |
| 'cc': cc, |
| 'cxx': cxx, |
| 'extra_cflags': ' '.join(extra_cflags), |
| 'extra_ldflags': ' '.join(extra_ldflags), |
| + 'sanitize': extra_config if 'SAN' in extra_config else '', |
| }.iteritems(): |
| if v: |
| args[k] = '"%s"' % v |
| @@ -64,3 +73,28 @@ class GNFlavorUtils(default_flavor.DefaultFlavorUtils): |
| self._run('fetch-gn', [self.m.vars.skia_dir.join('bin', 'fetch-gn')]) |
| self._run('gn gen', ['gn', 'gen', self.out_dir, '--args=' + gn_args]) |
| self._run('ninja', ['ninja', '-C', self.out_dir]) |
| + |
| + def step(self, name, cmd, env=None, **kwargs): |
| + app = self.m.vars.skia_out.join(self.m.vars.configuration, cmd[0]) |
| + cmd = [app] + cmd[1:] |
| + env = {} |
| + |
| + clang_linux = str(self.m.vars.slave_dir.join('clang_linux')) |
| + extra_config = self.m.vars.builder_cfg.get('extra_config', '') |
| + |
| + if 'SAN' in extra_config: |
| + # Sanitized binaries may want to run clang_linux/bin/llvm-symbolizer. |
| + self.m.vars.default_env['PATH'] = '%%(PATH)s:%s' % clang_linux + '/bin' |
| + elif 'Ubuntu' == self.m.vars.builder_cfg.get('os', ''): |
| + cmd = ['catchsegv'] + cmd |
| + |
| + if 'ASAN' == extra_config: |
| + env[ 'ASAN_OPTIONS'] = 'symbolize=1 detect_leaks=1' |
| + env[ 'LSAN_OPTIONS'] = 'symbolize=1 print_suppressions=1' |
| + env['UBSAN_OPTIONS'] = 'symbolize=1 print_stacktrace=1' |
| + |
| + if 'MSAN' == extra_config: |
| + # Find the MSAN-built libc++. |
| + env['LD_LIBRARY_PATH'] = clang_linux + '/msan' |
| + |
| + self._run(name, cmd, env=env) |