# Copyright 2022 The Dawn & Tint Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

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",
    ]
  }
}
