# Copyright 2019 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/fuzzing/fuzzer.gni")

group("fuzzers") {
  testonly = true
  deps = [ ":tests" ]
}

# This target is the same as the one above; whether fuzzers or unit tests are built depends on which
# toolchain variant is active. Typically, you should include fuzzers in your package's tests.
group("tests") {
  testonly = true
  deps = [
    ":fuzzing-examples",
    "rust:toy-example",
  ]
}

fuzzers_package("fuzzing-examples") {
  # Packages can have non-default names.
  package_name = "example-fuzzers"

  # Variables set in the outer scope apply to all fuzzers.
  fuzz_host = true

  # `fuzzers` (without a language prefix) are folded into `cpp_fuzzers` below.
  fuzzers = [ "cpp:crash_fuzzer" ]

  # Fuzzers are defined for each supported language
  cpp_fuzzers = [
    # Each list of fuzzers can contain simple labels...
    "cpp:overflow_fuzzer",
    "cpp:corpus_fuzzer",
    "cpp:corpus_fuzzer_without_corpus",
    "cpp:dictionary_fuzzer",
    "cpp:dictionary_fuzzer_without_dictionary",
    "cpp:fuzzed_data_provider_fuzzer",
    "cpp:noop_fuzzer",
    {
      # ... or scopes with additional fields, like a non-default output name.
      label = "cpp:oom_fuzzer"
      output_name = "out_of_memory_fuzzer"
    },
    {
      # Variables set here override those in the outer scope.
      label = "fidl:echo-fuzzer"
      fuzz_host = false
    },
  ]

  # A fuzzers package can have fuzzers for multiple languages.
  rust_fuzzers = [
    "rust:toy_example_arbitrary",
    "rust:toy_example_raw_bytes",
    "rust:toy_example_with_main",
  ]

  # TODO(fxbug.dev/91051): Go fuzzer tests flake.
  # go_fuzzers = [ "go:basic_fuzzer" ]
}
