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# Defines fuzzer_test. 6*6777b538SAndroid Build Coastguard Worker# 7*6777b538SAndroid Build Coastguard Workerimport("//build/config/features.gni") 8*6777b538SAndroid Build Coastguard Workerimport("//build/config/sanitizers/sanitizers.gni") 9*6777b538SAndroid Build Coastguard Workerimport("//testing/test.gni") 10*6777b538SAndroid Build Coastguard Worker 11*6777b538SAndroid Build Coastguard Worker# fuzzer_test is used to define individual libfuzzer tests. 12*6777b538SAndroid Build Coastguard Worker# 13*6777b538SAndroid Build Coastguard Worker# Supported attributes: 14*6777b538SAndroid Build Coastguard Worker# - (required) sources - fuzzer test source files 15*6777b538SAndroid Build Coastguard Worker# - deps - test dependencies 16*6777b538SAndroid Build Coastguard Worker# - libs - Additional libraries to link. 17*6777b538SAndroid Build Coastguard Worker# - frameworks - Apple-only. Additional frameworks to link. 18*6777b538SAndroid Build Coastguard Worker# - additional_configs - additional configs to be used for compilation 19*6777b538SAndroid Build Coastguard Worker# - dict - a dictionary file for the fuzzer. 20*6777b538SAndroid Build Coastguard Worker# - environment_variables - certain whitelisted environment variables for the 21*6777b538SAndroid Build Coastguard Worker# fuzzer (AFL_DRIVER_DONT_DEFER is the only one allowed currently). 22*6777b538SAndroid Build Coastguard Worker# - libfuzzer_options - options for the fuzzer (e.g. close_fd_mask=N). 23*6777b538SAndroid Build Coastguard Worker# These are mostly applied only when the fuzzer is being run using the 24*6777b538SAndroid Build Coastguard Worker# libfuzzer fuzzing engine, but a few of these may be interpreted by 25*6777b538SAndroid Build Coastguard Worker# other fuzzing engines too 26*6777b538SAndroid Build Coastguard Worker# - centipede_options - options for the fuzzer (e.g. shmem_size_mb=N) 27*6777b538SAndroid Build Coastguard Worker# when running using the centipede fuzzing engine. 28*6777b538SAndroid Build Coastguard Worker# - asan_options - AddressSanitizer options (e.g. allow_user_segv_handler=1). 29*6777b538SAndroid Build Coastguard Worker# - msan_options - MemorySanitizer options. 30*6777b538SAndroid Build Coastguard Worker# - ubsan_options - UndefinedBehaviorSanitizer options. 31*6777b538SAndroid Build Coastguard Worker# - seed_corpus - a directory with seed corpus. 32*6777b538SAndroid Build Coastguard Worker# - seed_corpus_deps - dependencies for generating the seed corpus. 33*6777b538SAndroid Build Coastguard Worker# - grammar_options - defines a grammar used by a grammar based mutator. 34*6777b538SAndroid Build Coastguard Worker# - exclude_main - if you're going to provide your own 'main' function 35*6777b538SAndroid Build Coastguard Worker# - high_end_job_required - whether the fuzzer requires bigger machines to run. 36*6777b538SAndroid Build Coastguard Worker# Optional argument. 37*6777b538SAndroid Build Coastguard Worker# 38*6777b538SAndroid Build Coastguard Worker# If use_libfuzzer gn flag is defined, then proper fuzzer would be build. 39*6777b538SAndroid Build Coastguard Worker# Without use_libfuzzer or use_afl a unit-test style binary would be built on 40*6777b538SAndroid Build Coastguard Worker# linux and the whole target is a no-op otherwise. 41*6777b538SAndroid Build Coastguard Worker# 42*6777b538SAndroid Build Coastguard Worker# The template wraps test() target with appropriate dependencies. 43*6777b538SAndroid Build Coastguard Worker# If any test run-time options are present (dict or libfuzzer_options), then a 44*6777b538SAndroid Build Coastguard Worker# config (.options file) file would be generated or modified in root output 45*6777b538SAndroid Build Coastguard Worker# dir (next to test). 46*6777b538SAndroid Build Coastguard Workertemplate("fuzzer_test") { 47*6777b538SAndroid Build Coastguard Worker _high_end_job_required = false 48*6777b538SAndroid Build Coastguard Worker if (defined(invoker.high_end_job_required)) { 49*6777b538SAndroid Build Coastguard Worker _high_end_job_required = invoker.high_end_job_required 50*6777b538SAndroid Build Coastguard Worker } 51*6777b538SAndroid Build Coastguard Worker 52*6777b538SAndroid Build Coastguard Worker # If the job is a high_end job and that we are currently building a high_end 53*6777b538SAndroid Build Coastguard Worker # target, we should compile this fuzzer_test in. Otherwise, for now, we just 54*6777b538SAndroid Build Coastguard Worker # compile everything in. 55*6777b538SAndroid Build Coastguard Worker # TODO(crbug.com/333831251): Once CF supports high end jobs, do not compile 56*6777b538SAndroid Build Coastguard Worker # high end targets except for high end jobs. 57*6777b538SAndroid Build Coastguard Worker _should_build = (_high_end_job_required || !high_end_fuzzer_targets) && 58*6777b538SAndroid Build Coastguard Worker !disable_libfuzzer && use_fuzzing_engine 59*6777b538SAndroid Build Coastguard Worker if (_should_build) { 60*6777b538SAndroid Build Coastguard Worker assert(defined(invoker.sources), "Need sources in $target_name.") 61*6777b538SAndroid Build Coastguard Worker 62*6777b538SAndroid Build Coastguard Worker test_deps = [] 63*6777b538SAndroid Build Coastguard Worker if (defined(invoker.exclude_main) && invoker.exclude_main) { 64*6777b538SAndroid Build Coastguard Worker test_deps += [ "//testing/libfuzzer:fuzzing_engine_no_main" ] 65*6777b538SAndroid Build Coastguard Worker } else { 66*6777b538SAndroid Build Coastguard Worker test_deps += [ "//testing/libfuzzer:fuzzing_engine_main" ] 67*6777b538SAndroid Build Coastguard Worker } 68*6777b538SAndroid Build Coastguard Worker test_data_deps = [] 69*6777b538SAndroid Build Coastguard Worker 70*6777b538SAndroid Build Coastguard Worker if (defined(invoker.deps)) { 71*6777b538SAndroid Build Coastguard Worker test_deps += invoker.deps 72*6777b538SAndroid Build Coastguard Worker } 73*6777b538SAndroid Build Coastguard Worker if (defined(invoker.data_deps)) { 74*6777b538SAndroid Build Coastguard Worker test_data_deps += invoker.data_deps 75*6777b538SAndroid Build Coastguard Worker } 76*6777b538SAndroid Build Coastguard Worker 77*6777b538SAndroid Build Coastguard Worker supporting_file_test_deps = [] 78*6777b538SAndroid Build Coastguard Worker supporting_file_test_data_deps = [] 79*6777b538SAndroid Build Coastguard Worker 80*6777b538SAndroid Build Coastguard Worker if (defined(invoker.seed_corpus) || defined(invoker.seed_corpuses)) { 81*6777b538SAndroid Build Coastguard Worker assert(!(defined(invoker.seed_corpus) && defined(invoker.seed_corpuses)), 82*6777b538SAndroid Build Coastguard Worker "Do not use both seed_corpus and seed_corpuses for $target_name.") 83*6777b538SAndroid Build Coastguard Worker 84*6777b538SAndroid Build Coastguard Worker out = "$root_build_dir/$target_name" + "_seed_corpus.zip" 85*6777b538SAndroid Build Coastguard Worker 86*6777b538SAndroid Build Coastguard Worker seed_corpus_deps = [] 87*6777b538SAndroid Build Coastguard Worker 88*6777b538SAndroid Build Coastguard Worker if (defined(invoker.seed_corpus_deps)) { 89*6777b538SAndroid Build Coastguard Worker seed_corpus_deps += invoker.seed_corpus_deps 90*6777b538SAndroid Build Coastguard Worker } 91*6777b538SAndroid Build Coastguard Worker 92*6777b538SAndroid Build Coastguard Worker action(target_name + "_seed_corpus") { 93*6777b538SAndroid Build Coastguard Worker script = "//testing/libfuzzer/archive_corpus.py" 94*6777b538SAndroid Build Coastguard Worker 95*6777b538SAndroid Build Coastguard Worker testonly = true 96*6777b538SAndroid Build Coastguard Worker 97*6777b538SAndroid Build Coastguard Worker args = [ 98*6777b538SAndroid Build Coastguard Worker "--output", 99*6777b538SAndroid Build Coastguard Worker rebase_path(out, root_build_dir), 100*6777b538SAndroid Build Coastguard Worker ] 101*6777b538SAndroid Build Coastguard Worker 102*6777b538SAndroid Build Coastguard Worker if (defined(invoker.seed_corpus)) { 103*6777b538SAndroid Build Coastguard Worker args += [ rebase_path(invoker.seed_corpus, root_build_dir) ] 104*6777b538SAndroid Build Coastguard Worker } 105*6777b538SAndroid Build Coastguard Worker 106*6777b538SAndroid Build Coastguard Worker if (defined(invoker.seed_corpuses)) { 107*6777b538SAndroid Build Coastguard Worker foreach(seed_corpus_path, invoker.seed_corpuses) { 108*6777b538SAndroid Build Coastguard Worker args += [ rebase_path(seed_corpus_path, root_build_dir) ] 109*6777b538SAndroid Build Coastguard Worker } 110*6777b538SAndroid Build Coastguard Worker } 111*6777b538SAndroid Build Coastguard Worker 112*6777b538SAndroid Build Coastguard Worker outputs = [ out ] 113*6777b538SAndroid Build Coastguard Worker 114*6777b538SAndroid Build Coastguard Worker deps = [ "//testing/libfuzzer:seed_corpus" ] + seed_corpus_deps 115*6777b538SAndroid Build Coastguard Worker } 116*6777b538SAndroid Build Coastguard Worker 117*6777b538SAndroid Build Coastguard Worker if (archive_seed_corpus) { 118*6777b538SAndroid Build Coastguard Worker supporting_file_test_deps += [ ":" + target_name + "_seed_corpus" ] 119*6777b538SAndroid Build Coastguard Worker } 120*6777b538SAndroid Build Coastguard Worker } 121*6777b538SAndroid Build Coastguard Worker 122*6777b538SAndroid Build Coastguard Worker if (defined(invoker.dict) || defined(invoker.libfuzzer_options) || 123*6777b538SAndroid Build Coastguard Worker defined(invoker.centipede_options) || defined(invoker.asan_options) || 124*6777b538SAndroid Build Coastguard Worker defined(invoker.msan_options) || defined(invoker.ubsan_options) || 125*6777b538SAndroid Build Coastguard Worker defined(invoker.environment_variables) || 126*6777b538SAndroid Build Coastguard Worker defined(invoker.grammar_options)) { 127*6777b538SAndroid Build Coastguard Worker if (defined(invoker.dict)) { 128*6777b538SAndroid Build Coastguard Worker # Copy dictionary to output. 129*6777b538SAndroid Build Coastguard Worker copy(target_name + "_dict_copy") { 130*6777b538SAndroid Build Coastguard Worker sources = [ invoker.dict ] 131*6777b538SAndroid Build Coastguard Worker outputs = [ "$root_build_dir/" + target_name + ".dict" ] 132*6777b538SAndroid Build Coastguard Worker } 133*6777b538SAndroid Build Coastguard Worker supporting_file_test_deps += [ ":" + target_name + "_dict_copy" ] 134*6777b538SAndroid Build Coastguard Worker } 135*6777b538SAndroid Build Coastguard Worker 136*6777b538SAndroid Build Coastguard Worker fuzzer_name = target_name 137*6777b538SAndroid Build Coastguard Worker 138*6777b538SAndroid Build Coastguard Worker # Generate .options file. 139*6777b538SAndroid Build Coastguard Worker config_file_name = target_name + ".options" 140*6777b538SAndroid Build Coastguard Worker action(config_file_name) { 141*6777b538SAndroid Build Coastguard Worker script = "//testing/libfuzzer/gen_fuzzer_config.py" 142*6777b538SAndroid Build Coastguard Worker args = [ 143*6777b538SAndroid Build Coastguard Worker "--config", 144*6777b538SAndroid Build Coastguard Worker rebase_path("$root_build_dir/" + config_file_name, root_build_dir), 145*6777b538SAndroid Build Coastguard Worker ] 146*6777b538SAndroid Build Coastguard Worker 147*6777b538SAndroid Build Coastguard Worker if (defined(invoker.dict)) { 148*6777b538SAndroid Build Coastguard Worker args += [ 149*6777b538SAndroid Build Coastguard Worker "--dict", 150*6777b538SAndroid Build Coastguard Worker rebase_path("$root_build_dir/" + fuzzer_name + ".dict", 151*6777b538SAndroid Build Coastguard Worker root_build_dir), 152*6777b538SAndroid Build Coastguard Worker ] 153*6777b538SAndroid Build Coastguard Worker } else { 154*6777b538SAndroid Build Coastguard Worker not_needed([ "fuzzer_name" ]) 155*6777b538SAndroid Build Coastguard Worker } 156*6777b538SAndroid Build Coastguard Worker 157*6777b538SAndroid Build Coastguard Worker if (defined(invoker.libfuzzer_options)) { 158*6777b538SAndroid Build Coastguard Worker args += [ "--libfuzzer_options" ] 159*6777b538SAndroid Build Coastguard Worker args += invoker.libfuzzer_options 160*6777b538SAndroid Build Coastguard Worker } 161*6777b538SAndroid Build Coastguard Worker 162*6777b538SAndroid Build Coastguard Worker if (defined(invoker.centipede_options)) { 163*6777b538SAndroid Build Coastguard Worker args += [ "--centipede_options" ] 164*6777b538SAndroid Build Coastguard Worker args += invoker.centipede_options 165*6777b538SAndroid Build Coastguard Worker } 166*6777b538SAndroid Build Coastguard Worker 167*6777b538SAndroid Build Coastguard Worker if (defined(invoker.asan_options)) { 168*6777b538SAndroid Build Coastguard Worker args += [ "--asan_options" ] 169*6777b538SAndroid Build Coastguard Worker args += invoker.asan_options 170*6777b538SAndroid Build Coastguard Worker } 171*6777b538SAndroid Build Coastguard Worker 172*6777b538SAndroid Build Coastguard Worker if (defined(invoker.msan_options)) { 173*6777b538SAndroid Build Coastguard Worker args += [ "--msan_options" ] 174*6777b538SAndroid Build Coastguard Worker args += invoker.msan_options 175*6777b538SAndroid Build Coastguard Worker } 176*6777b538SAndroid Build Coastguard Worker 177*6777b538SAndroid Build Coastguard Worker if (defined(invoker.ubsan_options)) { 178*6777b538SAndroid Build Coastguard Worker args += [ "--ubsan_options" ] 179*6777b538SAndroid Build Coastguard Worker args += invoker.ubsan_options 180*6777b538SAndroid Build Coastguard Worker } 181*6777b538SAndroid Build Coastguard Worker 182*6777b538SAndroid Build Coastguard Worker if (defined(invoker.environment_variables)) { 183*6777b538SAndroid Build Coastguard Worker args += [ "--environment_variables" ] 184*6777b538SAndroid Build Coastguard Worker args += invoker.environment_variables 185*6777b538SAndroid Build Coastguard Worker } 186*6777b538SAndroid Build Coastguard Worker 187*6777b538SAndroid Build Coastguard Worker if (defined(invoker.grammar_options)) { 188*6777b538SAndroid Build Coastguard Worker args += [ "--grammar_options" ] 189*6777b538SAndroid Build Coastguard Worker args += invoker.grammar_options 190*6777b538SAndroid Build Coastguard Worker } 191*6777b538SAndroid Build Coastguard Worker 192*6777b538SAndroid Build Coastguard Worker outputs = [ "$root_build_dir/$config_file_name" ] 193*6777b538SAndroid Build Coastguard Worker } 194*6777b538SAndroid Build Coastguard Worker test_data_deps += [ ":" + config_file_name ] 195*6777b538SAndroid Build Coastguard Worker supporting_file_test_deps += [ ":" + config_file_name ] 196*6777b538SAndroid Build Coastguard Worker } 197*6777b538SAndroid Build Coastguard Worker 198*6777b538SAndroid Build Coastguard Worker if (generate_fuzzer_owners) { 199*6777b538SAndroid Build Coastguard Worker # Generating owners files is slow, only enable when fuzzing engine is 200*6777b538SAndroid Build Coastguard Worker # used. 201*6777b538SAndroid Build Coastguard Worker owners_file_name = target_name + ".owners" 202*6777b538SAndroid Build Coastguard Worker action(owners_file_name) { 203*6777b538SAndroid Build Coastguard Worker script = "//testing/libfuzzer/gen_fuzzer_owners.py" 204*6777b538SAndroid Build Coastguard Worker pool = "//testing/libfuzzer:fuzzer_owners_pool" 205*6777b538SAndroid Build Coastguard Worker args = [ 206*6777b538SAndroid Build Coastguard Worker "--owners", 207*6777b538SAndroid Build Coastguard Worker rebase_path("$root_build_dir/" + owners_file_name, root_build_dir), 208*6777b538SAndroid Build Coastguard Worker ] 209*6777b538SAndroid Build Coastguard Worker 210*6777b538SAndroid Build Coastguard Worker if (defined(invoker.sources) && invoker.sources != []) { 211*6777b538SAndroid Build Coastguard Worker args += [ "--sources" ] + rebase_path(invoker.sources, "//") 212*6777b538SAndroid Build Coastguard Worker } else if (defined(invoker.deps) && invoker.deps != []) { 213*6777b538SAndroid Build Coastguard Worker _full_deps = [] 214*6777b538SAndroid Build Coastguard Worker foreach(_dep, invoker.deps) { 215*6777b538SAndroid Build Coastguard Worker _full_deps += [ get_label_info(_dep, "dir") + ":" + 216*6777b538SAndroid Build Coastguard Worker get_label_info(_dep, "name") ] 217*6777b538SAndroid Build Coastguard Worker } 218*6777b538SAndroid Build Coastguard Worker args += [ 219*6777b538SAndroid Build Coastguard Worker "--build-dir", 220*6777b538SAndroid Build Coastguard Worker rebase_path("$root_build_dir/", root_build_dir), 221*6777b538SAndroid Build Coastguard Worker "--deps", 222*6777b538SAndroid Build Coastguard Worker ] + _full_deps 223*6777b538SAndroid Build Coastguard Worker } 224*6777b538SAndroid Build Coastguard Worker 225*6777b538SAndroid Build Coastguard Worker outputs = [ "$root_build_dir/$owners_file_name" ] 226*6777b538SAndroid Build Coastguard Worker } 227*6777b538SAndroid Build Coastguard Worker supporting_file_test_data_deps += [ ":" + owners_file_name ] 228*6777b538SAndroid Build Coastguard Worker } 229*6777b538SAndroid Build Coastguard Worker 230*6777b538SAndroid Build Coastguard Worker # Copy to executable folder and codesign for catalyst 231*6777b538SAndroid Build Coastguard Worker if (is_ios) { 232*6777b538SAndroid Build Coastguard Worker # iOS only supports fuzzer in catalyst environment. 233*6777b538SAndroid Build Coastguard Worker assert(target_environment == "catalyst") 234*6777b538SAndroid Build Coastguard Worker 235*6777b538SAndroid Build Coastguard Worker # Loop over two kinds of deps to codesign these in two |action_foreach|s. 236*6777b538SAndroid Build Coastguard Worker # Use the "test_deps", "test_data_deps" as identifiers in for loop. 237*6777b538SAndroid Build Coastguard Worker foreach(_deps_type_label, 238*6777b538SAndroid Build Coastguard Worker [ 239*6777b538SAndroid Build Coastguard Worker "test_deps", 240*6777b538SAndroid Build Coastguard Worker "test_data_deps", 241*6777b538SAndroid Build Coastguard Worker ]) { 242*6777b538SAndroid Build Coastguard Worker _dep_list = [] 243*6777b538SAndroid Build Coastguard Worker if (_deps_type_label == "test_deps") { 244*6777b538SAndroid Build Coastguard Worker _dep_list = supporting_file_test_deps 245*6777b538SAndroid Build Coastguard Worker } else { 246*6777b538SAndroid Build Coastguard Worker _dep_list = supporting_file_test_data_deps 247*6777b538SAndroid Build Coastguard Worker } 248*6777b538SAndroid Build Coastguard Worker _files_to_sign = [] 249*6777b538SAndroid Build Coastguard Worker foreach(dep, _dep_list) { 250*6777b538SAndroid Build Coastguard Worker _files_to_sign += get_target_outputs(dep) 251*6777b538SAndroid Build Coastguard Worker } 252*6777b538SAndroid Build Coastguard Worker if (_files_to_sign != []) { 253*6777b538SAndroid Build Coastguard Worker _codesign_action_name = 254*6777b538SAndroid Build Coastguard Worker target_name + "_codesign_supporting_files_" + _deps_type_label 255*6777b538SAndroid Build Coastguard Worker action_foreach(_codesign_action_name) { 256*6777b538SAndroid Build Coastguard Worker testonly = true 257*6777b538SAndroid Build Coastguard Worker script = "//build/config/ios/codesign.py" 258*6777b538SAndroid Build Coastguard Worker sources = _files_to_sign 259*6777b538SAndroid Build Coastguard Worker _codesign_output_path = 260*6777b538SAndroid Build Coastguard Worker "${root_build_dir}/codesign/{{source_file_part}}" 261*6777b538SAndroid Build Coastguard Worker outputs = [ _codesign_output_path ] 262*6777b538SAndroid Build Coastguard Worker args = [ 263*6777b538SAndroid Build Coastguard Worker "code-sign-file", 264*6777b538SAndroid Build Coastguard Worker "--identity=" + ios_code_signing_identity, 265*6777b538SAndroid Build Coastguard Worker "--output=" + rebase_path(_codesign_output_path, root_build_dir), 266*6777b538SAndroid Build Coastguard Worker "{{source}}", 267*6777b538SAndroid Build Coastguard Worker ] 268*6777b538SAndroid Build Coastguard Worker deps = _dep_list 269*6777b538SAndroid Build Coastguard Worker } 270*6777b538SAndroid Build Coastguard Worker _bundle_data_name = target_name + "_bundle_data_" + _deps_type_label 271*6777b538SAndroid Build Coastguard Worker bundle_data(_bundle_data_name) { 272*6777b538SAndroid Build Coastguard Worker testonly = true 273*6777b538SAndroid Build Coastguard Worker sources = get_target_outputs(":${_codesign_action_name}") 274*6777b538SAndroid Build Coastguard Worker outputs = [ "{{bundle_executable_dir}}/{{source_file_part}}" ] 275*6777b538SAndroid Build Coastguard Worker public_deps = [ ":${_codesign_action_name}" ] 276*6777b538SAndroid Build Coastguard Worker } 277*6777b538SAndroid Build Coastguard Worker if (_deps_type_label == "test_deps") { 278*6777b538SAndroid Build Coastguard Worker test_deps += [ ":${_bundle_data_name}" ] 279*6777b538SAndroid Build Coastguard Worker } else { 280*6777b538SAndroid Build Coastguard Worker test_data_deps += [ ":${_bundle_data_name}" ] 281*6777b538SAndroid Build Coastguard Worker } 282*6777b538SAndroid Build Coastguard Worker } 283*6777b538SAndroid Build Coastguard Worker } 284*6777b538SAndroid Build Coastguard Worker } else { 285*6777b538SAndroid Build Coastguard Worker test_deps += supporting_file_test_deps 286*6777b538SAndroid Build Coastguard Worker test_data_deps += supporting_file_test_data_deps 287*6777b538SAndroid Build Coastguard Worker } 288*6777b538SAndroid Build Coastguard Worker 289*6777b538SAndroid Build Coastguard Worker test(target_name) { 290*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 291*6777b538SAndroid Build Coastguard Worker [ 292*6777b538SAndroid Build Coastguard Worker "cflags", 293*6777b538SAndroid Build Coastguard Worker "cflags_cc", 294*6777b538SAndroid Build Coastguard Worker "check_includes", 295*6777b538SAndroid Build Coastguard Worker "defines", 296*6777b538SAndroid Build Coastguard Worker "include_dirs", 297*6777b538SAndroid Build Coastguard Worker "output_name", 298*6777b538SAndroid Build Coastguard Worker "sources", 299*6777b538SAndroid Build Coastguard Worker "libs", 300*6777b538SAndroid Build Coastguard Worker "frameworks", 301*6777b538SAndroid Build Coastguard Worker ]) 302*6777b538SAndroid Build Coastguard Worker deps = test_deps 303*6777b538SAndroid Build Coastguard Worker data_deps = test_data_deps 304*6777b538SAndroid Build Coastguard Worker 305*6777b538SAndroid Build Coastguard Worker if (defined(invoker.additional_configs)) { 306*6777b538SAndroid Build Coastguard Worker configs += invoker.additional_configs 307*6777b538SAndroid Build Coastguard Worker } 308*6777b538SAndroid Build Coastguard Worker configs += [ "//testing/libfuzzer:fuzzer_test_config" ] 309*6777b538SAndroid Build Coastguard Worker 310*6777b538SAndroid Build Coastguard Worker # Used by WebRTC to suppress some Clang warnings in their codebase. 311*6777b538SAndroid Build Coastguard Worker if (defined(invoker.suppressed_configs)) { 312*6777b538SAndroid Build Coastguard Worker configs -= invoker.suppressed_configs 313*6777b538SAndroid Build Coastguard Worker } 314*6777b538SAndroid Build Coastguard Worker 315*6777b538SAndroid Build Coastguard Worker if (defined(invoker.generated_sources)) { 316*6777b538SAndroid Build Coastguard Worker sources += invoker.generated_sources 317*6777b538SAndroid Build Coastguard Worker } 318*6777b538SAndroid Build Coastguard Worker 319*6777b538SAndroid Build Coastguard Worker if (is_ios) { 320*6777b538SAndroid Build Coastguard Worker info_plist = 321*6777b538SAndroid Build Coastguard Worker "//testing/libfuzzer/fuzzer_support_ios/fuzzer-engine-Info.plist" 322*6777b538SAndroid Build Coastguard Worker } 323*6777b538SAndroid Build Coastguard Worker 324*6777b538SAndroid Build Coastguard Worker if (is_mac) { 325*6777b538SAndroid Build Coastguard Worker sources += [ "//testing/libfuzzer/libfuzzer_exports.h" ] 326*6777b538SAndroid Build Coastguard Worker } 327*6777b538SAndroid Build Coastguard Worker } 328*6777b538SAndroid Build Coastguard Worker } else { 329*6777b538SAndroid Build Coastguard Worker # noop on unsupported platforms. 330*6777b538SAndroid Build Coastguard Worker # mark attributes as used. 331*6777b538SAndroid Build Coastguard Worker not_needed(invoker, "*") 332*6777b538SAndroid Build Coastguard Worker not_needed(invoker, 333*6777b538SAndroid Build Coastguard Worker [ 334*6777b538SAndroid Build Coastguard Worker "deps", 335*6777b538SAndroid Build Coastguard Worker "seed_corpus", 336*6777b538SAndroid Build Coastguard Worker "sources", 337*6777b538SAndroid Build Coastguard Worker ]) 338*6777b538SAndroid Build Coastguard Worker 339*6777b538SAndroid Build Coastguard Worker group(target_name) { 340*6777b538SAndroid Build Coastguard Worker } 341*6777b538SAndroid Build Coastguard Worker } 342*6777b538SAndroid Build Coastguard Worker} 343