xref: /aosp_15_r20/external/cronet/build/config/chromeos/rules.gni (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker# Copyright 2018 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker# found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker
5*6777b538SAndroid Build Coastguard Workerimport("//build/config/chrome_build.gni")
6*6777b538SAndroid Build Coastguard Workerimport("//build/config/chromeos/args.gni")
7*6777b538SAndroid Build Coastguard Workerimport("//build/config/chromeos/ui_mode.gni")
8*6777b538SAndroid Build Coastguard Workerimport("//build/config/dcheck_always_on.gni")
9*6777b538SAndroid Build Coastguard Workerimport("//build/config/gclient_args.gni")
10*6777b538SAndroid Build Coastguard Workerimport("//build/config/python.gni")
11*6777b538SAndroid Build Coastguard Workerimport("//build/util/generate_wrapper.gni")
12*6777b538SAndroid Build Coastguard Worker
13*6777b538SAndroid Build Coastguard Workerassert(is_chromeos)
14*6777b538SAndroid Build Coastguard Workerassert(is_chromeos_device)
15*6777b538SAndroid Build Coastguard Worker
16*6777b538SAndroid Build Coastguard Worker# Determine the real paths for various items in the SDK, which may be used
17*6777b538SAndroid Build Coastguard Worker# in the 'generate_runner_script' template below. We do so outside the template
18*6777b538SAndroid Build Coastguard Worker# to confine exec_script to a single invocation.
19*6777b538SAndroid Build Coastguard Workerif (cros_sdk_version != "") {
20*6777b538SAndroid Build Coastguard Worker  # Ideally these should be maps, however, gn doesn't support map, so using a
21*6777b538SAndroid Build Coastguard Worker  # list of list to simulate a map:
22*6777b538SAndroid Build Coastguard Worker  # [key1, [value1, value2, ...]], [key2, [value1, value2, ...]], where
23*6777b538SAndroid Build Coastguard Worker  # the keys are boards and values are symlinks or symlink targets, and the
24*6777b538SAndroid Build Coastguard Worker  # mapping shouldn't be used for anything else.
25*6777b538SAndroid Build Coastguard Worker  #
26*6777b538SAndroid Build Coastguard Worker  # A sample usage is:
27*6777b538SAndroid Build Coastguard Worker  # foreach(m, _symlink_targets_map) {
28*6777b538SAndroid Build Coastguard Worker  #   if(m[0] == target_key) {
29*6777b538SAndroid Build Coastguard Worker  #     target_value = m[1]
30*6777b538SAndroid Build Coastguard Worker  #   }
31*6777b538SAndroid Build Coastguard Worker  # }
32*6777b538SAndroid Build Coastguard Worker  #
33*6777b538SAndroid Build Coastguard Worker  _symlink_map = []
34*6777b538SAndroid Build Coastguard Worker  _symlink_targets_map = []
35*6777b538SAndroid Build Coastguard Worker
36*6777b538SAndroid Build Coastguard Worker  if (is_chromeos_ash) {
37*6777b538SAndroid Build Coastguard Worker    _potential_test_boards = [ cros_board ]
38*6777b538SAndroid Build Coastguard Worker  } else {
39*6777b538SAndroid Build Coastguard Worker    _potential_test_boards = []
40*6777b538SAndroid Build Coastguard Worker    if (cros_boards != "") {
41*6777b538SAndroid Build Coastguard Worker      _potential_test_boards += string_split(cros_boards, ":")
42*6777b538SAndroid Build Coastguard Worker    }
43*6777b538SAndroid Build Coastguard Worker    if (cros_boards_with_qemu_images != "") {
44*6777b538SAndroid Build Coastguard Worker      _potential_test_boards += string_split(cros_boards_with_qemu_images, ":")
45*6777b538SAndroid Build Coastguard Worker    }
46*6777b538SAndroid Build Coastguard Worker  }
47*6777b538SAndroid Build Coastguard Worker
48*6777b538SAndroid Build Coastguard Worker  foreach(b, _potential_test_boards) {
49*6777b538SAndroid Build Coastguard Worker    _cache_path_prefix =
50*6777b538SAndroid Build Coastguard Worker        "//build/cros_cache/chrome-sdk/symlinks/${b}+${cros_sdk_version}"
51*6777b538SAndroid Build Coastguard Worker
52*6777b538SAndroid Build Coastguard Worker    _cros_is_vm = false
53*6777b538SAndroid Build Coastguard Worker    foreach(b1, string_split(cros_boards_with_qemu_images, ":")) {
54*6777b538SAndroid Build Coastguard Worker      if (b == b1) {
55*6777b538SAndroid Build Coastguard Worker        _cros_is_vm = true
56*6777b538SAndroid Build Coastguard Worker      }
57*6777b538SAndroid Build Coastguard Worker    }
58*6777b538SAndroid Build Coastguard Worker
59*6777b538SAndroid Build Coastguard Worker    _symlinks = []
60*6777b538SAndroid Build Coastguard Worker    _symlinks = [
61*6777b538SAndroid Build Coastguard Worker      # Tast harness & test data.
62*6777b538SAndroid Build Coastguard Worker      rebase_path("${_cache_path_prefix}+autotest_server_package.tar.bz2"),
63*6777b538SAndroid Build Coastguard Worker
64*6777b538SAndroid Build Coastguard Worker      # Binutils (and other toolchain tools) used to deploy Chrome to the device.
65*6777b538SAndroid Build Coastguard Worker      rebase_path(
66*6777b538SAndroid Build Coastguard Worker          "${_cache_path_prefix}+environment_chromeos-base_chromeos-chrome.tar.xz"),
67*6777b538SAndroid Build Coastguard Worker      rebase_path("${_cache_path_prefix}+target_toolchain"),
68*6777b538SAndroid Build Coastguard Worker    ]
69*6777b538SAndroid Build Coastguard Worker    if (_cros_is_vm) {
70*6777b538SAndroid Build Coastguard Worker      # VM-related tools.
71*6777b538SAndroid Build Coastguard Worker      _symlinks +=
72*6777b538SAndroid Build Coastguard Worker          [ rebase_path("${_cache_path_prefix}+chromiumos_test_image.tar.xz") ]
73*6777b538SAndroid Build Coastguard Worker    }
74*6777b538SAndroid Build Coastguard Worker    _symlink_map += [ [
75*6777b538SAndroid Build Coastguard Worker          b,
76*6777b538SAndroid Build Coastguard Worker          _symlinks,
77*6777b538SAndroid Build Coastguard Worker        ] ]
78*6777b538SAndroid Build Coastguard Worker  }
79*6777b538SAndroid Build Coastguard Worker
80*6777b538SAndroid Build Coastguard Worker  _all_symlinks = []
81*6777b538SAndroid Build Coastguard Worker  foreach(m, _symlink_map) {
82*6777b538SAndroid Build Coastguard Worker    _all_symlinks += m[1]
83*6777b538SAndroid Build Coastguard Worker  }
84*6777b538SAndroid Build Coastguard Worker  _all_symlink_targets =
85*6777b538SAndroid Build Coastguard Worker      exec_script("//build/get_symlink_targets.py", _all_symlinks, "list lines")
86*6777b538SAndroid Build Coastguard Worker  _index = 0
87*6777b538SAndroid Build Coastguard Worker  foreach(m, _symlink_map) {
88*6777b538SAndroid Build Coastguard Worker    _symlink_targets = []
89*6777b538SAndroid Build Coastguard Worker    foreach(_, m[1]) {
90*6777b538SAndroid Build Coastguard Worker      _symlink_targets += [ _all_symlink_targets[_index] ]
91*6777b538SAndroid Build Coastguard Worker      _index += 1
92*6777b538SAndroid Build Coastguard Worker    }
93*6777b538SAndroid Build Coastguard Worker
94*6777b538SAndroid Build Coastguard Worker    _symlink_targets_map += [ [
95*6777b538SAndroid Build Coastguard Worker          m[0],
96*6777b538SAndroid Build Coastguard Worker          _symlink_targets,
97*6777b538SAndroid Build Coastguard Worker        ] ]
98*6777b538SAndroid Build Coastguard Worker  }
99*6777b538SAndroid Build Coastguard Worker}
100*6777b538SAndroid Build Coastguard Worker
101*6777b538SAndroid Build Coastguard Workertemplate("generate_chromeos_sdk_deps") {
102*6777b538SAndroid Build Coastguard Worker  forward_variables_from(invoker,
103*6777b538SAndroid Build Coastguard Worker                         [
104*6777b538SAndroid Build Coastguard Worker                           "deploy_chrome",
105*6777b538SAndroid Build Coastguard Worker                           "is_tast",
106*6777b538SAndroid Build Coastguard Worker                         ])
107*6777b538SAndroid Build Coastguard Worker  if (!defined(deploy_chrome)) {
108*6777b538SAndroid Build Coastguard Worker    deploy_chrome = false
109*6777b538SAndroid Build Coastguard Worker  }
110*6777b538SAndroid Build Coastguard Worker  if (!defined(is_tast)) {
111*6777b538SAndroid Build Coastguard Worker    is_tast = false
112*6777b538SAndroid Build Coastguard Worker  }
113*6777b538SAndroid Build Coastguard Worker
114*6777b538SAndroid Build Coastguard Worker  _sdk_data = []
115*6777b538SAndroid Build Coastguard Worker  assert(cros_sdk_version != "", "cros sdk version is not defined")
116*6777b538SAndroid Build Coastguard Worker  foreach(b, _potential_test_boards) {
117*6777b538SAndroid Build Coastguard Worker    _cros_is_vm = false
118*6777b538SAndroid Build Coastguard Worker    foreach(b1, string_split(cros_boards_with_qemu_images, ":")) {
119*6777b538SAndroid Build Coastguard Worker      if (b == b1) {
120*6777b538SAndroid Build Coastguard Worker        _cros_is_vm = true
121*6777b538SAndroid Build Coastguard Worker      }
122*6777b538SAndroid Build Coastguard Worker    }
123*6777b538SAndroid Build Coastguard Worker
124*6777b538SAndroid Build Coastguard Worker    # Determine the real paths for various items in the SDK, which may be used
125*6777b538SAndroid Build Coastguard Worker    # in the 'generate_runner_script' template below.
126*6777b538SAndroid Build Coastguard Worker    if (is_tast || _cros_is_vm || deploy_chrome) {
127*6777b538SAndroid Build Coastguard Worker      _symlink_targets = []
128*6777b538SAndroid Build Coastguard Worker      foreach(m, _symlink_targets_map) {
129*6777b538SAndroid Build Coastguard Worker        if (b == m[0]) {
130*6777b538SAndroid Build Coastguard Worker          _symlink_targets = []
131*6777b538SAndroid Build Coastguard Worker          _symlink_targets = m[1]
132*6777b538SAndroid Build Coastguard Worker        }
133*6777b538SAndroid Build Coastguard Worker      }
134*6777b538SAndroid Build Coastguard Worker
135*6777b538SAndroid Build Coastguard Worker      if (is_tast) {
136*6777b538SAndroid Build Coastguard Worker        # Add tast sdk items.
137*6777b538SAndroid Build Coastguard Worker        _sdk_data += [ _symlink_targets[0] ]
138*6777b538SAndroid Build Coastguard Worker      }
139*6777b538SAndroid Build Coastguard Worker      if (deploy_chrome) {
140*6777b538SAndroid Build Coastguard Worker        # To deploy chrome to the VM, it needs to be stripped down to fit into
141*6777b538SAndroid Build Coastguard Worker        # the VM. This is done by using binutils in the toolchain. So add the
142*6777b538SAndroid Build Coastguard Worker        # toolchain to the data.
143*6777b538SAndroid Build Coastguard Worker        _sdk_data += [
144*6777b538SAndroid Build Coastguard Worker          _symlink_targets[1],
145*6777b538SAndroid Build Coastguard Worker          _symlink_targets[2],
146*6777b538SAndroid Build Coastguard Worker        ]
147*6777b538SAndroid Build Coastguard Worker      }
148*6777b538SAndroid Build Coastguard Worker      if (_cros_is_vm) {
149*6777b538SAndroid Build Coastguard Worker        # Add vm sdk items.
150*6777b538SAndroid Build Coastguard Worker        _sdk_data += [ _symlink_targets[3] ]
151*6777b538SAndroid Build Coastguard Worker      }
152*6777b538SAndroid Build Coastguard Worker    }
153*6777b538SAndroid Build Coastguard Worker  }
154*6777b538SAndroid Build Coastguard Worker  group(target_name) {
155*6777b538SAndroid Build Coastguard Worker    data = _sdk_data
156*6777b538SAndroid Build Coastguard Worker    data += [
157*6777b538SAndroid Build Coastguard Worker      # Needed for various SDK components used below.
158*6777b538SAndroid Build Coastguard Worker      "//build/cros_cache/chrome-sdk/misc/",
159*6777b538SAndroid Build Coastguard Worker      "//build/cros_cache/chrome-sdk/symlinks/",
160*6777b538SAndroid Build Coastguard Worker      "//chrome/VERSION",
161*6777b538SAndroid Build Coastguard Worker
162*6777b538SAndroid Build Coastguard Worker      # The LKGM file controls what version of the VM image to download. Add it
163*6777b538SAndroid Build Coastguard Worker      # as data here so that changes to it will trigger analyze.
164*6777b538SAndroid Build Coastguard Worker      "//chromeos/CHROMEOS_LKGM",
165*6777b538SAndroid Build Coastguard Worker    ]
166*6777b538SAndroid Build Coastguard Worker    if (cros_boards_with_qemu_images != "") {
167*6777b538SAndroid Build Coastguard Worker      data += [ "//build/cros_cache/cipd/" ]
168*6777b538SAndroid Build Coastguard Worker    }
169*6777b538SAndroid Build Coastguard Worker  }
170*6777b538SAndroid Build Coastguard Worker}
171*6777b538SAndroid Build Coastguard Worker
172*6777b538SAndroid Build Coastguard Worker# Creates tast filter files for skylab tast tests.
173*6777b538SAndroid Build Coastguard Worker# Args:
174*6777b538SAndroid Build Coastguard Worker#   tast_attr_expr: Tast expression to determine tests to run. This creates the
175*6777b538SAndroid Build Coastguard Worker#       initial set of tests that can be further filtered..
176*6777b538SAndroid Build Coastguard Worker#   tast_tests: Names of tests to enable in tast. All other tests will be
177*6777b538SAndroid Build Coastguard Worker#       disabled that are not listed.
178*6777b538SAndroid Build Coastguard Worker#   tast_disabled_tests: Names of tests to disable in tast. All other tests that
179*6777b538SAndroid Build Coastguard Worker#       match the tast expression will still run.
180*6777b538SAndroid Build Coastguard Worker#   tast_control: gni file with collections of tests to be used for specific
181*6777b538SAndroid Build Coastguard Worker#       filters (e.g. "//chromeos/tast_control.gni"). Any lists of strings in
182*6777b538SAndroid Build Coastguard Worker#       this file will be used to generate additional tast expressions with
183*6777b538SAndroid Build Coastguard Worker#       those strings expanded into tests to disable (i.e. as && !"name:test").
184*6777b538SAndroid Build Coastguard Worker#       The name of those lists are then intended to be used to specify in
185*6777b538SAndroid Build Coastguard Worker#       test_suites.pyl which collection to be used on specific test suites.
186*6777b538SAndroid Build Coastguard Workertemplate("generate_skylab_tast_filter") {
187*6777b538SAndroid Build Coastguard Worker  forward_variables_from(invoker,
188*6777b538SAndroid Build Coastguard Worker                         [
189*6777b538SAndroid Build Coastguard Worker                           "tast_attr_expr",
190*6777b538SAndroid Build Coastguard Worker                           "tast_tests",
191*6777b538SAndroid Build Coastguard Worker                           "tast_disabled_tests",
192*6777b538SAndroid Build Coastguard Worker                           "tast_control",
193*6777b538SAndroid Build Coastguard Worker                         ])
194*6777b538SAndroid Build Coastguard Worker
195*6777b538SAndroid Build Coastguard Worker  if (defined(tast_disabled_tests)) {
196*6777b538SAndroid Build Coastguard Worker    assert(defined(tast_attr_expr),
197*6777b538SAndroid Build Coastguard Worker           "tast_attr_expr must be used when specifying tast_disabled_tests.")
198*6777b538SAndroid Build Coastguard Worker  }
199*6777b538SAndroid Build Coastguard Worker  _generated_filter = "$root_build_dir/bin/${target_name}.filter"
200*6777b538SAndroid Build Coastguard Worker  _skylab_args = [
201*6777b538SAndroid Build Coastguard Worker    "generate-filter",
202*6777b538SAndroid Build Coastguard Worker    "--output",
203*6777b538SAndroid Build Coastguard Worker    rebase_path(_generated_filter),
204*6777b538SAndroid Build Coastguard Worker  ]
205*6777b538SAndroid Build Coastguard Worker  if (defined(tast_control)) {
206*6777b538SAndroid Build Coastguard Worker    _skylab_args += [
207*6777b538SAndroid Build Coastguard Worker      "--tast-control",
208*6777b538SAndroid Build Coastguard Worker      rebase_path(tast_control),
209*6777b538SAndroid Build Coastguard Worker    ]
210*6777b538SAndroid Build Coastguard Worker  }
211*6777b538SAndroid Build Coastguard Worker  if (defined(tast_attr_expr)) {
212*6777b538SAndroid Build Coastguard Worker    _skylab_args += [
213*6777b538SAndroid Build Coastguard Worker      "--tast-expr",
214*6777b538SAndroid Build Coastguard Worker      tast_attr_expr,
215*6777b538SAndroid Build Coastguard Worker    ]
216*6777b538SAndroid Build Coastguard Worker  }
217*6777b538SAndroid Build Coastguard Worker  if (defined(tast_tests)) {
218*6777b538SAndroid Build Coastguard Worker    foreach(_test, tast_tests) {
219*6777b538SAndroid Build Coastguard Worker      _skylab_args += [
220*6777b538SAndroid Build Coastguard Worker        "--enabled-tests",
221*6777b538SAndroid Build Coastguard Worker        _test,
222*6777b538SAndroid Build Coastguard Worker      ]
223*6777b538SAndroid Build Coastguard Worker    }
224*6777b538SAndroid Build Coastguard Worker  }
225*6777b538SAndroid Build Coastguard Worker  if (defined(tast_disabled_tests)) {
226*6777b538SAndroid Build Coastguard Worker    foreach(_test_name, tast_disabled_tests) {
227*6777b538SAndroid Build Coastguard Worker      _skylab_args += [
228*6777b538SAndroid Build Coastguard Worker        "--disabled-tests",
229*6777b538SAndroid Build Coastguard Worker        _test_name,
230*6777b538SAndroid Build Coastguard Worker      ]
231*6777b538SAndroid Build Coastguard Worker    }
232*6777b538SAndroid Build Coastguard Worker  }
233*6777b538SAndroid Build Coastguard Worker  action(target_name) {
234*6777b538SAndroid Build Coastguard Worker    testonly = true
235*6777b538SAndroid Build Coastguard Worker    script = "//build/chromeos/generate_skylab_tast_filter.py"
236*6777b538SAndroid Build Coastguard Worker    if (defined(tast_control)) {
237*6777b538SAndroid Build Coastguard Worker      sources = [ tast_control ]
238*6777b538SAndroid Build Coastguard Worker    }
239*6777b538SAndroid Build Coastguard Worker    outputs = [ _generated_filter ]
240*6777b538SAndroid Build Coastguard Worker    args = _skylab_args
241*6777b538SAndroid Build Coastguard Worker    if (defined(invoker.data_deps)) {
242*6777b538SAndroid Build Coastguard Worker      data_deps = invoker.data_deps
243*6777b538SAndroid Build Coastguard Worker    }
244*6777b538SAndroid Build Coastguard Worker    data = [ _generated_filter ]
245*6777b538SAndroid Build Coastguard Worker    if (defined(invoker.data)) {
246*6777b538SAndroid Build Coastguard Worker      data += invoker.data
247*6777b538SAndroid Build Coastguard Worker    }
248*6777b538SAndroid Build Coastguard Worker    if (defined(invoker.deps)) {
249*6777b538SAndroid Build Coastguard Worker      deps = invoker.deps
250*6777b538SAndroid Build Coastguard Worker    }
251*6777b538SAndroid Build Coastguard Worker  }
252*6777b538SAndroid Build Coastguard Worker}
253*6777b538SAndroid Build Coastguard Worker
254*6777b538SAndroid Build Coastguard Worker# Creates a script at $generated_script that can be used to launch a cros VM
255*6777b538SAndroid Build Coastguard Worker# and optionally run a test within it.
256*6777b538SAndroid Build Coastguard Worker# Args:
257*6777b538SAndroid Build Coastguard Worker#   test_exe: Name of test binary located in the out dir. This will get copied
258*6777b538SAndroid Build Coastguard Worker#       to the VM and executed there.
259*6777b538SAndroid Build Coastguard Worker#   tast_attr_expr: Tast expression to pass to local_test_runner on the VM.
260*6777b538SAndroid Build Coastguard Worker#   tast_tests: List of Tast tests to run on the VM. Note that when this is
261*6777b538SAndroid Build Coastguard Worker#       specified, the target name used to invoke this template will be
262*6777b538SAndroid Build Coastguard Worker#       designated as the "name" of this test and will primarly used for test
263*6777b538SAndroid Build Coastguard Worker#       results tracking and displaying (eg: flakiness dashboard).
264*6777b538SAndroid Build Coastguard Worker#   generated_script: Path to place the generated script.
265*6777b538SAndroid Build Coastguard Worker#   deploy_chrome: If true, deploys a locally built chrome located in the root
266*6777b538SAndroid Build Coastguard Worker#       build dir to the VM or DUT after launching it.
267*6777b538SAndroid Build Coastguard Worker#   deploy_lacros: If true, deploys a locally built Lacros located in the root
268*6777b538SAndroid Build Coastguard Worker#       build dir to the VM or DUT after launching it.
269*6777b538SAndroid Build Coastguard Worker#   runtime_deps_file: Path to file listing runtime deps for the test. If set,
270*6777b538SAndroid Build Coastguard Worker#       all files listed will be copied to the VM before testing.
271*6777b538SAndroid Build Coastguard Worker#   skip_generating_board_args: By default, this template generates an '--board'
272*6777b538SAndroid Build Coastguard Worker#       arg with corresponding '--flash' or '--use-vm' args for device and vm
273*6777b538SAndroid Build Coastguard Worker#       respectively. This argument instructs the template to skip generating
274*6777b538SAndroid Build Coastguard Worker#       them, and it's designed for use cases where one builds for one board
275*6777b538SAndroid Build Coastguard Worker#       (e.g. amd64-generic), but tests on a different board (e.g. eve).
276*6777b538SAndroid Build Coastguard Worker#   tast_vars: A list of "key=value" runtime variable pairs to pass to invoke
277*6777b538SAndroid Build Coastguard Worker#   strip_chrome: If true, strips Chrome before deploying it for non-Tast tests.
278*6777b538SAndroid Build Coastguard Worker#       the Tast tests. For more details, please see:
279*6777b538SAndroid Build Coastguard Worker#       https://chromium.googlesource.com/chromiumos/platform/tast/+/HEAD/docs/writing_tests.md#Runtime-variables
280*6777b538SAndroid Build Coastguard Workertemplate("generate_runner_script") {
281*6777b538SAndroid Build Coastguard Worker  forward_variables_from(invoker,
282*6777b538SAndroid Build Coastguard Worker                         [
283*6777b538SAndroid Build Coastguard Worker                           "deploy_chrome",
284*6777b538SAndroid Build Coastguard Worker                           "deploy_lacros",
285*6777b538SAndroid Build Coastguard Worker                           "generated_script",
286*6777b538SAndroid Build Coastguard Worker                           "runtime_deps_file",
287*6777b538SAndroid Build Coastguard Worker                           "skip_generating_board_args",
288*6777b538SAndroid Build Coastguard Worker                           "strip_chrome",
289*6777b538SAndroid Build Coastguard Worker                           "tast_attr_expr",
290*6777b538SAndroid Build Coastguard Worker                           "tast_tests",
291*6777b538SAndroid Build Coastguard Worker                           "tast_vars",
292*6777b538SAndroid Build Coastguard Worker                           "testonly",
293*6777b538SAndroid Build Coastguard Worker                           "test_exe",
294*6777b538SAndroid Build Coastguard Worker                         ])
295*6777b538SAndroid Build Coastguard Worker
296*6777b538SAndroid Build Coastguard Worker  if (!defined(skip_generating_board_args)) {
297*6777b538SAndroid Build Coastguard Worker    # --board should be assigned by the autotest wrapper on skylab builders
298*6777b538SAndroid Build Coastguard Worker    skip_generating_board_args = is_skylab
299*6777b538SAndroid Build Coastguard Worker  }
300*6777b538SAndroid Build Coastguard Worker
301*6777b538SAndroid Build Coastguard Worker  if (skip_generating_board_args) {
302*6777b538SAndroid Build Coastguard Worker    # cros_board is not needed, so setting it to empty to avoid being used
303*6777b538SAndroid Build Coastguard Worker    # accidentally below.
304*6777b538SAndroid Build Coastguard Worker    cros_board = ""
305*6777b538SAndroid Build Coastguard Worker    not_needed([ cros_board ])
306*6777b538SAndroid Build Coastguard Worker  }
307*6777b538SAndroid Build Coastguard Worker
308*6777b538SAndroid Build Coastguard Worker  if (!defined(deploy_chrome)) {
309*6777b538SAndroid Build Coastguard Worker    deploy_chrome = false
310*6777b538SAndroid Build Coastguard Worker  }
311*6777b538SAndroid Build Coastguard Worker  if (!defined(deploy_lacros)) {
312*6777b538SAndroid Build Coastguard Worker    deploy_lacros = false
313*6777b538SAndroid Build Coastguard Worker  }
314*6777b538SAndroid Build Coastguard Worker  if (!defined(strip_chrome)) {
315*6777b538SAndroid Build Coastguard Worker    strip_chrome = false
316*6777b538SAndroid Build Coastguard Worker  }
317*6777b538SAndroid Build Coastguard Worker  is_tast = defined(tast_attr_expr) || defined(tast_tests)
318*6777b538SAndroid Build Coastguard Worker  assert(!(is_tast && defined(test_exe)),
319*6777b538SAndroid Build Coastguard Worker         "Tast tests are invoked from binaries shipped with the VM image. " +
320*6777b538SAndroid Build Coastguard Worker             "There should be no locally built binary needed.")
321*6777b538SAndroid Build Coastguard Worker  assert(is_tast || !defined(tast_vars),
322*6777b538SAndroid Build Coastguard Worker         "tast_vars is only support for Tast tests")
323*6777b538SAndroid Build Coastguard Worker
324*6777b538SAndroid Build Coastguard Worker  if (is_tast) {
325*6777b538SAndroid Build Coastguard Worker    not_needed([ "strip_chrome" ])
326*6777b538SAndroid Build Coastguard Worker  }
327*6777b538SAndroid Build Coastguard Worker
328*6777b538SAndroid Build Coastguard Worker  # If we're in the cros chrome-sdk (and not the raw ebuild), the test will
329*6777b538SAndroid Build Coastguard Worker  # need some additional runtime data located in the SDK cache.
330*6777b538SAndroid Build Coastguard Worker  if (cros_sdk_version != "") {
331*6777b538SAndroid Build Coastguard Worker    assert(defined(generated_script),
332*6777b538SAndroid Build Coastguard Worker           "Must specify where to place generated test launcher script via " +
333*6777b538SAndroid Build Coastguard Worker               "'generated_script'")
334*6777b538SAndroid Build Coastguard Worker
335*6777b538SAndroid Build Coastguard Worker    generate_chromeos_sdk_deps(target_name + "_cros_deps__helper") {
336*6777b538SAndroid Build Coastguard Worker      is_tast = is_tast
337*6777b538SAndroid Build Coastguard Worker      deploy_chrome = deploy_chrome
338*6777b538SAndroid Build Coastguard Worker    }
339*6777b538SAndroid Build Coastguard Worker  }
340*6777b538SAndroid Build Coastguard Worker
341*6777b538SAndroid Build Coastguard Worker  generate_wrapper(target_name) {
342*6777b538SAndroid Build Coastguard Worker    executable = "//build/chromeos/test_runner.py"
343*6777b538SAndroid Build Coastguard Worker    wrapper_script = generated_script
344*6777b538SAndroid Build Coastguard Worker    executable_args = []
345*6777b538SAndroid Build Coastguard Worker
346*6777b538SAndroid Build Coastguard Worker    if (defined(runtime_deps_file)) {
347*6777b538SAndroid Build Coastguard Worker      write_runtime_deps = runtime_deps_file
348*6777b538SAndroid Build Coastguard Worker    }
349*6777b538SAndroid Build Coastguard Worker
350*6777b538SAndroid Build Coastguard Worker    # Build executable_args for the three different test types: GTest, Tast,
351*6777b538SAndroid Build Coastguard Worker    # and host-side commands (eg telemetry).
352*6777b538SAndroid Build Coastguard Worker    if (defined(test_exe)) {
353*6777b538SAndroid Build Coastguard Worker      executable_args += [
354*6777b538SAndroid Build Coastguard Worker        "gtest",
355*6777b538SAndroid Build Coastguard Worker        "--test-exe",
356*6777b538SAndroid Build Coastguard Worker        test_exe,
357*6777b538SAndroid Build Coastguard Worker      ]
358*6777b538SAndroid Build Coastguard Worker
359*6777b538SAndroid Build Coastguard Worker      # This target is not a gtest unit test, but an integration test suite.
360*6777b538SAndroid Build Coastguard Worker      # Similar to interactive ui tests, it would start a full browser and
361*6777b538SAndroid Build Coastguard Worker      # then do testing.
362*6777b538SAndroid Build Coastguard Worker      # See more at //docs/testing/chromeos_integration.
363*6777b538SAndroid Build Coastguard Worker      if (test_exe == "chromeos_integration_tests") {
364*6777b538SAndroid Build Coastguard Worker        # Run the test sudo helper.
365*6777b538SAndroid Build Coastguard Worker        executable_args += [ "--run-test-sudo-helper" ]
366*6777b538SAndroid Build Coastguard Worker
367*6777b538SAndroid Build Coastguard Worker        if (is_chromeos_ash) {
368*6777b538SAndroid Build Coastguard Worker          # For ash, it need to first stop the existing ash.
369*6777b538SAndroid Build Coastguard Worker          executable_args += [ "--stop-ui" ]
370*6777b538SAndroid Build Coastguard Worker        }
371*6777b538SAndroid Build Coastguard Worker
372*6777b538SAndroid Build Coastguard Worker        # Lacros need to know the wayland socket file created by Ash.
373*6777b538SAndroid Build Coastguard Worker        # In this way, Lacros will be connected to the system Ash.
374*6777b538SAndroid Build Coastguard Worker        if (is_chromeos_lacros) {
375*6777b538SAndroid Build Coastguard Worker          executable_args += [
376*6777b538SAndroid Build Coastguard Worker            "--env-var",
377*6777b538SAndroid Build Coastguard Worker            "XDG_RUNTIME_DIR",
378*6777b538SAndroid Build Coastguard Worker            "/run/chrome",
379*6777b538SAndroid Build Coastguard Worker          ]
380*6777b538SAndroid Build Coastguard Worker        }
381*6777b538SAndroid Build Coastguard Worker
382*6777b538SAndroid Build Coastguard Worker        # Make the tests match the browser's selinux tags so it gets the same
383*6777b538SAndroid Build Coastguard Worker        # security context as the browser would.
384*6777b538SAndroid Build Coastguard Worker        executable_args += [ "--set-selinux-label=chromeos_integration_tests=u:object_r:chrome_browser_exec:s0" ]
385*6777b538SAndroid Build Coastguard Worker      }
386*6777b538SAndroid Build Coastguard Worker      if (defined(runtime_deps_file)) {
387*6777b538SAndroid Build Coastguard Worker        executable_args += [
388*6777b538SAndroid Build Coastguard Worker          "--runtime-deps-path",
389*6777b538SAndroid Build Coastguard Worker          rebase_path(runtime_deps_file, root_build_dir),
390*6777b538SAndroid Build Coastguard Worker        ]
391*6777b538SAndroid Build Coastguard Worker      }
392*6777b538SAndroid Build Coastguard Worker    } else if (is_tast) {
393*6777b538SAndroid Build Coastguard Worker      # When --tast-tests is specified, test_runner.py will call
394*6777b538SAndroid Build Coastguard Worker      # local_test_runner on the VM to run the set of tests.
395*6777b538SAndroid Build Coastguard Worker      executable_args += [
396*6777b538SAndroid Build Coastguard Worker        "tast",
397*6777b538SAndroid Build Coastguard Worker        "--suite-name",
398*6777b538SAndroid Build Coastguard Worker        target_name,
399*6777b538SAndroid Build Coastguard Worker      ]
400*6777b538SAndroid Build Coastguard Worker      if (defined(tast_attr_expr)) {
401*6777b538SAndroid Build Coastguard Worker        executable_args += [
402*6777b538SAndroid Build Coastguard Worker          "--attr-expr",
403*6777b538SAndroid Build Coastguard Worker          tast_attr_expr,
404*6777b538SAndroid Build Coastguard Worker        ]
405*6777b538SAndroid Build Coastguard Worker      } else {
406*6777b538SAndroid Build Coastguard Worker        foreach(test, tast_tests) {
407*6777b538SAndroid Build Coastguard Worker          executable_args += [
408*6777b538SAndroid Build Coastguard Worker            "-t",
409*6777b538SAndroid Build Coastguard Worker            test,
410*6777b538SAndroid Build Coastguard Worker          ]
411*6777b538SAndroid Build Coastguard Worker        }
412*6777b538SAndroid Build Coastguard Worker      }
413*6777b538SAndroid Build Coastguard Worker      if (defined(tast_vars)) {
414*6777b538SAndroid Build Coastguard Worker        foreach(var, tast_vars) {
415*6777b538SAndroid Build Coastguard Worker          executable_args += [
416*6777b538SAndroid Build Coastguard Worker            "--tast-var",
417*6777b538SAndroid Build Coastguard Worker            var,
418*6777b538SAndroid Build Coastguard Worker          ]
419*6777b538SAndroid Build Coastguard Worker        }
420*6777b538SAndroid Build Coastguard Worker      }
421*6777b538SAndroid Build Coastguard Worker      if (dcheck_always_on) {
422*6777b538SAndroid Build Coastguard Worker        executable_args += [
423*6777b538SAndroid Build Coastguard Worker          "--tast-extra-use-flags",
424*6777b538SAndroid Build Coastguard Worker          "chrome_dcheck",
425*6777b538SAndroid Build Coastguard Worker        ]
426*6777b538SAndroid Build Coastguard Worker      }
427*6777b538SAndroid Build Coastguard Worker    } else {
428*6777b538SAndroid Build Coastguard Worker      executable_args += [ "host-cmd" ]
429*6777b538SAndroid Build Coastguard Worker    }
430*6777b538SAndroid Build Coastguard Worker    executable_args += [
431*6777b538SAndroid Build Coastguard Worker      "--cros-cache",
432*6777b538SAndroid Build Coastguard Worker      "build/cros_cache/",
433*6777b538SAndroid Build Coastguard Worker      "--path-to-outdir",
434*6777b538SAndroid Build Coastguard Worker      rebase_path(root_out_dir, "//"),
435*6777b538SAndroid Build Coastguard Worker      "-v",
436*6777b538SAndroid Build Coastguard Worker    ]
437*6777b538SAndroid Build Coastguard Worker
438*6777b538SAndroid Build Coastguard Worker    if (!is_tast && strip_chrome) {
439*6777b538SAndroid Build Coastguard Worker      executable_args += [ "--strip-chrome" ]
440*6777b538SAndroid Build Coastguard Worker    }
441*6777b538SAndroid Build Coastguard Worker
442*6777b538SAndroid Build Coastguard Worker    if (!skip_generating_board_args) {
443*6777b538SAndroid Build Coastguard Worker      executable_args += [
444*6777b538SAndroid Build Coastguard Worker        "--board",
445*6777b538SAndroid Build Coastguard Worker        cros_board,
446*6777b538SAndroid Build Coastguard Worker      ]
447*6777b538SAndroid Build Coastguard Worker
448*6777b538SAndroid Build Coastguard Worker      _cros_is_vm = false
449*6777b538SAndroid Build Coastguard Worker      foreach(b, string_split(cros_boards_with_qemu_images, ":")) {
450*6777b538SAndroid Build Coastguard Worker        if (cros_board == b) {
451*6777b538SAndroid Build Coastguard Worker          _cros_is_vm = true
452*6777b538SAndroid Build Coastguard Worker        }
453*6777b538SAndroid Build Coastguard Worker      }
454*6777b538SAndroid Build Coastguard Worker      if (_cros_is_vm) {
455*6777b538SAndroid Build Coastguard Worker        executable_args += [ "--use-vm" ]
456*6777b538SAndroid Build Coastguard Worker      } else {
457*6777b538SAndroid Build Coastguard Worker        executable_args += [ "--flash" ]
458*6777b538SAndroid Build Coastguard Worker      }
459*6777b538SAndroid Build Coastguard Worker    }
460*6777b538SAndroid Build Coastguard Worker
461*6777b538SAndroid Build Coastguard Worker    # If we have public Chromium builds, use public Chromium OS images when
462*6777b538SAndroid Build Coastguard Worker    # flashing the test device.
463*6777b538SAndroid Build Coastguard Worker    if (!is_chrome_branded) {
464*6777b538SAndroid Build Coastguard Worker      executable_args += [ "--public-image" ]
465*6777b538SAndroid Build Coastguard Worker    }
466*6777b538SAndroid Build Coastguard Worker
467*6777b538SAndroid Build Coastguard Worker    if (deploy_lacros) {
468*6777b538SAndroid Build Coastguard Worker      executable_args += [ "--deploy-lacros" ]
469*6777b538SAndroid Build Coastguard Worker    }
470*6777b538SAndroid Build Coastguard Worker
471*6777b538SAndroid Build Coastguard Worker    if (deploy_chrome && !defined(test_exe)) {
472*6777b538SAndroid Build Coastguard Worker      executable_args += [ "--deploy-chrome" ]
473*6777b538SAndroid Build Coastguard Worker    }
474*6777b538SAndroid Build Coastguard Worker
475*6777b538SAndroid Build Coastguard Worker    # executable_args should be finished, now build the data and deps lists.
476*6777b538SAndroid Build Coastguard Worker    deps = [ "//testing/buildbot/filters:chromeos_filters" ]
477*6777b538SAndroid Build Coastguard Worker    if (defined(invoker.deps)) {
478*6777b538SAndroid Build Coastguard Worker      deps += invoker.deps
479*6777b538SAndroid Build Coastguard Worker    }
480*6777b538SAndroid Build Coastguard Worker    data = [
481*6777b538SAndroid Build Coastguard Worker      "//.vpython3",
482*6777b538SAndroid Build Coastguard Worker
483*6777b538SAndroid Build Coastguard Worker      # We use android test-runner's results libs to construct gtest output
484*6777b538SAndroid Build Coastguard Worker      # json.
485*6777b538SAndroid Build Coastguard Worker      "//build/android/pylib/__init__.py",
486*6777b538SAndroid Build Coastguard Worker      "//build/android/pylib/base/",
487*6777b538SAndroid Build Coastguard Worker      "//build/android/pylib/results/",
488*6777b538SAndroid Build Coastguard Worker      "//build/chromeos/",
489*6777b538SAndroid Build Coastguard Worker      "//build/util/",
490*6777b538SAndroid Build Coastguard Worker      "//third_party/chromite/",
491*6777b538SAndroid Build Coastguard Worker    ]
492*6777b538SAndroid Build Coastguard Worker
493*6777b538SAndroid Build Coastguard Worker    if (defined(invoker.data)) {
494*6777b538SAndroid Build Coastguard Worker      data += invoker.data
495*6777b538SAndroid Build Coastguard Worker    }
496*6777b538SAndroid Build Coastguard Worker
497*6777b538SAndroid Build Coastguard Worker    data_deps = [ "//testing:test_scripts_shared" ]
498*6777b538SAndroid Build Coastguard Worker    if (cros_sdk_version != "") {
499*6777b538SAndroid Build Coastguard Worker      data_deps += [ ":" + target_name + "_cros_deps__helper" ]
500*6777b538SAndroid Build Coastguard Worker    }
501*6777b538SAndroid Build Coastguard Worker    if (defined(invoker.data_deps)) {
502*6777b538SAndroid Build Coastguard Worker      data_deps += invoker.data_deps
503*6777b538SAndroid Build Coastguard Worker    }
504*6777b538SAndroid Build Coastguard Worker  }
505*6777b538SAndroid Build Coastguard Worker}
506*6777b538SAndroid Build Coastguard Worker
507*6777b538SAndroid Build Coastguard Workertemplate("tast_test") {
508*6777b538SAndroid Build Coastguard Worker  forward_variables_from(invoker, "*")
509*6777b538SAndroid Build Coastguard Worker
510*6777b538SAndroid Build Coastguard Worker  # Default the expression to match any chrome-related test.
511*6777b538SAndroid Build Coastguard Worker  if (!defined(tast_attr_expr) && !defined(tast_tests)) {
512*6777b538SAndroid Build Coastguard Worker    # The following expression filters out all non-critical tests. See the link
513*6777b538SAndroid Build Coastguard Worker    # below for more details:
514*6777b538SAndroid Build Coastguard Worker    # https://chromium.googlesource.com/chromiumos/platform/tast/+/main/docs/test_attributes.md
515*6777b538SAndroid Build Coastguard Worker    tast_attr_expr = "\"group:mainline\" && \"dep:chrome\""
516*6777b538SAndroid Build Coastguard Worker
517*6777b538SAndroid Build Coastguard Worker    if (defined(enable_tast_informational_tests) &&
518*6777b538SAndroid Build Coastguard Worker        enable_tast_informational_tests) {
519*6777b538SAndroid Build Coastguard Worker      tast_attr_expr += " && informational"
520*6777b538SAndroid Build Coastguard Worker    } else {
521*6777b538SAndroid Build Coastguard Worker      tast_attr_expr += " && !informational"
522*6777b538SAndroid Build Coastguard Worker    }
523*6777b538SAndroid Build Coastguard Worker    if (!is_chrome_branded) {
524*6777b538SAndroid Build Coastguard Worker      tast_attr_expr += " && !\"dep:chrome_internal\""
525*6777b538SAndroid Build Coastguard Worker    }
526*6777b538SAndroid Build Coastguard Worker  } else {
527*6777b538SAndroid Build Coastguard Worker    assert(defined(tast_attr_expr) != defined(tast_tests),
528*6777b538SAndroid Build Coastguard Worker           "Specify one of tast_tests or tast_attr_expr.")
529*6777b538SAndroid Build Coastguard Worker  }
530*6777b538SAndroid Build Coastguard Worker
531*6777b538SAndroid Build Coastguard Worker  _data_deps = [
532*6777b538SAndroid Build Coastguard Worker    "//:chromiumos_preflight",  # Builds the browser.
533*6777b538SAndroid Build Coastguard Worker    "//chromeos:cros_chrome_deploy",  # Adds additional browser run-time deps.
534*6777b538SAndroid Build Coastguard Worker
535*6777b538SAndroid Build Coastguard Worker    # Tools used to symbolize Chrome crash dumps.
536*6777b538SAndroid Build Coastguard Worker    # TODO(crbug.com/1156772): Remove these if/when all tests pick them up by
537*6777b538SAndroid Build Coastguard Worker    # default.
538*6777b538SAndroid Build Coastguard Worker    "//third_party/breakpad:dump_syms",
539*6777b538SAndroid Build Coastguard Worker    "//third_party/breakpad:minidump_dump",
540*6777b538SAndroid Build Coastguard Worker    "//third_party/breakpad:minidump_stackwalk",
541*6777b538SAndroid Build Coastguard Worker  ]
542*6777b538SAndroid Build Coastguard Worker  _data = [ "//components/crash/content/tools/generate_breakpad_symbols.py" ]
543*6777b538SAndroid Build Coastguard Worker
544*6777b538SAndroid Build Coastguard Worker  if (is_skylab) {
545*6777b538SAndroid Build Coastguard Worker    generate_skylab_tast_filter(target_name) {
546*6777b538SAndroid Build Coastguard Worker      # chromite.deploy_chrome is needed for sideloading Chrome.
547*6777b538SAndroid Build Coastguard Worker      data = _data + [ "//third_party/chromite/" ]
548*6777b538SAndroid Build Coastguard Worker      data_deps = _data_deps
549*6777b538SAndroid Build Coastguard Worker
550*6777b538SAndroid Build Coastguard Worker      # To disable a test on specific milestones, add it to the appropriate
551*6777b538SAndroid Build Coastguard Worker      # collection in the following file
552*6777b538SAndroid Build Coastguard Worker      tast_control = "//chromeos/tast_control.gni"
553*6777b538SAndroid Build Coastguard Worker    }
554*6777b538SAndroid Build Coastguard Worker  } else {
555*6777b538SAndroid Build Coastguard Worker    # Append any disabled tests to the expression.
556*6777b538SAndroid Build Coastguard Worker    if (defined(tast_disabled_tests)) {
557*6777b538SAndroid Build Coastguard Worker      assert(defined(tast_attr_expr),
558*6777b538SAndroid Build Coastguard Worker             "tast_attr_expr must be used when specifying tast_disabled_tests.")
559*6777b538SAndroid Build Coastguard Worker      foreach(_test_name, tast_disabled_tests) {
560*6777b538SAndroid Build Coastguard Worker        tast_attr_expr += " && !\"name:${_test_name}\""
561*6777b538SAndroid Build Coastguard Worker      }
562*6777b538SAndroid Build Coastguard Worker    }
563*6777b538SAndroid Build Coastguard Worker    if (defined(tast_attr_expr)) {
564*6777b538SAndroid Build Coastguard Worker      tast_attr_expr = "( " + tast_attr_expr + " )"
565*6777b538SAndroid Build Coastguard Worker    }
566*6777b538SAndroid Build Coastguard Worker    generate_runner_script(target_name) {
567*6777b538SAndroid Build Coastguard Worker      testonly = true
568*6777b538SAndroid Build Coastguard Worker      generated_script = "$root_build_dir/bin/run_${target_name}"
569*6777b538SAndroid Build Coastguard Worker      runtime_deps_file = "$root_out_dir/${target_name}.runtime_deps"
570*6777b538SAndroid Build Coastguard Worker      deploy_chrome = true
571*6777b538SAndroid Build Coastguard Worker
572*6777b538SAndroid Build Coastguard Worker      data_deps = _data_deps
573*6777b538SAndroid Build Coastguard Worker      if (!defined(deploy_lacros_chrome)) {
574*6777b538SAndroid Build Coastguard Worker        deploy_lacros_chrome = false
575*6777b538SAndroid Build Coastguard Worker      }
576*6777b538SAndroid Build Coastguard Worker      deploy_lacros = deploy_lacros_chrome
577*6777b538SAndroid Build Coastguard Worker      data = _data
578*6777b538SAndroid Build Coastguard Worker      if (deploy_lacros_chrome) {
579*6777b538SAndroid Build Coastguard Worker        data += [
580*6777b538SAndroid Build Coastguard Worker          # A script needed to launch Lacros in Lacros Tast tests.
581*6777b538SAndroid Build Coastguard Worker          "//build/lacros/mojo_connection_lacros_launcher.py",
582*6777b538SAndroid Build Coastguard Worker        ]
583*6777b538SAndroid Build Coastguard Worker
584*6777b538SAndroid Build Coastguard Worker        # By default, tast tests download a lacros-chrome from a gcs location and
585*6777b538SAndroid Build Coastguard Worker        # use it for testing. To support running lacros tast tests from Chromium CI,
586*6777b538SAndroid Build Coastguard Worker        # a Var is added to support pointing the tast tests to use a specified
587*6777b538SAndroid Build Coastguard Worker        # pre-deployed lacros-chrome. The location is decided by:
588*6777b538SAndroid Build Coastguard Worker        # https://source.chromium.org/chromium/chromium/src/+/main:third_party/chromite/scripts/deploy_chrome.py;l=80;drc=86f1234a4be8e9574442e076cdc835897f7bea61
589*6777b538SAndroid Build Coastguard Worker        tast_vars = [ "lacros.DeployedBinary=/usr/local/lacros-chrome" ]
590*6777b538SAndroid Build Coastguard Worker      }
591*6777b538SAndroid Build Coastguard Worker    }
592*6777b538SAndroid Build Coastguard Worker  }
593*6777b538SAndroid Build Coastguard Worker}
594*6777b538SAndroid Build Coastguard Worker
595*6777b538SAndroid Build Coastguard Workertemplate("lacros_tast_tests") {
596*6777b538SAndroid Build Coastguard Worker  forward_variables_from(invoker,
597*6777b538SAndroid Build Coastguard Worker                         [
598*6777b538SAndroid Build Coastguard Worker                           "tast_attr_expr",
599*6777b538SAndroid Build Coastguard Worker                           "tast_disabled_tests",
600*6777b538SAndroid Build Coastguard Worker                           "tast_tests",
601*6777b538SAndroid Build Coastguard Worker                           "tast_control",
602*6777b538SAndroid Build Coastguard Worker                         ])
603*6777b538SAndroid Build Coastguard Worker  assert(defined(tast_attr_expr) != defined(tast_tests),
604*6777b538SAndroid Build Coastguard Worker         "Specify one of tast_tests or tast_attr_expr.")
605*6777b538SAndroid Build Coastguard Worker
606*6777b538SAndroid Build Coastguard Worker  _lacros_data_deps = [
607*6777b538SAndroid Build Coastguard Worker    "//chrome",  # Builds the browser.
608*6777b538SAndroid Build Coastguard Worker
609*6777b538SAndroid Build Coastguard Worker    # Tools used to symbolize Chrome crash dumps.
610*6777b538SAndroid Build Coastguard Worker    # TODO(crbug.com/1156772): Remove these if/when all tests pick them up by
611*6777b538SAndroid Build Coastguard Worker    # default.
612*6777b538SAndroid Build Coastguard Worker    "//third_party/breakpad:dump_syms",
613*6777b538SAndroid Build Coastguard Worker    "//third_party/breakpad:minidump_dump",
614*6777b538SAndroid Build Coastguard Worker    "//third_party/breakpad:minidump_stackwalk",
615*6777b538SAndroid Build Coastguard Worker  ]
616*6777b538SAndroid Build Coastguard Worker
617*6777b538SAndroid Build Coastguard Worker  _lacros_data = [
618*6777b538SAndroid Build Coastguard Worker    "//components/crash/content/tools/generate_breakpad_symbols.py",
619*6777b538SAndroid Build Coastguard Worker
620*6777b538SAndroid Build Coastguard Worker    # A script needed to launch Lacros in Lacros Tast tests.
621*6777b538SAndroid Build Coastguard Worker    "//build/lacros/mojo_connection_lacros_launcher.py",
622*6777b538SAndroid Build Coastguard Worker  ]
623*6777b538SAndroid Build Coastguard Worker
624*6777b538SAndroid Build Coastguard Worker  if (is_skylab) {
625*6777b538SAndroid Build Coastguard Worker    generate_skylab_tast_filter(target_name) {
626*6777b538SAndroid Build Coastguard Worker      data = _lacros_data + [
627*6777b538SAndroid Build Coastguard Worker               "//.vpython3",
628*6777b538SAndroid Build Coastguard Worker               "//third_party/chromite/",
629*6777b538SAndroid Build Coastguard Worker             ]
630*6777b538SAndroid Build Coastguard Worker      data_deps = _lacros_data_deps
631*6777b538SAndroid Build Coastguard Worker
632*6777b538SAndroid Build Coastguard Worker      # To disable a test on specific milestones, add it to the appropriate
633*6777b538SAndroid Build Coastguard Worker      # collection in the following file
634*6777b538SAndroid Build Coastguard Worker      tast_control = "//chromeos/tast_control.gni"
635*6777b538SAndroid Build Coastguard Worker    }
636*6777b538SAndroid Build Coastguard Worker  } else {
637*6777b538SAndroid Build Coastguard Worker    # Append any disabled tests to the expression.
638*6777b538SAndroid Build Coastguard Worker    if (defined(tast_disabled_tests)) {
639*6777b538SAndroid Build Coastguard Worker      assert(defined(tast_attr_expr),
640*6777b538SAndroid Build Coastguard Worker             "tast_attr_expr must be used when specifying tast_disabled_tests.")
641*6777b538SAndroid Build Coastguard Worker      foreach(_test, tast_disabled_tests) {
642*6777b538SAndroid Build Coastguard Worker        _excluded_test_name_and_board = []
643*6777b538SAndroid Build Coastguard Worker        _excluded_test_name_and_board = string_split(_test, "@") + [ "" ]
644*6777b538SAndroid Build Coastguard Worker        _excluded_test_name = _excluded_test_name_and_board[0]
645*6777b538SAndroid Build Coastguard Worker        _excluded_board = _excluded_test_name_and_board[1]
646*6777b538SAndroid Build Coastguard Worker        if (_excluded_board == "" || _excluded_board == cros_board) {
647*6777b538SAndroid Build Coastguard Worker          tast_attr_expr += " && !\"name:${_excluded_test_name}\""
648*6777b538SAndroid Build Coastguard Worker        }
649*6777b538SAndroid Build Coastguard Worker      }
650*6777b538SAndroid Build Coastguard Worker    }
651*6777b538SAndroid Build Coastguard Worker    if (defined(tast_attr_expr)) {
652*6777b538SAndroid Build Coastguard Worker      tast_attr_expr = "( " + tast_attr_expr + " )"
653*6777b538SAndroid Build Coastguard Worker    }
654*6777b538SAndroid Build Coastguard Worker    generate_runner_script(target_name) {
655*6777b538SAndroid Build Coastguard Worker      testonly = true
656*6777b538SAndroid Build Coastguard Worker      deploy_lacros = true
657*6777b538SAndroid Build Coastguard Worker      generated_script = "$root_build_dir/bin/run_${target_name}"
658*6777b538SAndroid Build Coastguard Worker      runtime_deps_file = "$root_out_dir/${target_name}.runtime_deps"
659*6777b538SAndroid Build Coastguard Worker
660*6777b538SAndroid Build Coastguard Worker      # At build time, Lacros tests don't know whether they'll run on VM or HW,
661*6777b538SAndroid Build Coastguard Worker      # and instead, these flags are specified at runtime when invoking the
662*6777b538SAndroid Build Coastguard Worker      # generated runner script.
663*6777b538SAndroid Build Coastguard Worker      skip_generating_board_args = true
664*6777b538SAndroid Build Coastguard Worker
665*6777b538SAndroid Build Coastguard Worker      # By default, tast tests download a lacros-chrome from a gcs location and
666*6777b538SAndroid Build Coastguard Worker      # use it for testing. To support running lacros tast tests from Chromium CI,
667*6777b538SAndroid Build Coastguard Worker      # a Var is added to support pointing the tast tests to use a specified
668*6777b538SAndroid Build Coastguard Worker      # pre-deployed lacros-chrome. The location is decided by:
669*6777b538SAndroid Build Coastguard Worker      # https://source.chromium.org/chromium/chromium/src/+/main:third_party/chromite/scripts/deploy_chrome.py;l=80;drc=86f1234a4be8e9574442e076cdc835897f7bea61
670*6777b538SAndroid Build Coastguard Worker      tast_vars = [ "lacros.DeployedBinary=/usr/local/lacros-chrome" ]
671*6777b538SAndroid Build Coastguard Worker
672*6777b538SAndroid Build Coastguard Worker      data_deps = _lacros_data_deps
673*6777b538SAndroid Build Coastguard Worker
674*6777b538SAndroid Build Coastguard Worker      data = _lacros_data
675*6777b538SAndroid Build Coastguard Worker    }
676*6777b538SAndroid Build Coastguard Worker  }
677*6777b538SAndroid Build Coastguard Worker}
678