# 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")

  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",
      "mutation.cc",
      "mutation.h",
      "mutation_finder.cc",
      "mutation_finder.h",
      "mutation_finders/change_binary_operators.cc",
      "mutation_finders/change_binary_operators.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/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",
    ]
  }
}
