1*6777b538SAndroid Build Coastguard Worker# Copyright 2015 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 Worker# ============================================================================== 6*6777b538SAndroid Build Coastguard Worker# TEST SETUP 7*6777b538SAndroid Build Coastguard Worker# ============================================================================== 8*6777b538SAndroid Build Coastguard Worker 9*6777b538SAndroid Build Coastguard Workerimport("//build/config/chromeos/args.gni") 10*6777b538SAndroid Build Coastguard Workerimport("//build/config/chromeos/ui_mode.gni") 11*6777b538SAndroid Build Coastguard Workerimport("//build/config/devtools.gni") 12*6777b538SAndroid Build Coastguard Workerimport("//build/config/gclient_args.gni") 13*6777b538SAndroid Build Coastguard Workerimport("//build/rust/rust_static_library.gni") 14*6777b538SAndroid Build Coastguard Workerimport("//build_overrides/build.gni") 15*6777b538SAndroid Build Coastguard Worker 16*6777b538SAndroid Build Coastguard Workerdeclare_args() { 17*6777b538SAndroid Build Coastguard Worker # Some component repos (e.g. ANGLE) import //testing but do not have 18*6777b538SAndroid Build Coastguard Worker # "location_tags.json", and so we don't want to try and upload the tags 19*6777b538SAndroid Build Coastguard Worker # for their tests. 20*6777b538SAndroid Build Coastguard Worker # And, some build configs may simply turn off generation altogether. 21*6777b538SAndroid Build Coastguard Worker tests_have_location_tags = generate_location_tags 22*6777b538SAndroid Build Coastguard Worker} 23*6777b538SAndroid Build Coastguard Worker 24*6777b538SAndroid Build Coastguard Worker# On Fuchsia, the test executable has a suffix and is a dependency of the 25*6777b538SAndroid Build Coastguard Worker# common |target_name| target. For `visibility`, the executable must be 26*6777b538SAndroid Build Coastguard Worker# specified. Cross-platform targets that include `test` targets in their 27*6777b538SAndroid Build Coastguard Worker# visibility lists, add `${exec_target_suffix}` immediately after the test 28*6777b538SAndroid Build Coastguard Worker# target name. This is not necessary when the target is a `source_set`. 29*6777b538SAndroid Build Coastguard Workerif (is_fuchsia) { 30*6777b538SAndroid Build Coastguard Worker exec_target_suffix = "__exec" 31*6777b538SAndroid Build Coastguard Worker} else { 32*6777b538SAndroid Build Coastguard Worker exec_target_suffix = "" 33*6777b538SAndroid Build Coastguard Worker} 34*6777b538SAndroid Build Coastguard Worker 35*6777b538SAndroid Build Coastguard Workerif (is_android) { 36*6777b538SAndroid Build Coastguard Worker import("//build/config/android/config.gni") 37*6777b538SAndroid Build Coastguard Worker import("//build/config/android/create_unwind_table.gni") 38*6777b538SAndroid Build Coastguard Worker import("//build/config/android/extract_unwind_tables.gni") 39*6777b538SAndroid Build Coastguard Worker import("//build/config/android/rules.gni") 40*6777b538SAndroid Build Coastguard Worker import("//build/config/sanitizers/sanitizers.gni") 41*6777b538SAndroid Build Coastguard Worker} else if (is_fuchsia) { 42*6777b538SAndroid Build Coastguard Worker import("//build/config/fuchsia/generate_runner_scripts.gni") 43*6777b538SAndroid Build Coastguard Worker import("//third_party/fuchsia-gn-sdk/src/cmc.gni") 44*6777b538SAndroid Build Coastguard Worker import("//third_party/fuchsia-gn-sdk/src/component.gni") 45*6777b538SAndroid Build Coastguard Worker import("//third_party/fuchsia-gn-sdk/src/package.gni") 46*6777b538SAndroid Build Coastguard Worker} else if (is_chromeos && is_chromeos_device) { 47*6777b538SAndroid Build Coastguard Worker import("//build/config/chromeos/rules.gni") 48*6777b538SAndroid Build Coastguard Worker import("//build/config/sanitizers/sanitizers.gni") 49*6777b538SAndroid Build Coastguard Worker import("//build/util/generate_wrapper.gni") 50*6777b538SAndroid Build Coastguard Worker} else if (is_ios) { 51*6777b538SAndroid Build Coastguard Worker import("//build/config/ios/ios_sdk.gni") 52*6777b538SAndroid Build Coastguard Worker import("//build/config/ios/ios_test_runner_wrapper.gni") 53*6777b538SAndroid Build Coastguard Worker import("//build/config/ios/rules.gni") 54*6777b538SAndroid Build Coastguard Worker} else { 55*6777b538SAndroid Build Coastguard Worker import("//build/config/sanitizers/sanitizers.gni") 56*6777b538SAndroid Build Coastguard Worker import("//build/util/generate_wrapper.gni") 57*6777b538SAndroid Build Coastguard Worker} 58*6777b538SAndroid Build Coastguard Worker 59*6777b538SAndroid Build Coastguard Worker# This template represents the core common functionality of a test target 60*6777b538SAndroid Build Coastguard Worker# on each platform. It includes: 61*6777b538SAndroid Build Coastguard Worker# * the ability to generate a rust library that includes all .rs files found 62*6777b538SAndroid Build Coastguard Worker# in sources and depends on that from the test target. 63*6777b538SAndroid Build Coastguard Worker# * the ability to recognize any declare fuzztests and build runners for them. 64*6777b538SAndroid Build Coastguard Workertemplate("mixed_test") { 65*6777b538SAndroid Build Coastguard Worker assert(defined(invoker.target_type) && invoker.target_type != "") 66*6777b538SAndroid Build Coastguard Worker 67*6777b538SAndroid Build Coastguard Worker # The crate_root variable would transform the target into a Rust binary 68*6777b538SAndroid Build Coastguard Worker # which is incorrect. To not use a generated crate root set: 69*6777b538SAndroid Build Coastguard Worker # ``` 70*6777b538SAndroid Build Coastguard Worker # test_crate_root = "path/to/root.rs" 71*6777b538SAndroid Build Coastguard Worker # ``` 72*6777b538SAndroid Build Coastguard Worker assert(!defined(invoker.crate_root)) 73*6777b538SAndroid Build Coastguard Worker 74*6777b538SAndroid Build Coastguard Worker _rs_vars = [ 75*6777b538SAndroid Build Coastguard Worker "sources", # We split this list into two. 76*6777b538SAndroid Build Coastguard Worker "crate_name", # Android test template overrides the crate name. 77*6777b538SAndroid Build Coastguard Worker ] 78*6777b538SAndroid Build Coastguard Worker 79*6777b538SAndroid Build Coastguard Worker if (defined(invoker.sources)) { 80*6777b538SAndroid Build Coastguard Worker _rs_sources = filter_include(invoker.sources, [ "*.rs" ]) 81*6777b538SAndroid Build Coastguard Worker _cc_sources = filter_exclude(invoker.sources, [ "*.rs" ]) 82*6777b538SAndroid Build Coastguard Worker } else { 83*6777b538SAndroid Build Coastguard Worker _rs_sources = [] 84*6777b538SAndroid Build Coastguard Worker _cc_sources = [] 85*6777b538SAndroid Build Coastguard Worker } 86*6777b538SAndroid Build Coastguard Worker 87*6777b538SAndroid Build Coastguard Worker if (_rs_sources != []) { 88*6777b538SAndroid Build Coastguard Worker # Note: as a weak convention, __ is usually used before a suffix for 89*6777b538SAndroid Build Coastguard Worker # internally-generated targets. However, rust_target requires a strict 90*6777b538SAndroid Build Coastguard Worker # snake_case name. 91*6777b538SAndroid Build Coastguard Worker if (defined(invoker.crate_name)) { 92*6777b538SAndroid Build Coastguard Worker _rust_target_name = "${invoker.crate_name}_rust_objects" 93*6777b538SAndroid Build Coastguard Worker } else { 94*6777b538SAndroid Build Coastguard Worker _rust_target_name = "${target_name}_rust_objects" 95*6777b538SAndroid Build Coastguard Worker } 96*6777b538SAndroid Build Coastguard Worker 97*6777b538SAndroid Build Coastguard Worker # We could automatically add `deps += [ "//testing/rust_gtest_interop" ]` 98*6777b538SAndroid Build Coastguard Worker # if `rs_sources` is non-empty. But we don't automatically provide 99*6777b538SAndroid Build Coastguard Worker # //testing/gtest either so it would be asymmetric and could break in that 100*6777b538SAndroid Build Coastguard Worker # case. So, we act instead as if //testing/rust_gtest_interop is part of 101*6777b538SAndroid Build Coastguard Worker # the //testing/gtest dependency. If you add one, and have `rs_sources` 102*6777b538SAndroid Build Coastguard Worker # listed, you get both. 103*6777b538SAndroid Build Coastguard Worker _gtest_is_in_deps = false 104*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps) && invoker.deps != []) { 105*6777b538SAndroid Build Coastguard Worker foreach(dep, invoker.deps) { 106*6777b538SAndroid Build Coastguard Worker if (get_label_info(dep, "label_no_toolchain") == 107*6777b538SAndroid Build Coastguard Worker "//testing/gtest:gtest") { 108*6777b538SAndroid Build Coastguard Worker _gtest_is_in_deps = true 109*6777b538SAndroid Build Coastguard Worker } 110*6777b538SAndroid Build Coastguard Worker } 111*6777b538SAndroid Build Coastguard Worker } 112*6777b538SAndroid Build Coastguard Worker 113*6777b538SAndroid Build Coastguard Worker # TODO(danakj): This could be a rust_source_set perhaps, the point being 114*6777b538SAndroid Build Coastguard Worker # that we need to link in all the .o object files inside the library, 115*6777b538SAndroid Build Coastguard Worker # instead of dropping unreachable ones during linking (which would drop the 116*6777b538SAndroid Build Coastguard Worker # tests). Alternatively we could use a special name suffix or other similar 117*6777b538SAndroid Build Coastguard Worker # trick perhaps to ensure that all object files are linked in here. 118*6777b538SAndroid Build Coastguard Worker rust_static_library(_rust_target_name) { 119*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 120*6777b538SAndroid Build Coastguard Worker TESTONLY_AND_VISIBILITY + [ 121*6777b538SAndroid Build Coastguard Worker "allow_unsafe", 122*6777b538SAndroid Build Coastguard Worker "deps", 123*6777b538SAndroid Build Coastguard Worker "generate_crate_root", 124*6777b538SAndroid Build Coastguard Worker "public_deps", 125*6777b538SAndroid Build Coastguard Worker ]) 126*6777b538SAndroid Build Coastguard Worker configs += [ "//build/rust:test" ] 127*6777b538SAndroid Build Coastguard Worker if (defined(invoker.test_crate_root)) { 128*6777b538SAndroid Build Coastguard Worker crate_root = invoker.test_crate_root 129*6777b538SAndroid Build Coastguard Worker } else { 130*6777b538SAndroid Build Coastguard Worker generate_crate_root = true 131*6777b538SAndroid Build Coastguard Worker } 132*6777b538SAndroid Build Coastguard Worker sources = _rs_sources 133*6777b538SAndroid Build Coastguard Worker is_gtest_unittests = true 134*6777b538SAndroid Build Coastguard Worker 135*6777b538SAndroid Build Coastguard Worker if (_gtest_is_in_deps) { 136*6777b538SAndroid Build Coastguard Worker deps += [ "//testing/rust_gtest_interop" ] 137*6777b538SAndroid Build Coastguard Worker } 138*6777b538SAndroid Build Coastguard Worker } 139*6777b538SAndroid Build Coastguard Worker } else { 140*6777b538SAndroid Build Coastguard Worker not_needed(invoker, _rs_vars) 141*6777b538SAndroid Build Coastguard Worker } 142*6777b538SAndroid Build Coastguard Worker 143*6777b538SAndroid Build Coastguard Worker if (invoker.target_type == "shared_library_with_jni") { 144*6777b538SAndroid Build Coastguard Worker # Needed for shared_library_with_jni. Keeping this import guarded so 145*6777b538SAndroid Build Coastguard Worker # that projects who import //testing but not //third_party/jni_zero 146*6777b538SAndroid Build Coastguard Worker # don't have issues. 147*6777b538SAndroid Build Coastguard Worker import("//third_party/jni_zero/jni_zero.gni") 148*6777b538SAndroid Build Coastguard Worker } 149*6777b538SAndroid Build Coastguard Worker 150*6777b538SAndroid Build Coastguard Worker _building_fuzztest_fuzzer = 151*6777b538SAndroid Build Coastguard Worker defined(invoker.fuzztests) && use_fuzzing_engine && is_linux 152*6777b538SAndroid Build Coastguard Worker 153*6777b538SAndroid Build Coastguard Worker # Fuzz tests are small fuzzers that do not require particularly-powerful 154*6777b538SAndroid Build Coastguard Worker # machines to run, so we do not build them when `high_end_fuzzer_targets` 155*6777b538SAndroid Build Coastguard Worker # is true and we are building fuzztests in fuzzing mode. 156*6777b538SAndroid Build Coastguard Worker if (_building_fuzztest_fuzzer && high_end_fuzzer_targets) { 157*6777b538SAndroid Build Coastguard Worker not_needed(invoker, "*") 158*6777b538SAndroid Build Coastguard Worker not_needed("*") 159*6777b538SAndroid Build Coastguard Worker 160*6777b538SAndroid Build Coastguard Worker # We still want a reachable target, so make it a no-op empty group. This 161*6777b538SAndroid Build Coastguard Worker # will let the fuzzer builders crawl the build graph and invoke ninja in 162*6777b538SAndroid Build Coastguard Worker # the same way regardless of GN args. 163*6777b538SAndroid Build Coastguard Worker group(target_name) { 164*6777b538SAndroid Build Coastguard Worker } 165*6777b538SAndroid Build Coastguard Worker } else { 166*6777b538SAndroid Build Coastguard Worker target(invoker.target_type, target_name) { 167*6777b538SAndroid Build Coastguard Worker forward_variables_from( 168*6777b538SAndroid Build Coastguard Worker invoker, 169*6777b538SAndroid Build Coastguard Worker "*", 170*6777b538SAndroid Build Coastguard Worker TESTONLY_AND_VISIBILITY + _rs_vars + [ "fuzztests" ]) 171*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) 172*6777b538SAndroid Build Coastguard Worker sources = _cc_sources 173*6777b538SAndroid Build Coastguard Worker if (!defined(deps)) { 174*6777b538SAndroid Build Coastguard Worker deps = [] 175*6777b538SAndroid Build Coastguard Worker } 176*6777b538SAndroid Build Coastguard Worker if (!defined(ldflags)) { 177*6777b538SAndroid Build Coastguard Worker ldflags = [] 178*6777b538SAndroid Build Coastguard Worker } 179*6777b538SAndroid Build Coastguard Worker 180*6777b538SAndroid Build Coastguard Worker if (_rs_sources != []) { 181*6777b538SAndroid Build Coastguard Worker deps += [ ":${_rust_target_name}" ] 182*6777b538SAndroid Build Coastguard Worker } 183*6777b538SAndroid Build Coastguard Worker if (defined(invoker.fuzztests)) { 184*6777b538SAndroid Build Coastguard Worker deps += [ "//third_party/fuzztest" ] 185*6777b538SAndroid Build Coastguard Worker } 186*6777b538SAndroid Build Coastguard Worker } 187*6777b538SAndroid Build Coastguard Worker } 188*6777b538SAndroid Build Coastguard Worker 189*6777b538SAndroid Build Coastguard Worker if (_building_fuzztest_fuzzer && !high_end_fuzzer_targets) { 190*6777b538SAndroid Build Coastguard Worker # This test contains fuzztests. We want to package them up in a way 191*6777b538SAndroid Build Coastguard Worker # which ClusterFuzz knows how to extract. We need to: 192*6777b538SAndroid Build Coastguard Worker # 1) make an executable for each individual fuzz test; 193*6777b538SAndroid Build Coastguard Worker # 2) check that the fuzztests variable is correct. 194*6777b538SAndroid Build Coastguard Worker # At present, all this is likely to work only if invoker.target_type 195*6777b538SAndroid Build Coastguard Worker # is 'executable', since we generate a wrapper script that assumes so. 196*6777b538SAndroid Build Coastguard Worker # At the moment, we aim to fuzz these fuzztests only on Linux so that's 197*6777b538SAndroid Build Coastguard Worker # fine. In future we may need to broaden this. 198*6777b538SAndroid Build Coastguard Worker if (defined(invoker.output_name)) { 199*6777b538SAndroid Build Coastguard Worker _output_name = invoker.output_name 200*6777b538SAndroid Build Coastguard Worker } else { 201*6777b538SAndroid Build Coastguard Worker _output_name = target_name 202*6777b538SAndroid Build Coastguard Worker } 203*6777b538SAndroid Build Coastguard Worker 204*6777b538SAndroid Build Coastguard Worker _fuzzer_binary_extension = "" 205*6777b538SAndroid Build Coastguard Worker if (is_win) { 206*6777b538SAndroid Build Coastguard Worker _fuzzer_binary_extension = ".exe" 207*6777b538SAndroid Build Coastguard Worker } 208*6777b538SAndroid Build Coastguard Worker 209*6777b538SAndroid Build Coastguard Worker # This will be the actual name of the fuzzer binary generated by 210*6777b538SAndroid Build Coastguard Worker # `target_name`. 211*6777b538SAndroid Build Coastguard Worker _fuzzer_binary_name = _output_name + _fuzzer_binary_extension 212*6777b538SAndroid Build Coastguard Worker _fuzztest_target_name = target_name 213*6777b538SAndroid Build Coastguard Worker 214*6777b538SAndroid Build Coastguard Worker # Confirming that the "fuzztests =" directive is correct can only 215*6777b538SAndroid Build Coastguard Worker # be done on builds where we can confidently run the fuzzing binary. 216*6777b538SAndroid Build Coastguard Worker # Let's be conservative about that -- so long as any failures are 217*6777b538SAndroid Build Coastguard Worker # spotted by at least one CI bot we should be good. 218*6777b538SAndroid Build Coastguard Worker confirm_fuzztest_contents = is_asan || !using_sanitizer 219*6777b538SAndroid Build Coastguard Worker 220*6777b538SAndroid Build Coastguard Worker if (confirm_fuzztest_contents) { 221*6777b538SAndroid Build Coastguard Worker # Confirm that the fuzztests GN variable matches with the 222*6777b538SAndroid Build Coastguard Worker # actual fuzztests in the binary. The output of this action is unused. 223*6777b538SAndroid Build Coastguard Worker # It just exists to fail the build if there's an error. 224*6777b538SAndroid Build Coastguard Worker # We only do this on Linux, and not for any sanitizers other than 225*6777b538SAndroid Build Coastguard Worker # ASAN, because that's specific for CI to show problems and there 226*6777b538SAndroid Build Coastguard Worker # may be unknown problems running the fuzztest binary on other 227*6777b538SAndroid Build Coastguard Worker # platforms. 228*6777b538SAndroid Build Coastguard Worker _fuzztest_check_action = target_name + "__fuzztest_check" 229*6777b538SAndroid Build Coastguard Worker action(_fuzztest_check_action) { 230*6777b538SAndroid Build Coastguard Worker deps = [ ":" + _fuzztest_target_name ] 231*6777b538SAndroid Build Coastguard Worker testonly = true 232*6777b538SAndroid Build Coastguard Worker script = "//testing/libfuzzer/confirm_fuzztests.py" 233*6777b538SAndroid Build Coastguard Worker _output_name = "$target_gen_dir/${target_name}__checked.txt" 234*6777b538SAndroid Build Coastguard Worker outputs = [ _output_name ] 235*6777b538SAndroid Build Coastguard Worker 236*6777b538SAndroid Build Coastguard Worker args = [ 237*6777b538SAndroid Build Coastguard Worker "--executable", 238*6777b538SAndroid Build Coastguard Worker rebase_path( 239*6777b538SAndroid Build Coastguard Worker get_label_info(_fuzztest_target_name, "root_out_dir") + 240*6777b538SAndroid Build Coastguard Worker "/" + _fuzzer_binary_name), 241*6777b538SAndroid Build Coastguard Worker "--output", 242*6777b538SAndroid Build Coastguard Worker rebase_path(_output_name), 243*6777b538SAndroid Build Coastguard Worker "--fuzztests", 244*6777b538SAndroid Build Coastguard Worker ] + invoker.fuzztests 245*6777b538SAndroid Build Coastguard Worker } 246*6777b538SAndroid Build Coastguard Worker } 247*6777b538SAndroid Build Coastguard Worker 248*6777b538SAndroid Build Coastguard Worker # Make a wrapper executable for each individual fuzz test 249*6777b538SAndroid Build Coastguard Worker foreach(fuzztest_unit, invoker.fuzztests) { 250*6777b538SAndroid Build Coastguard Worker _fuzzer_name = target_name + "_" + 251*6777b538SAndroid Build Coastguard Worker string_replace(fuzztest_unit, ".", "_") + "_fuzzer" 252*6777b538SAndroid Build Coastguard Worker 253*6777b538SAndroid Build Coastguard Worker # We generate an actual executable because currently our fuzz 254*6777b538SAndroid Build Coastguard Worker # builder recipes use `gn refs --type=executable` to find things 255*6777b538SAndroid Build Coastguard Worker # to build. Otherwise we could use generate_wrapper or equivalent 256*6777b538SAndroid Build Coastguard Worker # to make a python script. We could alter the recipe, or rearrange 257*6777b538SAndroid Build Coastguard Worker # deps arragenements so that some other executable depends on these 258*6777b538SAndroid Build Coastguard Worker # scripts, but that seems worse. The executable might be more cross- 259*6777b538SAndroid Build Coastguard Worker # platform too. 260*6777b538SAndroid Build Coastguard Worker _fuzztest_generate_fuzzer = _fuzzer_name + "__generate" 261*6777b538SAndroid Build Coastguard Worker 262*6777b538SAndroid Build Coastguard Worker generated_file(_fuzztest_generate_fuzzer + "_constants") { 263*6777b538SAndroid Build Coastguard Worker outputs = [ "$target_gen_dir/$target_name/constants.cpp" ] 264*6777b538SAndroid Build Coastguard Worker 265*6777b538SAndroid Build Coastguard Worker # If we're building for libfuzzer, we have to pass -undefok=max_len 266*6777b538SAndroid Build Coastguard Worker # etc. for every conceivable libfuzzer argument, so that gtest doesn't 267*6777b538SAndroid Build Coastguard Worker # get discombobulated by them. List is from https://llvm.org/docs/LibFuzzer.html 268*6777b538SAndroid Build Coastguard Worker if (use_libfuzzer) { 269*6777b538SAndroid Build Coastguard Worker known_libfuzzer_args = [ 270*6777b538SAndroid Build Coastguard Worker "help", 271*6777b538SAndroid Build Coastguard Worker "seed", 272*6777b538SAndroid Build Coastguard Worker "runs", 273*6777b538SAndroid Build Coastguard Worker "max_len", 274*6777b538SAndroid Build Coastguard Worker "len_control", 275*6777b538SAndroid Build Coastguard Worker "timeout", 276*6777b538SAndroid Build Coastguard Worker "rss_limit_mb", 277*6777b538SAndroid Build Coastguard Worker "malloc_limit_mb", 278*6777b538SAndroid Build Coastguard Worker "timeout_exitcode", 279*6777b538SAndroid Build Coastguard Worker "error_exitcode", 280*6777b538SAndroid Build Coastguard Worker "max_total_time", 281*6777b538SAndroid Build Coastguard Worker "merge", 282*6777b538SAndroid Build Coastguard Worker "merge_control_file", 283*6777b538SAndroid Build Coastguard Worker "minimize_crash", 284*6777b538SAndroid Build Coastguard Worker "reload", 285*6777b538SAndroid Build Coastguard Worker "jobs", 286*6777b538SAndroid Build Coastguard Worker "workers", 287*6777b538SAndroid Build Coastguard Worker "dict", 288*6777b538SAndroid Build Coastguard Worker "use_counters", 289*6777b538SAndroid Build Coastguard Worker "reduce_inputs", 290*6777b538SAndroid Build Coastguard Worker "use_value_profile", 291*6777b538SAndroid Build Coastguard Worker "only_ascii", 292*6777b538SAndroid Build Coastguard Worker "artifact_prefix", 293*6777b538SAndroid Build Coastguard Worker "exact_artifact_path", 294*6777b538SAndroid Build Coastguard Worker "print_pcs", 295*6777b538SAndroid Build Coastguard Worker "print_final_stats", 296*6777b538SAndroid Build Coastguard Worker "detect_leaks", 297*6777b538SAndroid Build Coastguard Worker "close_fd_mask", 298*6777b538SAndroid Build Coastguard Worker "fork", 299*6777b538SAndroid Build Coastguard Worker ] 300*6777b538SAndroid Build Coastguard Worker fuzzer_args = 301*6777b538SAndroid Build Coastguard Worker "-undefok=" + string_join(",", known_libfuzzer_args) + " " 302*6777b538SAndroid Build Coastguard Worker } else { 303*6777b538SAndroid Build Coastguard Worker fuzzer_args = "" 304*6777b538SAndroid Build Coastguard Worker } 305*6777b538SAndroid Build Coastguard Worker fuzzer_args += "--fuzz=$fuzztest_unit" 306*6777b538SAndroid Build Coastguard Worker contents = [ "const char* kFuzzerArgs = \"${fuzzer_args}\"; const char* kFuzzerBinary = \"${_fuzzer_binary_name}\";" ] 307*6777b538SAndroid Build Coastguard Worker } 308*6777b538SAndroid Build Coastguard Worker 309*6777b538SAndroid Build Coastguard Worker _fuzzer_target_name = target_name 310*6777b538SAndroid Build Coastguard Worker executable(_fuzztest_generate_fuzzer) { 311*6777b538SAndroid Build Coastguard Worker testonly = true 312*6777b538SAndroid Build Coastguard Worker data_deps = [ 313*6777b538SAndroid Build Coastguard Worker ":" + _fuzztest_target_name, 314*6777b538SAndroid Build Coastguard Worker ":" + _fuzzer_target_name, 315*6777b538SAndroid Build Coastguard Worker ] 316*6777b538SAndroid Build Coastguard Worker deps = [ 317*6777b538SAndroid Build Coastguard Worker # Depend on fuzzing_engine so that our recipes know to build all 318*6777b538SAndroid Build Coastguard Worker # these wrapper script targets. 319*6777b538SAndroid Build Coastguard Worker "//testing/libfuzzer:fuzzing_engine", 320*6777b538SAndroid Build Coastguard Worker "//testing/libfuzzer:individual_fuzztest_wrapper", 321*6777b538SAndroid Build Coastguard Worker ":" + _fuzztest_generate_fuzzer + "_constants", 322*6777b538SAndroid Build Coastguard Worker ] 323*6777b538SAndroid Build Coastguard Worker if (confirm_fuzztest_contents) { 324*6777b538SAndroid Build Coastguard Worker deps += [ ":" + _fuzztest_check_action ] 325*6777b538SAndroid Build Coastguard Worker } 326*6777b538SAndroid Build Coastguard Worker output_name = _fuzzer_name 327*6777b538SAndroid Build Coastguard Worker sources = 328*6777b538SAndroid Build Coastguard Worker get_target_outputs(":" + _fuzztest_generate_fuzzer + "_constants") 329*6777b538SAndroid Build Coastguard Worker write_runtime_deps = "$root_build_dir/${_fuzzer_name}.runtime_deps" 330*6777b538SAndroid Build Coastguard Worker } 331*6777b538SAndroid Build Coastguard Worker } 332*6777b538SAndroid Build Coastguard Worker } 333*6777b538SAndroid Build Coastguard Worker} 334*6777b538SAndroid Build Coastguard Worker 335*6777b538SAndroid Build Coastguard Worker# Define a test as an executable (or apk on Android) with the "testonly" flag 336*6777b538SAndroid Build Coastguard Worker# set. 337*6777b538SAndroid Build Coastguard Worker# Variable: 338*6777b538SAndroid Build Coastguard Worker# use_xvfb: (optional) whether to run the executable under Xvfb. 339*6777b538SAndroid Build Coastguard Worker# use_raw_android_executable: Use executable() rather than android_apk(). 340*6777b538SAndroid Build Coastguard Worker# use_native_activity: Test implements ANativeActivity_onCreate(). 341*6777b538SAndroid Build Coastguard Worker# test_runner_shard: (Fuchsia, optional): for CFv2 tests, use the given test 342*6777b538SAndroid Build Coastguard Worker# runner shard rather than the default shard for the ELF runner when 343*6777b538SAndroid Build Coastguard Worker# assembling the test component. This is useful, for example, to use the 344*6777b538SAndroid Build Coastguard Worker# elf_test_ambient_exec_runner for tests that require 345*6777b538SAndroid Build Coastguard Worker# job_policy_ambient_mark_vmo_exec. 346*6777b538SAndroid Build Coastguard Worker# fuchsia_package_deps: (Fuchsia, optional) List of fuchsia_component() 347*6777b538SAndroid Build Coastguard Worker# targets that this test package contains. 348*6777b538SAndroid Build Coastguard Worker# is_xctest: (iOS, optional) whether to build the executable as XCTest. 349*6777b538SAndroid Build Coastguard Worker# Similar to the GN arg 'enable_run_ios_unittests_with_xctest' but 350*6777b538SAndroid Build Coastguard Worker# for build targets. 351*6777b538SAndroid Build Coastguard Worker# allow_cleartext_traffic: (Android, optional) whether to allow cleartext 352*6777b538SAndroid Build Coastguard Worker# network requests during the test. 353*6777b538SAndroid Build Coastguard Worker# fuzztests: a list of instances of the FUZZ_TEST macro to 354*6777b538SAndroid Build Coastguard Worker# include fuzzing tests alongside unit tests. This introduces an 355*6777b538SAndroid Build Coastguard Worker# extra dependency and also creates additional metadata so that our 356*6777b538SAndroid Build Coastguard Worker# fuzzing infrastructure can find and run such tests. 357*6777b538SAndroid Build Coastguard Worker# This should be a list of the test names, for example 358*6777b538SAndroid Build Coastguard Worker# fuzztests = [ "MyTestClass.MyTestName" ] 359*6777b538SAndroid Build Coastguard Workertemplate("test") { 360*6777b538SAndroid Build Coastguard Worker testonly = true 361*6777b538SAndroid Build Coastguard Worker if (!is_ios) { 362*6777b538SAndroid Build Coastguard Worker assert(!defined(invoker.is_xctest) || !invoker.is_xctest, 363*6777b538SAndroid Build Coastguard Worker "is_xctest can be set only for iOS builds") 364*6777b538SAndroid Build Coastguard Worker } 365*6777b538SAndroid Build Coastguard Worker if (!is_android) { 366*6777b538SAndroid Build Coastguard Worker assert(!defined(invoker.allow_cleartext_traffic), 367*6777b538SAndroid Build Coastguard Worker "allow_cleartext_traffic can be set only for Android tests") 368*6777b538SAndroid Build Coastguard Worker } 369*6777b538SAndroid Build Coastguard Worker 370*6777b538SAndroid Build Coastguard Worker if (is_android) { 371*6777b538SAndroid Build Coastguard Worker assert(!defined(invoker.use_xvfb) || !invoker.use_xvfb) 372*6777b538SAndroid Build Coastguard Worker 373*6777b538SAndroid Build Coastguard Worker _use_default_launcher = 374*6777b538SAndroid Build Coastguard Worker !defined(invoker.use_default_launcher) || invoker.use_default_launcher 375*6777b538SAndroid Build Coastguard Worker if (!defined(invoker.use_raw_android_executable)) { 376*6777b538SAndroid Build Coastguard Worker # Checkouts where build_with_chromium == false often have a custom GN 377*6777b538SAndroid Build Coastguard Worker # template wrapper around test() which sets use_default_launcher == false. 378*6777b538SAndroid Build Coastguard Worker # Set the _use_raw_android_executable default so that test() targets which 379*6777b538SAndroid Build Coastguard Worker # do not use the custom wrapper 380*6777b538SAndroid Build Coastguard Worker # (1) Do not cause "gn gen" to fail 381*6777b538SAndroid Build Coastguard Worker # (2) Do not need to be moved into if(build_with_chromium) block. 382*6777b538SAndroid Build Coastguard Worker _use_raw_android_executable = 383*6777b538SAndroid Build Coastguard Worker !build_with_chromium && _use_default_launcher 384*6777b538SAndroid Build Coastguard Worker } else { 385*6777b538SAndroid Build Coastguard Worker not_needed([ "_use_default_launcher" ]) 386*6777b538SAndroid Build Coastguard Worker _use_raw_android_executable = invoker.use_raw_android_executable 387*6777b538SAndroid Build Coastguard Worker } 388*6777b538SAndroid Build Coastguard Worker 389*6777b538SAndroid Build Coastguard Worker # output_name is used to allow targets with the same name but in different 390*6777b538SAndroid Build Coastguard Worker # packages to still produce unique runner scripts. 391*6777b538SAndroid Build Coastguard Worker _output_name = invoker.target_name 392*6777b538SAndroid Build Coastguard Worker if (defined(invoker.output_name)) { 393*6777b538SAndroid Build Coastguard Worker _output_name = invoker.output_name 394*6777b538SAndroid Build Coastguard Worker } 395*6777b538SAndroid Build Coastguard Worker 396*6777b538SAndroid Build Coastguard Worker _test_runner_target = "${_output_name}__test_runner_script" 397*6777b538SAndroid Build Coastguard Worker _wrapper_script_vars = [ 398*6777b538SAndroid Build Coastguard Worker "android_test_runner_script", 399*6777b538SAndroid Build Coastguard Worker "extra_args", 400*6777b538SAndroid Build Coastguard Worker "ignore_all_data_deps", 401*6777b538SAndroid Build Coastguard Worker "shard_timeout", 402*6777b538SAndroid Build Coastguard Worker ] 403*6777b538SAndroid Build Coastguard Worker 404*6777b538SAndroid Build Coastguard Worker assert(_use_raw_android_executable || enable_java_templates) 405*6777b538SAndroid Build Coastguard Worker 406*6777b538SAndroid Build Coastguard Worker if (_use_raw_android_executable) { 407*6777b538SAndroid Build Coastguard Worker not_needed(invoker, [ "add_unwind_tables_in_apk" ]) 408*6777b538SAndroid Build Coastguard Worker 409*6777b538SAndroid Build Coastguard Worker _exec_target = "${target_name}__exec" 410*6777b538SAndroid Build Coastguard Worker _dist_target = "${target_name}__dist" 411*6777b538SAndroid Build Coastguard Worker _exec_output = 412*6777b538SAndroid Build Coastguard Worker "$target_out_dir/${invoker.target_name}/${invoker.target_name}" 413*6777b538SAndroid Build Coastguard Worker _crate_name = "${target_name}" 414*6777b538SAndroid Build Coastguard Worker 415*6777b538SAndroid Build Coastguard Worker mixed_test(_exec_target) { 416*6777b538SAndroid Build Coastguard Worker target_type = "executable" 417*6777b538SAndroid Build Coastguard Worker 418*6777b538SAndroid Build Coastguard Worker # Use a crate name that avoids creating a warning due to double 419*6777b538SAndroid Build Coastguard Worker # underscore (ie. `__`). 420*6777b538SAndroid Build Coastguard Worker crate_name = _crate_name 421*6777b538SAndroid Build Coastguard Worker 422*6777b538SAndroid Build Coastguard Worker # Configs will always be defined since we set_defaults in 423*6777b538SAndroid Build Coastguard Worker # BUILDCONFIG.gn. 424*6777b538SAndroid Build Coastguard Worker configs = [] 425*6777b538SAndroid Build Coastguard Worker forward_variables_from( 426*6777b538SAndroid Build Coastguard Worker invoker, 427*6777b538SAndroid Build Coastguard Worker "*", 428*6777b538SAndroid Build Coastguard Worker TESTONLY_AND_VISIBILITY + _wrapper_script_vars + [ 429*6777b538SAndroid Build Coastguard Worker "data_deps", 430*6777b538SAndroid Build Coastguard Worker "extra_dist_files", 431*6777b538SAndroid Build Coastguard Worker ]) 432*6777b538SAndroid Build Coastguard Worker 433*6777b538SAndroid Build Coastguard Worker # Thanks to the set_defaults() for test(), configs are initialized with 434*6777b538SAndroid Build Coastguard Worker # the default shared_library configs rather than executable configs. 435*6777b538SAndroid Build Coastguard Worker configs -= [ 436*6777b538SAndroid Build Coastguard Worker "//build/config:shared_library_config", 437*6777b538SAndroid Build Coastguard Worker "//build/config/android:hide_all_but_jni", 438*6777b538SAndroid Build Coastguard Worker ] 439*6777b538SAndroid Build Coastguard Worker configs += [ "//build/config:executable_config" ] 440*6777b538SAndroid Build Coastguard Worker 441*6777b538SAndroid Build Coastguard Worker if (defined(invoker.data_deps)) { 442*6777b538SAndroid Build Coastguard Worker data_deps = invoker.data_deps 443*6777b538SAndroid Build Coastguard Worker } else { 444*6777b538SAndroid Build Coastguard Worker data_deps = [] 445*6777b538SAndroid Build Coastguard Worker } 446*6777b538SAndroid Build Coastguard Worker if (!defined(data)) { 447*6777b538SAndroid Build Coastguard Worker data = [] 448*6777b538SAndroid Build Coastguard Worker } 449*6777b538SAndroid Build Coastguard Worker if (tests_have_location_tags) { 450*6777b538SAndroid Build Coastguard Worker data += [ "//testing/location_tags.json" ] 451*6777b538SAndroid Build Coastguard Worker } 452*6777b538SAndroid Build Coastguard Worker if (!defined(deps)) { 453*6777b538SAndroid Build Coastguard Worker deps = [] 454*6777b538SAndroid Build Coastguard Worker } 455*6777b538SAndroid Build Coastguard Worker 456*6777b538SAndroid Build Coastguard Worker # Don't output to the root or else conflict with the group() below. 457*6777b538SAndroid Build Coastguard Worker output_name = rebase_path(_exec_output, root_out_dir) 458*6777b538SAndroid Build Coastguard Worker } 459*6777b538SAndroid Build Coastguard Worker 460*6777b538SAndroid Build Coastguard Worker create_native_executable_dist(_dist_target) { 461*6777b538SAndroid Build Coastguard Worker dist_dir = "$root_out_dir/$target_name" 462*6777b538SAndroid Build Coastguard Worker binary = _exec_output 463*6777b538SAndroid Build Coastguard Worker deps = [ ":$_exec_target" ] 464*6777b538SAndroid Build Coastguard Worker if (defined(invoker.extra_dist_files)) { 465*6777b538SAndroid Build Coastguard Worker extra_files = invoker.extra_dist_files 466*6777b538SAndroid Build Coastguard Worker } 467*6777b538SAndroid Build Coastguard Worker } 468*6777b538SAndroid Build Coastguard Worker } else { 469*6777b538SAndroid Build Coastguard Worker _library_target_name = "${target_name}__library" 470*6777b538SAndroid Build Coastguard Worker _library_crate_name = "${target_name}_library" 471*6777b538SAndroid Build Coastguard Worker _apk_target_name = "${target_name}__apk" 472*6777b538SAndroid Build Coastguard Worker _apk_specific_vars = [ 473*6777b538SAndroid Build Coastguard Worker "allow_cleartext_traffic", 474*6777b538SAndroid Build Coastguard Worker "android_manifest", 475*6777b538SAndroid Build Coastguard Worker "android_manifest_dep", 476*6777b538SAndroid Build Coastguard Worker "android_manifest_template", 477*6777b538SAndroid Build Coastguard Worker "app_as_shared_lib", 478*6777b538SAndroid Build Coastguard Worker "keystore_name", 479*6777b538SAndroid Build Coastguard Worker "keystore_password", 480*6777b538SAndroid Build Coastguard Worker "keystore_path", 481*6777b538SAndroid Build Coastguard Worker "loadable_module_deps", 482*6777b538SAndroid Build Coastguard Worker "loadable_modules", 483*6777b538SAndroid Build Coastguard Worker "min_sdk_version", 484*6777b538SAndroid Build Coastguard Worker "product_config_java_packages", 485*6777b538SAndroid Build Coastguard Worker "proguard_configs", 486*6777b538SAndroid Build Coastguard Worker "proguard_enabled", 487*6777b538SAndroid Build Coastguard Worker "srcjar_deps", 488*6777b538SAndroid Build Coastguard Worker "target_sdk_version", 489*6777b538SAndroid Build Coastguard Worker "use_default_launcher", 490*6777b538SAndroid Build Coastguard Worker "use_native_activity", 491*6777b538SAndroid Build Coastguard Worker ] 492*6777b538SAndroid Build Coastguard Worker 493*6777b538SAndroid Build Coastguard Worker _add_unwind_tables_in_apk = 494*6777b538SAndroid Build Coastguard Worker defined(invoker.add_unwind_tables_in_apk) && 495*6777b538SAndroid Build Coastguard Worker invoker.add_unwind_tables_in_apk && target_cpu == "arm" 496*6777b538SAndroid Build Coastguard Worker 497*6777b538SAndroid Build Coastguard Worker # Adds the unwind tables from unstripped binary as an asset file in the 498*6777b538SAndroid Build Coastguard Worker # apk, if |add_unwind_tables_in_apk| is specified by the test. 499*6777b538SAndroid Build Coastguard Worker if (_add_unwind_tables_in_apk) { 500*6777b538SAndroid Build Coastguard Worker # TODO(crbug.com/1315603): Remove generation of v1 unwind asset when 501*6777b538SAndroid Build Coastguard Worker # `CFIBacktraceAndroid` is replaced with `ChromeUnwinderAndroid`. 502*6777b538SAndroid Build Coastguard Worker _unwind_table_name = "${_library_target_name}_unwind_v1" 503*6777b538SAndroid Build Coastguard Worker unwind_table_v1(_unwind_table_name) { 504*6777b538SAndroid Build Coastguard Worker library_target = ":$_library_target_name" 505*6777b538SAndroid Build Coastguard Worker } 506*6777b538SAndroid Build Coastguard Worker 507*6777b538SAndroid Build Coastguard Worker if (use_android_unwinder_v2) { 508*6777b538SAndroid Build Coastguard Worker _unwind_table_v2_name = "${_library_target_name}_unwind_v2" 509*6777b538SAndroid Build Coastguard Worker unwind_table_v2(_unwind_table_v2_name) { 510*6777b538SAndroid Build Coastguard Worker library_target = ":$_library_target_name" 511*6777b538SAndroid Build Coastguard Worker } 512*6777b538SAndroid Build Coastguard Worker } 513*6777b538SAndroid Build Coastguard Worker 514*6777b538SAndroid Build Coastguard Worker _unwind_table_asset_name = "${target_name}__unwind_assets" 515*6777b538SAndroid Build Coastguard Worker android_assets(_unwind_table_asset_name) { 516*6777b538SAndroid Build Coastguard Worker sources = [ "$target_out_dir/$_unwind_table_name/$unwind_table_asset_v1_filename" ] 517*6777b538SAndroid Build Coastguard Worker disable_compression = true 518*6777b538SAndroid Build Coastguard Worker deps = [ ":$_unwind_table_name" ] 519*6777b538SAndroid Build Coastguard Worker if (use_android_unwinder_v2) { 520*6777b538SAndroid Build Coastguard Worker sources += [ "$target_out_dir/$_unwind_table_v2_name/$unwind_table_asset_v2_filename" ] 521*6777b538SAndroid Build Coastguard Worker deps += [ ":$_unwind_table_v2_name" ] 522*6777b538SAndroid Build Coastguard Worker } 523*6777b538SAndroid Build Coastguard Worker } 524*6777b538SAndroid Build Coastguard Worker } 525*6777b538SAndroid Build Coastguard Worker 526*6777b538SAndroid Build Coastguard Worker _generate_final_jni = 527*6777b538SAndroid Build Coastguard Worker !defined(invoker.generate_final_jni) || invoker.generate_final_jni 528*6777b538SAndroid Build Coastguard Worker mixed_test(_library_target_name) { 529*6777b538SAndroid Build Coastguard Worker if (_generate_final_jni) { 530*6777b538SAndroid Build Coastguard Worker target_type = "shared_library_with_jni" 531*6777b538SAndroid Build Coastguard Worker java_targets = [ ":$_apk_target_name" ] 532*6777b538SAndroid Build Coastguard Worker } else { 533*6777b538SAndroid Build Coastguard Worker target_type = "shared_library" 534*6777b538SAndroid Build Coastguard Worker } 535*6777b538SAndroid Build Coastguard Worker 536*6777b538SAndroid Build Coastguard Worker # Configs will always be defined since we set_defaults in 537*6777b538SAndroid Build Coastguard Worker # BUILDCONFIG.gn. 538*6777b538SAndroid Build Coastguard Worker configs = [] # Prevent list overwriting warning. 539*6777b538SAndroid Build Coastguard Worker configs = invoker.configs 540*6777b538SAndroid Build Coastguard Worker 541*6777b538SAndroid Build Coastguard Worker forward_variables_from( 542*6777b538SAndroid Build Coastguard Worker invoker, 543*6777b538SAndroid Build Coastguard Worker "*", 544*6777b538SAndroid Build Coastguard Worker [ 545*6777b538SAndroid Build Coastguard Worker "configs", 546*6777b538SAndroid Build Coastguard Worker "deps", 547*6777b538SAndroid Build Coastguard Worker ] + _apk_specific_vars + _wrapper_script_vars + 548*6777b538SAndroid Build Coastguard Worker TESTONLY_AND_VISIBILITY) 549*6777b538SAndroid Build Coastguard Worker 550*6777b538SAndroid Build Coastguard Worker # Use a crate name that avoids creating a warning due to double 551*6777b538SAndroid Build Coastguard Worker # underscore (ie. `__`). 552*6777b538SAndroid Build Coastguard Worker crate_name = _library_crate_name 553*6777b538SAndroid Build Coastguard Worker 554*6777b538SAndroid Build Coastguard Worker # Native targets do not need to depend on java targets. Filter them out 555*6777b538SAndroid Build Coastguard Worker # so that the shared library can be built without needing to wait for 556*6777b538SAndroid Build Coastguard Worker # dependent java targets. 557*6777b538SAndroid Build Coastguard Worker if (!defined(deps)) { 558*6777b538SAndroid Build Coastguard Worker deps = [] 559*6777b538SAndroid Build Coastguard Worker } 560*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 561*6777b538SAndroid Build Coastguard Worker deps += filter_exclude(invoker.deps, java_target_patterns) 562*6777b538SAndroid Build Coastguard Worker } 563*6777b538SAndroid Build Coastguard Worker 564*6777b538SAndroid Build Coastguard Worker if (_use_default_launcher) { 565*6777b538SAndroid Build Coastguard Worker deps += [ "//testing/android/native_test:native_test_native_code" ] 566*6777b538SAndroid Build Coastguard Worker } 567*6777b538SAndroid Build Coastguard Worker } 568*6777b538SAndroid Build Coastguard Worker unittest_apk(_apk_target_name) { 569*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, _apk_specific_vars) 570*6777b538SAndroid Build Coastguard Worker shared_library = ":$_library_target_name" 571*6777b538SAndroid Build Coastguard Worker if (_generate_final_jni) { 572*6777b538SAndroid Build Coastguard Worker srcjar_deps = [ "${shared_library}__jni_registration" ] 573*6777b538SAndroid Build Coastguard Worker } 574*6777b538SAndroid Build Coastguard Worker apk_name = invoker.target_name 575*6777b538SAndroid Build Coastguard Worker if (defined(invoker.output_name)) { 576*6777b538SAndroid Build Coastguard Worker apk_name = invoker.output_name 577*6777b538SAndroid Build Coastguard Worker } 578*6777b538SAndroid Build Coastguard Worker 579*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 580*6777b538SAndroid Build Coastguard Worker deps = invoker.deps 581*6777b538SAndroid Build Coastguard Worker } else { 582*6777b538SAndroid Build Coastguard Worker deps = [] 583*6777b538SAndroid Build Coastguard Worker } 584*6777b538SAndroid Build Coastguard Worker if (defined(loadable_module_deps)) { 585*6777b538SAndroid Build Coastguard Worker deps += loadable_module_deps 586*6777b538SAndroid Build Coastguard Worker } 587*6777b538SAndroid Build Coastguard Worker 588*6777b538SAndroid Build Coastguard Worker # Add the Java classes so that each target does not have to do it. 589*6777b538SAndroid Build Coastguard Worker if (_use_default_launcher) { 590*6777b538SAndroid Build Coastguard Worker deps += [ "//base/test:test_support_java" ] 591*6777b538SAndroid Build Coastguard Worker } 592*6777b538SAndroid Build Coastguard Worker 593*6777b538SAndroid Build Coastguard Worker if (defined(_unwind_table_asset_name)) { 594*6777b538SAndroid Build Coastguard Worker deps += [ ":${_unwind_table_asset_name}" ] 595*6777b538SAndroid Build Coastguard Worker } 596*6777b538SAndroid Build Coastguard Worker } 597*6777b538SAndroid Build Coastguard Worker } 598*6777b538SAndroid Build Coastguard Worker 599*6777b538SAndroid Build Coastguard Worker test_runner_script(_test_runner_target) { 600*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, _wrapper_script_vars) 601*6777b538SAndroid Build Coastguard Worker 602*6777b538SAndroid Build Coastguard Worker if (_use_raw_android_executable) { 603*6777b538SAndroid Build Coastguard Worker executable_dist_dir = "$root_out_dir/$_dist_target" 604*6777b538SAndroid Build Coastguard Worker data_deps = [ ":$_exec_target" ] 605*6777b538SAndroid Build Coastguard Worker } else { 606*6777b538SAndroid Build Coastguard Worker apk_target = ":$_apk_target_name" 607*6777b538SAndroid Build Coastguard Worker incremental_apk = incremental_install 608*6777b538SAndroid Build Coastguard Worker 609*6777b538SAndroid Build Coastguard Worker # Dep needed for the test runner .runtime_deps file to pick up data 610*6777b538SAndroid Build Coastguard Worker # deps from the forward_variables_from(invoker, "*") on the library. 611*6777b538SAndroid Build Coastguard Worker data_deps = [ ":$_library_target_name" ] 612*6777b538SAndroid Build Coastguard Worker } 613*6777b538SAndroid Build Coastguard Worker test_name = _output_name 614*6777b538SAndroid Build Coastguard Worker test_suite = _output_name 615*6777b538SAndroid Build Coastguard Worker test_type = "gtest" 616*6777b538SAndroid Build Coastguard Worker } 617*6777b538SAndroid Build Coastguard Worker 618*6777b538SAndroid Build Coastguard Worker # Create a wrapper script rather than using a group() in order to ensure 619*6777b538SAndroid Build Coastguard Worker # "ninja $target_name" always works. If this was a group(), then GN would 620*6777b538SAndroid Build Coastguard Worker # not create a top-level alias for it if a target exists in another 621*6777b538SAndroid Build Coastguard Worker # directory with the same $target_name. 622*6777b538SAndroid Build Coastguard Worker # Also - bots run this script directly for "components_perftests". 623*6777b538SAndroid Build Coastguard Worker generate_wrapper(target_name) { 624*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, [ "visibility" ]) 625*6777b538SAndroid Build Coastguard Worker executable = "$root_build_dir/bin/run_$_output_name" 626*6777b538SAndroid Build Coastguard Worker wrapper_script = "$root_build_dir/$_output_name" 627*6777b538SAndroid Build Coastguard Worker deps = [ ":$_test_runner_target" ] 628*6777b538SAndroid Build Coastguard Worker if (_use_raw_android_executable) { 629*6777b538SAndroid Build Coastguard Worker deps += [ ":$_dist_target" ] 630*6777b538SAndroid Build Coastguard Worker } else { 631*6777b538SAndroid Build Coastguard Worker # Dep needed for the swarming .isolate file to pick up data 632*6777b538SAndroid Build Coastguard Worker # deps from the forward_variables_from(invoker, "*") on the library. 633*6777b538SAndroid Build Coastguard Worker deps += [ 634*6777b538SAndroid Build Coastguard Worker ":$_apk_target_name", 635*6777b538SAndroid Build Coastguard Worker ":$_library_target_name", 636*6777b538SAndroid Build Coastguard Worker ] 637*6777b538SAndroid Build Coastguard Worker } 638*6777b538SAndroid Build Coastguard Worker 639*6777b538SAndroid Build Coastguard Worker if (defined(invoker.data_deps)) { 640*6777b538SAndroid Build Coastguard Worker data_deps = invoker.data_deps 641*6777b538SAndroid Build Coastguard Worker } else { 642*6777b538SAndroid Build Coastguard Worker data_deps = [] 643*6777b538SAndroid Build Coastguard Worker } 644*6777b538SAndroid Build Coastguard Worker 645*6777b538SAndroid Build Coastguard Worker data_deps += [ "//testing:test_scripts_shared" ] 646*6777b538SAndroid Build Coastguard Worker 647*6777b538SAndroid Build Coastguard Worker if (tests_have_location_tags) { 648*6777b538SAndroid Build Coastguard Worker data = [ "//testing/location_tags.json" ] 649*6777b538SAndroid Build Coastguard Worker } 650*6777b538SAndroid Build Coastguard Worker } 651*6777b538SAndroid Build Coastguard Worker } else if (is_fuchsia) { 652*6777b538SAndroid Build Coastguard Worker assert(!defined(invoker.use_xvfb) || !invoker.use_xvfb) 653*6777b538SAndroid Build Coastguard Worker 654*6777b538SAndroid Build Coastguard Worker _output_name = invoker.target_name 655*6777b538SAndroid Build Coastguard Worker _pkg_target = "${_output_name}_pkg" 656*6777b538SAndroid Build Coastguard Worker _exec_target = "${_output_name}__exec" 657*6777b538SAndroid Build Coastguard Worker _program_name = get_label_info(":${_exec_target}", "name") 658*6777b538SAndroid Build Coastguard Worker _crate_name = _output_name 659*6777b538SAndroid Build Coastguard Worker 660*6777b538SAndroid Build Coastguard Worker # Generate a CML fragment that provides the program name. 661*6777b538SAndroid Build Coastguard Worker _test_program_fragment_target = "${target_name}_program-fragment" 662*6777b538SAndroid Build Coastguard Worker _test_program_fragment = "${target_out_dir}/${target_name}_program.test-cml" 663*6777b538SAndroid Build Coastguard Worker generated_file(_test_program_fragment_target) { 664*6777b538SAndroid Build Coastguard Worker contents = { 665*6777b538SAndroid Build Coastguard Worker program = { 666*6777b538SAndroid Build Coastguard Worker binary = _program_name 667*6777b538SAndroid Build Coastguard Worker } 668*6777b538SAndroid Build Coastguard Worker } 669*6777b538SAndroid Build Coastguard Worker outputs = [ _test_program_fragment ] 670*6777b538SAndroid Build Coastguard Worker output_conversion = "json" 671*6777b538SAndroid Build Coastguard Worker } 672*6777b538SAndroid Build Coastguard Worker 673*6777b538SAndroid Build Coastguard Worker _test_runner_shard = 674*6777b538SAndroid Build Coastguard Worker "//build/config/fuchsia/test/elf_test_runner.shard.test-cml" 675*6777b538SAndroid Build Coastguard Worker if (defined(invoker.test_runner_shard)) { 676*6777b538SAndroid Build Coastguard Worker _test_runner_shard = invoker.test_runner_shard 677*6777b538SAndroid Build Coastguard Worker } 678*6777b538SAndroid Build Coastguard Worker 679*6777b538SAndroid Build Coastguard Worker # Collate the complete set of elements to include in the test component's 680*6777b538SAndroid Build Coastguard Worker # manifest. 681*6777b538SAndroid Build Coastguard Worker 682*6777b538SAndroid Build Coastguard Worker _manifest_fragments = [ 683*6777b538SAndroid Build Coastguard Worker _test_program_fragment, 684*6777b538SAndroid Build Coastguard Worker _test_runner_shard, 685*6777b538SAndroid Build Coastguard Worker ] 686*6777b538SAndroid Build Coastguard Worker 687*6777b538SAndroid Build Coastguard Worker # Select the Fuchsia test realm in which to run the test. 688*6777b538SAndroid Build Coastguard Worker if (defined(invoker.run_as_chromium_system_test) && 689*6777b538SAndroid Build Coastguard Worker invoker.run_as_chromium_system_test) { 690*6777b538SAndroid Build Coastguard Worker _manifest_fragments += [ 691*6777b538SAndroid Build Coastguard Worker "//build/config/fuchsia/test/chromium_system_test_facet.shard.test-cml", 692*6777b538SAndroid Build Coastguard Worker "//build/config/fuchsia/test/system_test_minimum.shard.test-cml", 693*6777b538SAndroid Build Coastguard Worker ] 694*6777b538SAndroid Build Coastguard Worker } else { 695*6777b538SAndroid Build Coastguard Worker _manifest_fragments += [ 696*6777b538SAndroid Build Coastguard Worker "//build/config/fuchsia/test/chromium_test_facet.shard.test-cml", 697*6777b538SAndroid Build Coastguard Worker "//build/config/fuchsia/test/minimum.shard.test-cml", 698*6777b538SAndroid Build Coastguard Worker ] 699*6777b538SAndroid Build Coastguard Worker } 700*6777b538SAndroid Build Coastguard Worker 701*6777b538SAndroid Build Coastguard Worker if (is_asan) { 702*6777b538SAndroid Build Coastguard Worker # TODO(crbug.com/1465997): Remove the extra cml segment for asan. 703*6777b538SAndroid Build Coastguard Worker _manifest_fragments += 704*6777b538SAndroid Build Coastguard Worker [ "//build/config/fuchsia/test/asan_options.shard.test-cml" ] 705*6777b538SAndroid Build Coastguard Worker } 706*6777b538SAndroid Build Coastguard Worker 707*6777b538SAndroid Build Coastguard Worker _test_component_manifest = "${target_out_dir}/${target_name}.cml" 708*6777b538SAndroid Build Coastguard Worker _merged_manifest_name = "${_output_name}.cml" 709*6777b538SAndroid Build Coastguard Worker 710*6777b538SAndroid Build Coastguard Worker if (defined(invoker.additional_manifest_fragments)) { 711*6777b538SAndroid Build Coastguard Worker _manifest_fragments += invoker.additional_manifest_fragments 712*6777b538SAndroid Build Coastguard Worker } 713*6777b538SAndroid Build Coastguard Worker 714*6777b538SAndroid Build Coastguard Worker # Generate the test component manifest from the specified elements. 715*6777b538SAndroid Build Coastguard Worker _test_component_manifest_target = "${target_name}_component-manifest" 716*6777b538SAndroid Build Coastguard Worker cmc_merge(_test_component_manifest_target) { 717*6777b538SAndroid Build Coastguard Worker sources = _manifest_fragments 718*6777b538SAndroid Build Coastguard Worker output_name = "${_merged_manifest_name}" 719*6777b538SAndroid Build Coastguard Worker deps = [ ":${_test_program_fragment_target}" ] 720*6777b538SAndroid Build Coastguard Worker } 721*6777b538SAndroid Build Coastguard Worker 722*6777b538SAndroid Build Coastguard Worker # Define the test component, dependent on the generated manifest, and the 723*6777b538SAndroid Build Coastguard Worker # test executable target. 724*6777b538SAndroid Build Coastguard Worker _test_component_target = "${target_name}_component" 725*6777b538SAndroid Build Coastguard Worker fuchsia_component(_test_component_target) { 726*6777b538SAndroid Build Coastguard Worker deps = [ ":$_test_component_manifest_target" ] 727*6777b538SAndroid Build Coastguard Worker data_deps = [ ":$_exec_target" ] 728*6777b538SAndroid Build Coastguard Worker manifest = _test_component_manifest 729*6777b538SAndroid Build Coastguard Worker visibility = [ ":*" ] 730*6777b538SAndroid Build Coastguard Worker } 731*6777b538SAndroid Build Coastguard Worker 732*6777b538SAndroid Build Coastguard Worker _test_component_targets = [ ":${_test_component_target}" ] 733*6777b538SAndroid Build Coastguard Worker 734*6777b538SAndroid Build Coastguard Worker # Define components for each entry in |additional_manifests|, if any. Since 735*6777b538SAndroid Build Coastguard Worker # manifests may themselves depend-on the outputs of |deps|, these components 736*6777b538SAndroid Build Coastguard Worker # must each individually depend on |invoker.deps|. 737*6777b538SAndroid Build Coastguard Worker if (defined(invoker.additional_manifests)) { 738*6777b538SAndroid Build Coastguard Worker foreach(filename, invoker.additional_manifests) { 739*6777b538SAndroid Build Coastguard Worker _additional_component_target = 740*6777b538SAndroid Build Coastguard Worker target_name + "_" + get_path_info(filename, "name") 741*6777b538SAndroid Build Coastguard Worker _test_component_targets += [ ":${_additional_component_target}" ] 742*6777b538SAndroid Build Coastguard Worker fuchsia_component(_additional_component_target) { 743*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, [ "testonly" ]) 744*6777b538SAndroid Build Coastguard Worker data_deps = [ ":$_exec_target" ] 745*6777b538SAndroid Build Coastguard Worker visibility = [ ":*" ] 746*6777b538SAndroid Build Coastguard Worker manifest = filename 747*6777b538SAndroid Build Coastguard Worker 748*6777b538SAndroid Build Coastguard Worker # Depend on |invoker.deps|, in case it includes a dependency that 749*6777b538SAndroid Build Coastguard Worker # creates this additional component's manifest. 750*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 751*6777b538SAndroid Build Coastguard Worker deps = invoker.deps 752*6777b538SAndroid Build Coastguard Worker } 753*6777b538SAndroid Build Coastguard Worker } 754*6777b538SAndroid Build Coastguard Worker } 755*6777b538SAndroid Build Coastguard Worker } 756*6777b538SAndroid Build Coastguard Worker 757*6777b538SAndroid Build Coastguard Worker # Define the package target that will bundle the test and additional 758*6777b538SAndroid Build Coastguard Worker # components and their data. 759*6777b538SAndroid Build Coastguard Worker fuchsia_package(_pkg_target) { 760*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 761*6777b538SAndroid Build Coastguard Worker [ 762*6777b538SAndroid Build Coastguard Worker "excluded_files", 763*6777b538SAndroid Build Coastguard Worker "excluded_dirs", 764*6777b538SAndroid Build Coastguard Worker "excluded_paths", 765*6777b538SAndroid Build Coastguard Worker ]) 766*6777b538SAndroid Build Coastguard Worker package_name = _output_name 767*6777b538SAndroid Build Coastguard Worker deps = _test_component_targets 768*6777b538SAndroid Build Coastguard Worker 769*6777b538SAndroid Build Coastguard Worker if (defined(invoker.fuchsia_package_deps)) { 770*6777b538SAndroid Build Coastguard Worker deps += invoker.fuchsia_package_deps 771*6777b538SAndroid Build Coastguard Worker } 772*6777b538SAndroid Build Coastguard Worker if (!defined(excluded_paths)) { 773*6777b538SAndroid Build Coastguard Worker excluded_paths = [] 774*6777b538SAndroid Build Coastguard Worker } 775*6777b538SAndroid Build Coastguard Worker excluded_paths += [ 776*6777b538SAndroid Build Coastguard Worker "${devtools_root_location}/*", 777*6777b538SAndroid Build Coastguard Worker "*.git/*", 778*6777b538SAndroid Build Coastguard Worker "*.svn/*", 779*6777b538SAndroid Build Coastguard Worker "*.hg/*", 780*6777b538SAndroid Build Coastguard Worker ] 781*6777b538SAndroid Build Coastguard Worker if (devtools_root_location != "") { 782*6777b538SAndroid Build Coastguard Worker excluded_paths += [ "${devtools_root_location}/*" ] 783*6777b538SAndroid Build Coastguard Worker } 784*6777b538SAndroid Build Coastguard Worker } 785*6777b538SAndroid Build Coastguard Worker 786*6777b538SAndroid Build Coastguard Worker # |target_name| refers to the package-runner rule, so that building 787*6777b538SAndroid Build Coastguard Worker # "base_unittests" will build not only the executable, component, and 788*6777b538SAndroid Build Coastguard Worker # package, but also the script required to run them. 789*6777b538SAndroid Build Coastguard Worker fuchsia_test_runner(target_name) { 790*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 791*6777b538SAndroid Build Coastguard Worker [ 792*6777b538SAndroid Build Coastguard Worker "data", 793*6777b538SAndroid Build Coastguard Worker "data_deps", 794*6777b538SAndroid Build Coastguard Worker "package_deps", 795*6777b538SAndroid Build Coastguard Worker "use_test_server", 796*6777b538SAndroid Build Coastguard Worker ]) 797*6777b538SAndroid Build Coastguard Worker 798*6777b538SAndroid Build Coastguard Worker is_test_exe = true 799*6777b538SAndroid Build Coastguard Worker package = ":$_pkg_target" 800*6777b538SAndroid Build Coastguard Worker package_name = _output_name 801*6777b538SAndroid Build Coastguard Worker 802*6777b538SAndroid Build Coastguard Worker if (!defined(deps)) { 803*6777b538SAndroid Build Coastguard Worker deps = [] 804*6777b538SAndroid Build Coastguard Worker } 805*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 806*6777b538SAndroid Build Coastguard Worker deps += invoker.deps 807*6777b538SAndroid Build Coastguard Worker } 808*6777b538SAndroid Build Coastguard Worker 809*6777b538SAndroid Build Coastguard Worker if (!defined(data)) { 810*6777b538SAndroid Build Coastguard Worker data = [] 811*6777b538SAndroid Build Coastguard Worker } 812*6777b538SAndroid Build Coastguard Worker if (tests_have_location_tags) { 813*6777b538SAndroid Build Coastguard Worker data += [ "//testing/location_tags.json" ] 814*6777b538SAndroid Build Coastguard Worker } 815*6777b538SAndroid Build Coastguard Worker 816*6777b538SAndroid Build Coastguard Worker if (!defined(data_deps)) { 817*6777b538SAndroid Build Coastguard Worker data_deps = [] 818*6777b538SAndroid Build Coastguard Worker } 819*6777b538SAndroid Build Coastguard Worker 820*6777b538SAndroid Build Coastguard Worker data_deps += [ "//testing:test_scripts_shared" ] 821*6777b538SAndroid Build Coastguard Worker } 822*6777b538SAndroid Build Coastguard Worker 823*6777b538SAndroid Build Coastguard Worker mixed_test(_exec_target) { 824*6777b538SAndroid Build Coastguard Worker target_type = "executable" 825*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY) 826*6777b538SAndroid Build Coastguard Worker output_name = _exec_target 827*6777b538SAndroid Build Coastguard Worker 828*6777b538SAndroid Build Coastguard Worker if (!defined(deps)) { 829*6777b538SAndroid Build Coastguard Worker deps = [] 830*6777b538SAndroid Build Coastguard Worker } 831*6777b538SAndroid Build Coastguard Worker 832*6777b538SAndroid Build Coastguard Worker # Use a crate name that avoids creating a warning due to double 833*6777b538SAndroid Build Coastguard Worker # underscore (ie. `__`). 834*6777b538SAndroid Build Coastguard Worker crate_name = _crate_name 835*6777b538SAndroid Build Coastguard Worker } 836*6777b538SAndroid Build Coastguard Worker } else if (is_ios) { 837*6777b538SAndroid Build Coastguard Worker assert(!defined(invoker.use_xvfb) || !invoker.use_xvfb) 838*6777b538SAndroid Build Coastguard Worker _runtime_deps_file = "$root_out_dir/${target_name}.runtime_deps" 839*6777b538SAndroid Build Coastguard Worker 840*6777b538SAndroid Build Coastguard Worker declare_args() { 841*6777b538SAndroid Build Coastguard Worker # Keep the unittest-as-xctest functionality defaulted to off for 842*6777b538SAndroid Build Coastguard Worker # local builds and test executions. 843*6777b538SAndroid Build Coastguard Worker enable_run_ios_unittests_with_xctest = false 844*6777b538SAndroid Build Coastguard Worker } 845*6777b538SAndroid Build Coastguard Worker 846*6777b538SAndroid Build Coastguard Worker _test_target = target_name 847*6777b538SAndroid Build Coastguard Worker 848*6777b538SAndroid Build Coastguard Worker _wrapper_output_name = "run_${target_name}" 849*6777b538SAndroid Build Coastguard Worker ios_test_runner_wrapper(_wrapper_output_name) { 850*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 851*6777b538SAndroid Build Coastguard Worker [ 852*6777b538SAndroid Build Coastguard Worker "clones", 853*6777b538SAndroid Build Coastguard Worker "data", 854*6777b538SAndroid Build Coastguard Worker "deps", 855*6777b538SAndroid Build Coastguard Worker "executable_args", 856*6777b538SAndroid Build Coastguard Worker "retries", 857*6777b538SAndroid Build Coastguard Worker ]) 858*6777b538SAndroid Build Coastguard Worker 859*6777b538SAndroid Build Coastguard Worker _root_build_dir = rebase_path("${root_build_dir}", root_build_dir) 860*6777b538SAndroid Build Coastguard Worker 861*6777b538SAndroid Build Coastguard Worker if (!defined(executable_args)) { 862*6777b538SAndroid Build Coastguard Worker executable_args = [] 863*6777b538SAndroid Build Coastguard Worker } 864*6777b538SAndroid Build Coastguard Worker executable_args += [ 865*6777b538SAndroid Build Coastguard Worker "--app", 866*6777b538SAndroid Build Coastguard Worker "@WrappedPath(${_root_build_dir}/${_test_target}.app)", 867*6777b538SAndroid Build Coastguard Worker ] 868*6777b538SAndroid Build Coastguard Worker 869*6777b538SAndroid Build Coastguard Worker wrapper_output_name = "${_wrapper_output_name}" 870*6777b538SAndroid Build Coastguard Worker 871*6777b538SAndroid Build Coastguard Worker if (!defined(data)) { 872*6777b538SAndroid Build Coastguard Worker data = [] 873*6777b538SAndroid Build Coastguard Worker } 874*6777b538SAndroid Build Coastguard Worker if (tests_have_location_tags) { 875*6777b538SAndroid Build Coastguard Worker data += [ "//testing/location_tags.json" ] 876*6777b538SAndroid Build Coastguard Worker } 877*6777b538SAndroid Build Coastguard Worker } 878*6777b538SAndroid Build Coastguard Worker 879*6777b538SAndroid Build Coastguard Worker _resources_bundle_data = target_name + "_resources_bundle_data" 880*6777b538SAndroid Build Coastguard Worker 881*6777b538SAndroid Build Coastguard Worker bundle_data(_resources_bundle_data) { 882*6777b538SAndroid Build Coastguard Worker visibility = [ ":$_test_target" ] 883*6777b538SAndroid Build Coastguard Worker sources = [ "//testing/gtest_ios/Default.png" ] 884*6777b538SAndroid Build Coastguard Worker outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ] 885*6777b538SAndroid Build Coastguard Worker } 886*6777b538SAndroid Build Coastguard Worker 887*6777b538SAndroid Build Coastguard Worker force_xctest = enable_run_ios_unittests_with_xctest || 888*6777b538SAndroid Build Coastguard Worker (defined(invoker.is_xctest) && invoker.is_xctest) 889*6777b538SAndroid Build Coastguard Worker 890*6777b538SAndroid Build Coastguard Worker mixed_test(_test_target) { 891*6777b538SAndroid Build Coastguard Worker if (force_xctest) { 892*6777b538SAndroid Build Coastguard Worker target_type = "ios_xctest_test" 893*6777b538SAndroid Build Coastguard Worker } else { 894*6777b538SAndroid Build Coastguard Worker target_type = "ios_app_bundle" 895*6777b538SAndroid Build Coastguard Worker } 896*6777b538SAndroid Build Coastguard Worker testonly = true 897*6777b538SAndroid Build Coastguard Worker 898*6777b538SAndroid Build Coastguard Worker if (force_xctest && build_with_chromium) { 899*6777b538SAndroid Build Coastguard Worker xctest_module_target = "//base/test:google_test_runner" 900*6777b538SAndroid Build Coastguard Worker } 901*6777b538SAndroid Build Coastguard Worker 902*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY) 903*6777b538SAndroid Build Coastguard Worker 904*6777b538SAndroid Build Coastguard Worker # Provide sensible defaults in case invoker did not define any of those 905*6777b538SAndroid Build Coastguard Worker # required variables. 906*6777b538SAndroid Build Coastguard Worker if (!defined(info_plist) && !defined(info_plist_target)) { 907*6777b538SAndroid Build Coastguard Worker info_plist = "//testing/gtest_ios/unittest-Info.plist" 908*6777b538SAndroid Build Coastguard Worker } 909*6777b538SAndroid Build Coastguard Worker 910*6777b538SAndroid Build Coastguard Worker bundle_identifier = shared_bundle_id_for_test_apps 911*6777b538SAndroid Build Coastguard Worker 912*6777b538SAndroid Build Coastguard Worker if (!defined(bundle_deps)) { 913*6777b538SAndroid Build Coastguard Worker bundle_deps = [] 914*6777b538SAndroid Build Coastguard Worker } 915*6777b538SAndroid Build Coastguard Worker bundle_deps += [ ":$_resources_bundle_data" ] 916*6777b538SAndroid Build Coastguard Worker 917*6777b538SAndroid Build Coastguard Worker if (!defined(data_deps)) { 918*6777b538SAndroid Build Coastguard Worker data_deps = [] 919*6777b538SAndroid Build Coastguard Worker } 920*6777b538SAndroid Build Coastguard Worker 921*6777b538SAndroid Build Coastguard Worker data_deps += [ "//testing:test_scripts_shared" ] 922*6777b538SAndroid Build Coastguard Worker 923*6777b538SAndroid Build Coastguard Worker # Include the generate_wrapper as part of data_deps 924*6777b538SAndroid Build Coastguard Worker data_deps += [ ":${_wrapper_output_name}" ] 925*6777b538SAndroid Build Coastguard Worker write_runtime_deps = _runtime_deps_file 926*6777b538SAndroid Build Coastguard Worker if (!defined(deps)) { 927*6777b538SAndroid Build Coastguard Worker deps = [] 928*6777b538SAndroid Build Coastguard Worker } 929*6777b538SAndroid Build Coastguard Worker } 930*6777b538SAndroid Build Coastguard Worker } else if ((is_chromeos_ash || (is_chromeos_lacros && is_chromeos_device)) && 931*6777b538SAndroid Build Coastguard Worker cros_board != "") { 932*6777b538SAndroid Build Coastguard Worker assert(!defined(invoker.use_xvfb) || !invoker.use_xvfb) 933*6777b538SAndroid Build Coastguard Worker 934*6777b538SAndroid Build Coastguard Worker # Building for a cros board (ie: not linux-chromeos or linux-lacros). 935*6777b538SAndroid Build Coastguard Worker 936*6777b538SAndroid Build Coastguard Worker _gen_runner_target = "${target_name}__runner" 937*6777b538SAndroid Build Coastguard Worker _runtime_deps_file = 938*6777b538SAndroid Build Coastguard Worker "$root_out_dir/gen.runtime/" + get_label_info(target_name, "dir") + 939*6777b538SAndroid Build Coastguard Worker "/" + get_label_info(target_name, "name") + ".runtime_deps" 940*6777b538SAndroid Build Coastguard Worker 941*6777b538SAndroid Build Coastguard Worker if (is_skylab && (defined(tast_attr_expr) || defined(tast_tests) || 942*6777b538SAndroid Build Coastguard Worker defined(tast_disabled_tests))) { 943*6777b538SAndroid Build Coastguard Worker generate_skylab_tast_filter(_gen_runner_target) { 944*6777b538SAndroid Build Coastguard Worker } 945*6777b538SAndroid Build Coastguard Worker } else { 946*6777b538SAndroid Build Coastguard Worker generate_runner_script(_gen_runner_target) { 947*6777b538SAndroid Build Coastguard Worker generated_script = "$root_build_dir/bin/run_" + invoker.target_name 948*6777b538SAndroid Build Coastguard Worker test_exe = invoker.target_name 949*6777b538SAndroid Build Coastguard Worker runtime_deps_file = _runtime_deps_file 950*6777b538SAndroid Build Coastguard Worker 951*6777b538SAndroid Build Coastguard Worker if (is_chromeos_lacros) { 952*6777b538SAndroid Build Coastguard Worker # At build time, Lacros tests don't know whether they'll run on VM or 953*6777b538SAndroid Build Coastguard Worker # HW, and instead, these flags are specified at runtime when invoking 954*6777b538SAndroid Build Coastguard Worker # the generated runner script. 955*6777b538SAndroid Build Coastguard Worker skip_generating_board_args = true 956*6777b538SAndroid Build Coastguard Worker } 957*6777b538SAndroid Build Coastguard Worker 958*6777b538SAndroid Build Coastguard Worker if (tests_have_location_tags) { 959*6777b538SAndroid Build Coastguard Worker data = [ "//testing/location_tags.json" ] 960*6777b538SAndroid Build Coastguard Worker } 961*6777b538SAndroid Build Coastguard Worker } 962*6777b538SAndroid Build Coastguard Worker } 963*6777b538SAndroid Build Coastguard Worker 964*6777b538SAndroid Build Coastguard Worker mixed_test(target_name) { 965*6777b538SAndroid Build Coastguard Worker target_type = "executable" 966*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY) 967*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, [ "visibility" ]) 968*6777b538SAndroid Build Coastguard Worker if (!defined(deps)) { 969*6777b538SAndroid Build Coastguard Worker deps = [] 970*6777b538SAndroid Build Coastguard Worker } 971*6777b538SAndroid Build Coastguard Worker if (!defined(data)) { 972*6777b538SAndroid Build Coastguard Worker data = [] 973*6777b538SAndroid Build Coastguard Worker } 974*6777b538SAndroid Build Coastguard Worker 975*6777b538SAndroid Build Coastguard Worker # We use a special trigger script for CrOS hardware tests. 976*6777b538SAndroid Build Coastguard Worker data += [ "//testing/trigger_scripts/chromeos_device_trigger.py" ] 977*6777b538SAndroid Build Coastguard Worker 978*6777b538SAndroid Build Coastguard Worker write_runtime_deps = _runtime_deps_file 979*6777b538SAndroid Build Coastguard Worker data += [ _runtime_deps_file ] 980*6777b538SAndroid Build Coastguard Worker deps += [ ":$_gen_runner_target" ] 981*6777b538SAndroid Build Coastguard Worker 982*6777b538SAndroid Build Coastguard Worker if (!defined(data_deps)) { 983*6777b538SAndroid Build Coastguard Worker data_deps = [] 984*6777b538SAndroid Build Coastguard Worker } 985*6777b538SAndroid Build Coastguard Worker 986*6777b538SAndroid Build Coastguard Worker data_deps += [ "//testing:test_scripts_shared" ] 987*6777b538SAndroid Build Coastguard Worker } 988*6777b538SAndroid Build Coastguard Worker } else if (is_chromeos_lacros && !is_chromeos_device) { 989*6777b538SAndroid Build Coastguard Worker _runtime_deps_file = "$root_out_dir/${target_name}.runtime_deps" 990*6777b538SAndroid Build Coastguard Worker _executable = target_name 991*6777b538SAndroid Build Coastguard Worker _gen_runner_target = "${target_name}__runner" 992*6777b538SAndroid Build Coastguard Worker 993*6777b538SAndroid Build Coastguard Worker if (defined(invoker.use_xvfb)) { 994*6777b538SAndroid Build Coastguard Worker _use_xvfb = invoker.use_xvfb 995*6777b538SAndroid Build Coastguard Worker } else { 996*6777b538SAndroid Build Coastguard Worker _use_xvfb = false 997*6777b538SAndroid Build Coastguard Worker } 998*6777b538SAndroid Build Coastguard Worker 999*6777b538SAndroid Build Coastguard Worker # When use_xvfb is set by the invoker, it indicates that running this test 1000*6777b538SAndroid Build Coastguard Worker # target requires a window, and in lacros build, ash-chrome serves as the 1001*6777b538SAndroid Build Coastguard Worker # display server. Note that even though the tests themselves do not require 1002*6777b538SAndroid Build Coastguard Worker # xvfb anymore, xvfb.py is still needed to invoke the lacros test runner 1003*6777b538SAndroid Build Coastguard Worker # because ash-chrome is based on x11. 1004*6777b538SAndroid Build Coastguard Worker _use_ash_chrome = _use_xvfb 1005*6777b538SAndroid Build Coastguard Worker 1006*6777b538SAndroid Build Coastguard Worker generate_wrapper(_gen_runner_target) { 1007*6777b538SAndroid Build Coastguard Worker wrapper_script = "$root_build_dir/bin/run_" + _executable 1008*6777b538SAndroid Build Coastguard Worker 1009*6777b538SAndroid Build Coastguard Worker data = [] 1010*6777b538SAndroid Build Coastguard Worker data_deps = [ "//testing:test_scripts_shared" ] 1011*6777b538SAndroid Build Coastguard Worker 1012*6777b538SAndroid Build Coastguard Worker if (_use_xvfb) { 1013*6777b538SAndroid Build Coastguard Worker executable = "//testing/xvfb.py" 1014*6777b538SAndroid Build Coastguard Worker data += [ "//.vpython3" ] 1015*6777b538SAndroid Build Coastguard Worker } else { 1016*6777b538SAndroid Build Coastguard Worker executable = "//testing/test_env.py" 1017*6777b538SAndroid Build Coastguard Worker } 1018*6777b538SAndroid Build Coastguard Worker if (tests_have_location_tags) { 1019*6777b538SAndroid Build Coastguard Worker data += [ "//testing/location_tags.json" ] 1020*6777b538SAndroid Build Coastguard Worker } 1021*6777b538SAndroid Build Coastguard Worker 1022*6777b538SAndroid Build Coastguard Worker executable_args = [ 1023*6777b538SAndroid Build Coastguard Worker "@WrappedPath(../../build/lacros/test_runner.py)", 1024*6777b538SAndroid Build Coastguard Worker "test", 1025*6777b538SAndroid Build Coastguard Worker "@WrappedPath(./${_executable})", 1026*6777b538SAndroid Build Coastguard Worker "--test-launcher-bot-mode", 1027*6777b538SAndroid Build Coastguard Worker ] 1028*6777b538SAndroid Build Coastguard Worker 1029*6777b538SAndroid Build Coastguard Worker if (_use_ash_chrome) { 1030*6777b538SAndroid Build Coastguard Worker executable_args += [ "--ash-chrome-path" ] 1031*6777b538SAndroid Build Coastguard Worker 1032*6777b538SAndroid Build Coastguard Worker # Can't use --ash-chrome-path=path because WrappedPath 1033*6777b538SAndroid Build Coastguard Worker # won't be expanded for that usage. 1034*6777b538SAndroid Build Coastguard Worker executable_args += [ "@WrappedPath(./ash_clang_x64/test_ash_chrome)" ] 1035*6777b538SAndroid Build Coastguard Worker } 1036*6777b538SAndroid Build Coastguard Worker 1037*6777b538SAndroid Build Coastguard Worker if (is_asan) { 1038*6777b538SAndroid Build Coastguard Worker executable_args += [ "--asan=1" ] 1039*6777b538SAndroid Build Coastguard Worker } 1040*6777b538SAndroid Build Coastguard Worker if (is_msan) { 1041*6777b538SAndroid Build Coastguard Worker executable_args += [ "--msan=1" ] 1042*6777b538SAndroid Build Coastguard Worker } 1043*6777b538SAndroid Build Coastguard Worker if (is_tsan) { 1044*6777b538SAndroid Build Coastguard Worker executable_args += [ "--tsan=1" ] 1045*6777b538SAndroid Build Coastguard Worker } 1046*6777b538SAndroid Build Coastguard Worker if (use_cfi_diag) { 1047*6777b538SAndroid Build Coastguard Worker executable_args += [ "--cfi-diag=1" ] 1048*6777b538SAndroid Build Coastguard Worker } 1049*6777b538SAndroid Build Coastguard Worker if (fail_on_san_warnings) { 1050*6777b538SAndroid Build Coastguard Worker executable_args += [ "--fail-san=1" ] 1051*6777b538SAndroid Build Coastguard Worker } 1052*6777b538SAndroid Build Coastguard Worker 1053*6777b538SAndroid Build Coastguard Worker data += [ "//build/lacros/test_runner.py" ] 1054*6777b538SAndroid Build Coastguard Worker } 1055*6777b538SAndroid Build Coastguard Worker 1056*6777b538SAndroid Build Coastguard Worker mixed_test(target_name) { 1057*6777b538SAndroid Build Coastguard Worker target_type = "executable" 1058*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY) 1059*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, [ "visibility" ]) 1060*6777b538SAndroid Build Coastguard Worker if (!defined(deps)) { 1061*6777b538SAndroid Build Coastguard Worker deps = [] 1062*6777b538SAndroid Build Coastguard Worker } 1063*6777b538SAndroid Build Coastguard Worker 1064*6777b538SAndroid Build Coastguard Worker if (!defined(data_deps)) { 1065*6777b538SAndroid Build Coastguard Worker data_deps = [] 1066*6777b538SAndroid Build Coastguard Worker } 1067*6777b538SAndroid Build Coastguard Worker 1068*6777b538SAndroid Build Coastguard Worker data_deps += [ "//testing:test_scripts_shared" ] 1069*6777b538SAndroid Build Coastguard Worker 1070*6777b538SAndroid Build Coastguard Worker write_runtime_deps = _runtime_deps_file 1071*6777b538SAndroid Build Coastguard Worker deps += [ ":$_gen_runner_target" ] 1072*6777b538SAndroid Build Coastguard Worker if (_use_ash_chrome && also_build_ash_chrome) { 1073*6777b538SAndroid Build Coastguard Worker data_deps += [ "//chrome/test:test_ash_chrome(//build/toolchain/linux:ash_clang_x64)" ] 1074*6777b538SAndroid Build Coastguard Worker } 1075*6777b538SAndroid Build Coastguard Worker } 1076*6777b538SAndroid Build Coastguard Worker } else if (!is_nacl) { 1077*6777b538SAndroid Build Coastguard Worker if (is_mac || is_win) { 1078*6777b538SAndroid Build Coastguard Worker assert(!defined(invoker.use_xvfb) || !invoker.use_xvfb) 1079*6777b538SAndroid Build Coastguard Worker } 1080*6777b538SAndroid Build Coastguard Worker 1081*6777b538SAndroid Build Coastguard Worker _runtime_deps_file = "$root_out_dir/${target_name}.runtime_deps" 1082*6777b538SAndroid Build Coastguard Worker _executable = target_name 1083*6777b538SAndroid Build Coastguard Worker _gen_runner_target = "${target_name}__runner" 1084*6777b538SAndroid Build Coastguard Worker 1085*6777b538SAndroid Build Coastguard Worker if ((is_linux || is_chromeos) && defined(invoker.use_xvfb)) { 1086*6777b538SAndroid Build Coastguard Worker _use_xvfb = invoker.use_xvfb 1087*6777b538SAndroid Build Coastguard Worker } else { 1088*6777b538SAndroid Build Coastguard Worker _use_xvfb = false 1089*6777b538SAndroid Build Coastguard Worker } 1090*6777b538SAndroid Build Coastguard Worker 1091*6777b538SAndroid Build Coastguard Worker generate_wrapper(_gen_runner_target) { 1092*6777b538SAndroid Build Coastguard Worker wrapper_script = "$root_build_dir/bin/run_" + _executable 1093*6777b538SAndroid Build Coastguard Worker 1094*6777b538SAndroid Build Coastguard Worker data = [] 1095*6777b538SAndroid Build Coastguard Worker data_deps = [ "//testing:test_scripts_shared" ] 1096*6777b538SAndroid Build Coastguard Worker 1097*6777b538SAndroid Build Coastguard Worker if (_use_xvfb) { 1098*6777b538SAndroid Build Coastguard Worker executable = "//testing/xvfb.py" 1099*6777b538SAndroid Build Coastguard Worker } else { 1100*6777b538SAndroid Build Coastguard Worker executable = "//testing/test_env.py" 1101*6777b538SAndroid Build Coastguard Worker } 1102*6777b538SAndroid Build Coastguard Worker if (tests_have_location_tags) { 1103*6777b538SAndroid Build Coastguard Worker data += [ "//testing/location_tags.json" ] 1104*6777b538SAndroid Build Coastguard Worker } 1105*6777b538SAndroid Build Coastguard Worker 1106*6777b538SAndroid Build Coastguard Worker executable_args = [ 1107*6777b538SAndroid Build Coastguard Worker "@WrappedPath(./${_executable})", 1108*6777b538SAndroid Build Coastguard Worker "--test-launcher-bot-mode", 1109*6777b538SAndroid Build Coastguard Worker ] 1110*6777b538SAndroid Build Coastguard Worker if (is_asan) { 1111*6777b538SAndroid Build Coastguard Worker executable_args += [ "--asan=1" ] 1112*6777b538SAndroid Build Coastguard Worker } 1113*6777b538SAndroid Build Coastguard Worker if (is_msan) { 1114*6777b538SAndroid Build Coastguard Worker executable_args += [ "--msan=1" ] 1115*6777b538SAndroid Build Coastguard Worker } 1116*6777b538SAndroid Build Coastguard Worker if (is_tsan) { 1117*6777b538SAndroid Build Coastguard Worker executable_args += [ "--tsan=1" ] 1118*6777b538SAndroid Build Coastguard Worker } 1119*6777b538SAndroid Build Coastguard Worker if (use_cfi_diag) { 1120*6777b538SAndroid Build Coastguard Worker executable_args += [ "--cfi-diag=1" ] 1121*6777b538SAndroid Build Coastguard Worker } 1122*6777b538SAndroid Build Coastguard Worker if (fail_on_san_warnings) { 1123*6777b538SAndroid Build Coastguard Worker executable_args += [ "--fail-san=1" ] 1124*6777b538SAndroid Build Coastguard Worker } 1125*6777b538SAndroid Build Coastguard Worker } 1126*6777b538SAndroid Build Coastguard Worker 1127*6777b538SAndroid Build Coastguard Worker mixed_test(target_name) { 1128*6777b538SAndroid Build Coastguard Worker target_type = "executable" 1129*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 1130*6777b538SAndroid Build Coastguard Worker "*", 1131*6777b538SAndroid Build Coastguard Worker TESTONLY_AND_VISIBILITY + [ "use_xvfb" ]) 1132*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, [ "visibility" ]) 1133*6777b538SAndroid Build Coastguard Worker if (!defined(deps)) { 1134*6777b538SAndroid Build Coastguard Worker deps = [] 1135*6777b538SAndroid Build Coastguard Worker } 1136*6777b538SAndroid Build Coastguard Worker 1137*6777b538SAndroid Build Coastguard Worker deps += [ 1138*6777b538SAndroid Build Coastguard Worker # Give tests the default manifest on Windows (a no-op elsewhere). 1139*6777b538SAndroid Build Coastguard Worker "//build/win:default_exe_manifest", 1140*6777b538SAndroid Build Coastguard Worker ] 1141*6777b538SAndroid Build Coastguard Worker 1142*6777b538SAndroid Build Coastguard Worker write_runtime_deps = _runtime_deps_file 1143*6777b538SAndroid Build Coastguard Worker deps += [ ":$_gen_runner_target" ] 1144*6777b538SAndroid Build Coastguard Worker 1145*6777b538SAndroid Build Coastguard Worker if (!defined(data_deps)) { 1146*6777b538SAndroid Build Coastguard Worker data_deps = [] 1147*6777b538SAndroid Build Coastguard Worker } 1148*6777b538SAndroid Build Coastguard Worker 1149*6777b538SAndroid Build Coastguard Worker data_deps += [ "//testing:test_scripts_shared" ] 1150*6777b538SAndroid Build Coastguard Worker } 1151*6777b538SAndroid Build Coastguard Worker } else { 1152*6777b538SAndroid Build Coastguard Worker # This is a catch-all clause for NaCl toolchains and other random 1153*6777b538SAndroid Build Coastguard Worker # configurations that might define tests; test() in these configs 1154*6777b538SAndroid Build Coastguard Worker # will just define the underlying executables. 1155*6777b538SAndroid Build Coastguard Worker assert(!defined(invoker.use_xvfb) || !invoker.use_xvfb, 1156*6777b538SAndroid Build Coastguard Worker "use_xvfb should not be defined for a non-linux configuration") 1157*6777b538SAndroid Build Coastguard Worker mixed_test(target_name) { 1158*6777b538SAndroid Build Coastguard Worker target_type = "executable" 1159*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY) 1160*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, [ "visibility" ]) 1161*6777b538SAndroid Build Coastguard Worker if (!defined(deps)) { 1162*6777b538SAndroid Build Coastguard Worker deps = [] 1163*6777b538SAndroid Build Coastguard Worker } 1164*6777b538SAndroid Build Coastguard Worker 1165*6777b538SAndroid Build Coastguard Worker if (!defined(data_deps)) { 1166*6777b538SAndroid Build Coastguard Worker data_deps = [] 1167*6777b538SAndroid Build Coastguard Worker } 1168*6777b538SAndroid Build Coastguard Worker 1169*6777b538SAndroid Build Coastguard Worker data_deps += [ "//testing:test_scripts_shared" ] 1170*6777b538SAndroid Build Coastguard Worker } 1171*6777b538SAndroid Build Coastguard Worker } 1172*6777b538SAndroid Build Coastguard Worker} 1173*6777b538SAndroid Build Coastguard Worker 1174*6777b538SAndroid Build Coastguard Worker# Defines a type of test that invokes a script to run, rather than 1175*6777b538SAndroid Build Coastguard Worker# invoking an executable. 1176*6777b538SAndroid Build Coastguard Worker# 1177*6777b538SAndroid Build Coastguard Worker# The script must implement the 1178*6777b538SAndroid Build Coastguard Worker# [test executable API](//docs/testing/test_executable_api.md). 1179*6777b538SAndroid Build Coastguard Worker# 1180*6777b538SAndroid Build Coastguard Worker# The template must be passed the `script` parameter, which specifies the path 1181*6777b538SAndroid Build Coastguard Worker# to the script to run. It may optionally be passed a `args` parameter, which 1182*6777b538SAndroid Build Coastguard Worker# can be used to include a list of args to be specified by default. The 1183*6777b538SAndroid Build Coastguard Worker# template will produce a `$root_build_dir/run_$target_name` wrapper and write 1184*6777b538SAndroid Build Coastguard Worker# the runtime_deps for the target to 1185*6777b538SAndroid Build Coastguard Worker# $root_build_dir/${target_name}.runtime_deps, as per the conventions listed in 1186*6777b538SAndroid Build Coastguard Worker# the [test wrapper API](//docs/testing/test_wrapper_api.md). 1187*6777b538SAndroid Build Coastguard Workertemplate("script_test") { 1188*6777b538SAndroid Build Coastguard Worker generate_wrapper(target_name) { 1189*6777b538SAndroid Build Coastguard Worker testonly = true 1190*6777b538SAndroid Build Coastguard Worker wrapper_script = "${root_build_dir}/bin/run_${target_name}" 1191*6777b538SAndroid Build Coastguard Worker 1192*6777b538SAndroid Build Coastguard Worker executable = "//testing/test_env.py" 1193*6777b538SAndroid Build Coastguard Worker 1194*6777b538SAndroid Build Coastguard Worker executable_args = 1195*6777b538SAndroid Build Coastguard Worker [ "@WrappedPath(" + rebase_path(invoker.script, root_build_dir) + ")" ] 1196*6777b538SAndroid Build Coastguard Worker if (defined(invoker.args)) { 1197*6777b538SAndroid Build Coastguard Worker executable_args += invoker.args 1198*6777b538SAndroid Build Coastguard Worker } 1199*6777b538SAndroid Build Coastguard Worker 1200*6777b538SAndroid Build Coastguard Worker data = [ invoker.script ] 1201*6777b538SAndroid Build Coastguard Worker 1202*6777b538SAndroid Build Coastguard Worker if (defined(invoker.data)) { 1203*6777b538SAndroid Build Coastguard Worker data += invoker.data 1204*6777b538SAndroid Build Coastguard Worker } 1205*6777b538SAndroid Build Coastguard Worker if (tests_have_location_tags) { 1206*6777b538SAndroid Build Coastguard Worker data += [ "//testing/location_tags.json" ] 1207*6777b538SAndroid Build Coastguard Worker } 1208*6777b538SAndroid Build Coastguard Worker 1209*6777b538SAndroid Build Coastguard Worker data_deps = [ "//testing:test_scripts_shared" ] 1210*6777b538SAndroid Build Coastguard Worker if (defined(invoker.data_deps)) { 1211*6777b538SAndroid Build Coastguard Worker data_deps += invoker.data_deps 1212*6777b538SAndroid Build Coastguard Worker } 1213*6777b538SAndroid Build Coastguard Worker 1214*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 1215*6777b538SAndroid Build Coastguard Worker "*", 1216*6777b538SAndroid Build Coastguard Worker TESTONLY_AND_VISIBILITY + [ 1217*6777b538SAndroid Build Coastguard Worker "args", 1218*6777b538SAndroid Build Coastguard Worker "data", 1219*6777b538SAndroid Build Coastguard Worker "data_deps", 1220*6777b538SAndroid Build Coastguard Worker "script", 1221*6777b538SAndroid Build Coastguard Worker ]) 1222*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, [ "visibility" ]) 1223*6777b538SAndroid Build Coastguard Worker 1224*6777b538SAndroid Build Coastguard Worker write_runtime_deps = "${root_build_dir}/${target_name}.runtime_deps" 1225*6777b538SAndroid Build Coastguard Worker } 1226*6777b538SAndroid Build Coastguard Worker} 1227*6777b538SAndroid Build Coastguard Worker 1228*6777b538SAndroid Build Coastguard Worker# Defines a test target that uses exit code for pass/fail. 1229*6777b538SAndroid Build Coastguard Workertemplate("isolated_script_test") { 1230*6777b538SAndroid Build Coastguard Worker script_test(target_name) { 1231*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 1232*6777b538SAndroid Build Coastguard Worker "*", 1233*6777b538SAndroid Build Coastguard Worker TESTONLY_AND_VISIBILITY + [ 1234*6777b538SAndroid Build Coastguard Worker "args", 1235*6777b538SAndroid Build Coastguard Worker "deps", 1236*6777b538SAndroid Build Coastguard Worker "script", 1237*6777b538SAndroid Build Coastguard Worker ]) 1238*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, [ "visibility" ]) 1239*6777b538SAndroid Build Coastguard Worker deps = [ "//testing:run_isolated_script_test" ] 1240*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 1241*6777b538SAndroid Build Coastguard Worker deps += invoker.deps 1242*6777b538SAndroid Build Coastguard Worker } 1243*6777b538SAndroid Build Coastguard Worker script = "//testing/scripts/run_isolated_script_test.py" 1244*6777b538SAndroid Build Coastguard Worker data = [ invoker.script ] 1245*6777b538SAndroid Build Coastguard Worker args = [ 1246*6777b538SAndroid Build Coastguard Worker rebase_path(invoker.script, root_build_dir), 1247*6777b538SAndroid Build Coastguard Worker "--script-type=bare", 1248*6777b538SAndroid Build Coastguard Worker ] 1249*6777b538SAndroid Build Coastguard Worker if (defined(invoker.args)) { 1250*6777b538SAndroid Build Coastguard Worker args += invoker.args 1251*6777b538SAndroid Build Coastguard Worker } 1252*6777b538SAndroid Build Coastguard Worker } 1253*6777b538SAndroid Build Coastguard Worker} 1254*6777b538SAndroid Build Coastguard Worker 1255*6777b538SAndroid Build Coastguard Worker# Test defaults. 1256*6777b538SAndroid Build Coastguard Workerset_defaults("test") { 1257*6777b538SAndroid Build Coastguard Worker if (is_android) { 1258*6777b538SAndroid Build Coastguard Worker configs = default_shared_library_configs 1259*6777b538SAndroid Build Coastguard Worker configs -= [ "//build/config/android:hide_all_but_jni_onload" ] 1260*6777b538SAndroid Build Coastguard Worker configs += [ "//build/config/android:hide_all_but_jni" ] 1261*6777b538SAndroid Build Coastguard Worker 1262*6777b538SAndroid Build Coastguard Worker # Compress sections to stay under 4gb hard limit on 32-bit current_cpu. 1263*6777b538SAndroid Build Coastguard Worker # https://crbug.com/1354616 1264*6777b538SAndroid Build Coastguard Worker if (symbol_level == 2 && !use_debug_fission && 1265*6777b538SAndroid Build Coastguard Worker (current_cpu == "arm" || current_cpu == "x86")) { 1266*6777b538SAndroid Build Coastguard Worker configs += [ "//build/config:compress_debug_sections" ] 1267*6777b538SAndroid Build Coastguard Worker } 1268*6777b538SAndroid Build Coastguard Worker } else { 1269*6777b538SAndroid Build Coastguard Worker configs = default_executable_configs 1270*6777b538SAndroid Build Coastguard Worker } 1271*6777b538SAndroid Build Coastguard Worker} 1272