blob: 26b6ff24f177331ef9655f9a53aa3d77d14925dc [file]
# Copyright 2015 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.
import functools
from RECIPE_MODULES.build.chromium_tests_builder_config import (
builder_db,
builder_spec,
)
from RECIPE_MODULES.build import chromium_types
from dataclasses import dataclass
from recipe_engine.recipe_api import RecipeScriptApi
from recipe_engine.recipe_test_api import RecipeTestApi
from RECIPE_MODULES.build import (
chromium,
chromium_checkout,
chromium_tests,
chromium_tests_builder_config,
gn,
webrtc,
)
from RECIPE_MODULES.depot_tools import depot_tools
from RECIPE_MODULES.recipe_engine import (
context,
platform,
raw_io,
step,
)
@dataclass
class DEPS(RecipeScriptApi):
chromium: chromium.API
chromium_checkout: chromium_checkout.API
chromium_tests: chromium_tests.API
chromium_tests_builder_config: chromium_tests_builder_config.API
context: context.API
depot_tools: depot_tools.API
gn: gn.API
platform: platform.API
raw_io: raw_io.API
step: step.API
webrtc: webrtc.API
@dataclass
class TEST_DEPS(RecipeTestApi):
raw_io: raw_io.TEST_API
webrtc: webrtc.TEST_API
BUILDERS_DB = builder_db.BuilderDatabase.create(
{
'client.webrtc': {
'Linux64 Release (Libfuzzer)': builder_spec.BuilderSpec.create(
chromium_config='webrtc_default',
gclient_config='webrtc',
chromium_config_kwargs={
'BUILD_CONFIG': 'Release',
'TARGET_BITS': 64,
},
),
},
'tryserver.webrtc': {
'linux_libfuzzer_rel': builder_spec.BuilderSpec.create(
chromium_config='webrtc_default',
gclient_config='webrtc',
chromium_config_kwargs={
'BUILD_CONFIG': 'Release',
'TARGET_BITS': 64,
},
),
},
}
)
def RunSteps(api: DEPS):
builder_id, builder_config = api.chromium_tests_builder_config.lookup_builder(
builder_db=BUILDERS_DB
)
api.chromium_tests.configure_build(builder_config)
update_result = api.chromium_checkout.ensure_checkout()
source_dir = update_result.source_root.path
build_dir = api.chromium.default_build_dir(source_dir)
api.chromium.runhooks(source_dir, build_dir)
with api.chromium.guard_compile(build_dir):
api.webrtc.run_mb(source_dir, build_dir, builder_id)
with api.context(cwd=source_dir):
args = [
'--root=%s' % str(source_dir),
'refs',
str(build_dir),
'--all',
'--type=executable',
'--as=output',
'//test/fuzzers:webrtc_fuzzer_main',
]
script = str(api.depot_tools.gn_py_path)
cmd = ['vpython3', '-u', script] + args
step_result = api.step(
'calculate targets', cmd, stdout=api.raw_io.output_text()
)
targets = step_result.stdout.split()
api.step.active_result.presentation.logs['targets'] = targets
return api.chromium.compile(source_dir, build_dir, targets=targets)
def GenTests(api: TEST_DEPS):
builders_db = BUILDERS_DB
generate_builder = functools.partial(api.webrtc.generate_builder, builders_db)
for builder_id in builders_db:
yield (
generate_builder(builder_id)
+ api.step_data(
'calculate targets',
stdout=api.raw_io.output_text('target1 target2 target3'),
)
)
builder_id = chromium_types.BuilderId.create_for_group(
'client.webrtc', 'Linux64 Release (Libfuzzer)'
)
yield generate_builder(
builder_id, suffix='_compile_failure', fail_compile=True
)