blob: 2b555477ea89c140362312af8898aa3f74afbc70 [file]
"""Recipe for running asan on ml_framwork x86 unittests."""
import os
from slave import base_recipe
from slave.step import gn_step
from slave.step import ninja_step
from slave.step import sanitizer_unittest_step
BUILD_CONFIGS = {
'ml_framework_x64_asan': {
'sanitizer': 'asan',
'build_args_product' : 'asan_x64_eng',
'build_args' : 'enable_ml_framework=true is_debug=true '
'chromecast_branding="google"',
'runtime_flags' : '',
},
'ml_framework_x64_tsan': {
'sanitizer': 'tsan',
'build_args_product' : 'tsan_x64_eng',
'build_args' : 'enable_ml_framework=true '
'chromecast_branding="google"',
'runtime_flags' : '',
},
'ml_framework_x64_msan': {
'sanitizer': 'msan',
'build_args_product' : 'msan_x64_eng',
'build_args' : 'enable_ml_framework=true '
'chromecast_branding="google"',
'runtime_flags' : '',
},
'ml_framework_x64_ubsan': {
'sanitizer': 'ubsan',
'build_args_product' : 'ubsan_x64',
'build_args' : 'enable_ml_framework=true',
'runtime_flags' : ' --single-process-tests',
},
}
def GetValidBuildNames():
return list(BUILD_CONFIGS.keys())
def CreateRecipe(build_name: str, **kwargs):
config = BUILD_CONFIGS[build_name]
return MlFrameworkAsanRecipe(build_name, config, **kwargs)
class MlFrameworkAsanRecipe(base_recipe.BaseRecipe):
"""This recipe runs the ml_framework unittests with ASAN/LSAN enabled."""
def __init__(self, build_name, config, **kwargs):
base_recipe.BaseRecipe.__init__(
self, enable_build_accelerator=True, **kwargs)
self._config = config
self._build_name = build_name
def get_steps(self):
steps = []
cwd = os.getcwd()
setup_steps = self.get_setup_steps()
chromium_root = setup_steps[0].get_project_path('chromium/src')
out_dir = os.path.join(
chromium_root,
'out_{}'.format(self._build_name),
'release')
gn_gen_step = gn_step.GnGenStep(
build_args_product=self._config['build_args_product'],
build_args=[self._config['build_args']],
out_dir=out_dir,
halt_on_failure=True,
cwd=cwd,
**self._step_kwargs
)
steps.append(gn_gen_step)
gn_args_step = gn_step.GnArgsStep(
out_dir=out_dir,
cwd=cwd,
halt_on_failure=True,
**self._step_kwargs
)
steps.append(gn_args_step)
ninja_build_step = ninja_step.NinjaStep(
out_dir=out_dir,
target='ml_framework_unittests',
cwd=cwd,
jobs=64,
halt_on_failure=True,
**self._step_kwargs
)
steps.append(ninja_build_step)
kwargs = self._step_kwargs
kwargs['unittest_prefix_filter'] = 'ml_'
sanitizer_test_step = sanitizer_unittest_step.SanitizerUnitTestShellStep(
name='ml_framework_unittests',
command=['./ml_framework_unittests' + self._config['runtime_flags']],
directory=out_dir,
sanitizer=self._config['sanitizer'],
halt_on_failure=True,
**kwargs
)
steps.append(sanitizer_test_step)
return steps