# Copyright 2022 The Dawn & Tint Authors
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this
#    list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice,
#    this list of conditions and the following disclaimer in the documentation
#    and/or other materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its
#    contributors may be used to endorse or promote products derived from
#    this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

import("//build_overrides/build.gni")
import("../../../../scripts/tint_overrides_with_defaults.gni")

if (build_with_chromium) {
  import("//third_party/protobuf/proto_library.gni")
  import("../../../../scripts/dawn_overrides_with_defaults.gni")

  proto_library("tint_ast_fuzzer_proto") {
    sources = [ "protobufs/tint_ast_fuzzer.proto" ]
    generate_python = false
    use_protobuf_full = true
  }

  source_set("tint_ast_fuzzer") {
    public_configs = [
      "${tint_src_dir}:tint_config",
      "${tint_src_dir}:tint_common_config",
    ]

    include_dirs = [ "${target_gen_dir}/../../../.." ]

    deps = [
      ":tint_ast_fuzzer_proto",
      "${tint_src_dir}/fuzzers:tint_fuzzer_common_src",
      "${tint_src_dir}/lang/core",
      "${tint_src_dir}/lang/wgsl/ast",
      "${tint_src_dir}/lang/wgsl/program",
      "${tint_src_dir}/lang/wgsl/resolver",
      "${tint_src_dir}/lang/wgsl/sem",
      "${tint_src_dir}/utils/rtti",
      "//third_party/protobuf:protobuf_full",
    ]

    sources = [
      "cli.cc",
      "cli.h",
      "expression_size.cc",
      "expression_size.h",
      "fuzzer.cc",
      "jump_tracker.cc",
      "jump_tracker.h",
      "mutation.cc",
      "mutation.h",
      "mutation_finder.cc",
      "mutation_finder.h",
      "mutation_finders/change_binary_operators.cc",
      "mutation_finders/change_binary_operators.h",
      "mutation_finders/change_unary_operators.cc",
      "mutation_finders/change_unary_operators.h",
      "mutation_finders/delete_statements.cc",
      "mutation_finders/delete_statements.h",
      "mutation_finders/replace_identifiers.cc",
      "mutation_finders/replace_identifiers.h",
      "mutation_finders/wrap_unary_operators.cc",
      "mutation_finders/wrap_unary_operators.h",
      "mutations/change_binary_operator.cc",
      "mutations/change_binary_operator.h",
      "mutations/change_unary_operator.cc",
      "mutations/change_unary_operator.h",
      "mutations/delete_statement.cc",
      "mutations/delete_statement.h",
      "mutations/replace_identifier.cc",
      "mutations/replace_identifier.h",
      "mutations/wrap_unary_operator.cc",
      "mutations/wrap_unary_operator.h",
      "mutator.cc",
      "mutator.h",
      "node_id_map.cc",
      "node_id_map.h",
      "override_cli_params.h",
      "probability_context.cc",
      "probability_context.h",
      "protobufs/tint_ast_fuzzer.h",
      "util.h",
    ]
  }
}
