# 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
    deps = [ "${dawn_root}/generator:remove_stale_autogen_files" ]
  }

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