# 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("../../../../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_root_dir}/src/tint:tint_config",
      "${tint_root_dir}/src/tint:tint_common_config",
    ]

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

    deps = [
      ":tint_ast_fuzzer_proto",
      "${tint_root_dir}/src/tint/fuzzers:tint_fuzzer_common_src",
      "//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",
    ]
  }
}
