# Copyright 2021 The 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")

# Fuzzers - Libfuzzer based fuzzing targets for Chromium
# To run the fuzzers outside of Chromium, use the CMake based builds.

if (build_with_chromium) {
  import("//testing/libfuzzer/fuzzer_test.gni")

  fuzzer_corpus_wgsl_dir = "${target_gen_dir}/fuzzer_corpus_wgsl"
  action("tint_generate_wgsl_corpus") {
    script = "generate_wgsl_corpus.py"
    sources = [ "generate_wgsl_corpus.py" ]
    args = [
      rebase_path("${tint_root_dir}/test", root_build_dir),
      rebase_path(fuzzer_corpus_wgsl_dir, root_build_dir),
    ]
    outputs = [ fuzzer_corpus_wgsl_dir ]
  }

  tint_fuzzer_common_libfuzzer_options = [
    "only_ascii=1",
    "max_len=10000",
  ]

  tint_ast_fuzzer_common_libfuzzer_options =
      tint_fuzzer_common_libfuzzer_options + [
        "cross_over=0",
        "mutate_depth=1",
        "tint_enable_all_mutations=false",
        "tint_mutation_batch_size=5",
      ]

  tint_regex_fuzzer_common_libfuzzer_options =
      tint_fuzzer_common_libfuzzer_options + [
        "cross_over=0",
        "mutate_depth=1",
      ]

  # fuzzer_test doesn't have configs members, so need to define them in an empty
  # source_set.

  source_set("tint_fuzzer_common_src") {
    public_configs = [
      "${tint_root_dir}/src/tint:tint_config",
      "${tint_root_dir}/src/tint:tint_common_config",
    ]

    public_deps = [
      "${tint_root_dir}/src/tint:libtint",
      "${tint_spirv_tools_dir}/:spvtools_val",
    ]

    sources = [
      "data_builder.h",
      "mersenne_twister_engine.cc",
      "mersenne_twister_engine.h",
      "random_generator.cc",
      "random_generator.h",
      "random_generator_engine.cc",
      "random_generator_engine.h",
      "shuffle_transform.cc",
      "shuffle_transform.h",
      "tint_common_fuzzer.cc",
      "tint_common_fuzzer.h",
      "tint_reader_writer_fuzzer.h",
      "transform_builder.h",
    ]
  }

  source_set("tint_fuzzer_common_with_init_src") {
    public_deps = [ ":tint_fuzzer_common_src" ]

    sources = [
      "cli.cc",
      "cli.h",
      "fuzzer_init.cc",
      "fuzzer_init.h",
    ]
  }

  if (tint_build_wgsl_reader && tint_build_wgsl_writer) {
    fuzzer_test("tint_ast_clone_fuzzer") {
      sources = [ "tint_ast_clone_fuzzer.cc" ]
      deps = [ ":tint_fuzzer_common_with_init_src" ]
      dict = "dictionary.txt"
      libfuzzer_options = tint_fuzzer_common_libfuzzer_options
      seed_corpus = fuzzer_corpus_wgsl_dir
      seed_corpus_deps = [ ":tint_generate_wgsl_corpus" ]
    }

    fuzzer_test("tint_ast_wgsl_writer_fuzzer") {
      sources = [ "tint_ast_fuzzer/tint_ast_wgsl_writer_fuzzer.cc" ]
      deps = [ "tint_ast_fuzzer:tint_ast_fuzzer" ]
      libfuzzer_options = tint_ast_fuzzer_common_libfuzzer_options
      seed_corpus = fuzzer_corpus_wgsl_dir
      seed_corpus_deps = [ ":tint_generate_wgsl_corpus" ]
    }

    fuzzer_test("tint_regex_wgsl_writer_fuzzer") {
      sources = [ "tint_regex_fuzzer/tint_regex_wgsl_writer_fuzzer.cc" ]
      deps = [ "tint_regex_fuzzer:tint_regex_fuzzer" ]
      libfuzzer_options = tint_regex_fuzzer_common_libfuzzer_options
      seed_corpus = fuzzer_corpus_wgsl_dir
      seed_corpus_deps = [ ":tint_generate_wgsl_corpus" ]
    }

    fuzzer_test("tint_wgsl_reader_wgsl_writer_fuzzer") {
      sources = [ "tint_wgsl_reader_wgsl_writer_fuzzer.cc" ]
      deps = [ ":tint_fuzzer_common_with_init_src" ]
      dict = "dictionary.txt"
      libfuzzer_options = tint_fuzzer_common_libfuzzer_options
      seed_corpus = fuzzer_corpus_wgsl_dir
      seed_corpus_deps = [ ":tint_generate_wgsl_corpus" ]
    }
  }

  if (tint_build_wgsl_reader && tint_build_spv_writer) {
    fuzzer_test("tint_all_transforms_fuzzer") {
      sources = [ "tint_all_transforms_fuzzer.cc" ]
      deps = [ ":tint_fuzzer_common_with_init_src" ]
      dict = "dictionary.txt"
      libfuzzer_options = tint_fuzzer_common_libfuzzer_options
      seed_corpus = fuzzer_corpus_wgsl_dir
      seed_corpus_deps = [ ":tint_generate_wgsl_corpus" ]
    }

    fuzzer_test("tint_ast_spv_writer_fuzzer") {
      sources = [ "tint_ast_fuzzer/tint_ast_spv_writer_fuzzer.cc" ]
      deps = [ "tint_ast_fuzzer:tint_ast_fuzzer" ]
      libfuzzer_options = tint_ast_fuzzer_common_libfuzzer_options
      seed_corpus = fuzzer_corpus_wgsl_dir
      seed_corpus_deps = [ ":tint_generate_wgsl_corpus" ]
    }

    fuzzer_test("tint_binding_remapper_fuzzer") {
      sources = [ "tint_binding_remapper_fuzzer.cc" ]
      deps = [ ":tint_fuzzer_common_with_init_src" ]
      dict = "dictionary.txt"
      libfuzzer_options = tint_fuzzer_common_libfuzzer_options
      seed_corpus = fuzzer_corpus_wgsl_dir
      seed_corpus_deps = [ ":tint_generate_wgsl_corpus" ]
    }

    fuzzer_test("tint_first_index_offset_fuzzer") {
      sources = [ "tint_first_index_offset_fuzzer.cc" ]
      deps = [ ":tint_fuzzer_common_with_init_src" ]
      dict = "dictionary.txt"
      libfuzzer_options = tint_fuzzer_common_libfuzzer_options
      seed_corpus = fuzzer_corpus_wgsl_dir
      seed_corpus_deps = [ ":tint_generate_wgsl_corpus" ]
    }

    fuzzer_test("tint_regex_spv_writer_fuzzer") {
      sources = [ "tint_regex_fuzzer/tint_regex_spv_writer_fuzzer.cc" ]
      deps = [ "tint_regex_fuzzer:tint_regex_fuzzer" ]
      libfuzzer_options = tint_regex_fuzzer_common_libfuzzer_options
      seed_corpus = fuzzer_corpus_wgsl_dir
      seed_corpus_deps = [ ":tint_generate_wgsl_corpus" ]
    }

    fuzzer_test("tint_renamer_fuzzer") {
      sources = [ "tint_renamer_fuzzer.cc" ]
      deps = [ ":tint_fuzzer_common_with_init_src" ]
      dict = "dictionary.txt"
      libfuzzer_options = tint_fuzzer_common_libfuzzer_options
      seed_corpus = fuzzer_corpus_wgsl_dir
      seed_corpus_deps = [ ":tint_generate_wgsl_corpus" ]
    }

    fuzzer_test("tint_robustness_fuzzer") {
      sources = [ "tint_robustness_fuzzer.cc" ]
      deps = [ ":tint_fuzzer_common_with_init_src" ]
      dict = "dictionary.txt"
      libfuzzer_options = tint_fuzzer_common_libfuzzer_options
      seed_corpus = fuzzer_corpus_wgsl_dir
      seed_corpus_deps = [ ":tint_generate_wgsl_corpus" ]
    }

    fuzzer_test("tint_single_entry_point_fuzzer") {
      sources = [ "tint_single_entry_point_fuzzer.cc" ]
      deps = [ ":tint_fuzzer_common_with_init_src" ]
      dict = "dictionary.txt"
      libfuzzer_options = tint_fuzzer_common_libfuzzer_options
      seed_corpus = fuzzer_corpus_wgsl_dir
      seed_corpus_deps = [ ":tint_generate_wgsl_corpus" ]
    }

    fuzzer_test("tint_vertex_pulling_fuzzer") {
      sources = [ "tint_vertex_pulling_fuzzer.cc" ]
      deps = [ ":tint_fuzzer_common_with_init_src" ]
      dict = "dictionary.txt"
      libfuzzer_options = tint_fuzzer_common_libfuzzer_options
      seed_corpus = fuzzer_corpus_wgsl_dir
      seed_corpus_deps = [ ":tint_generate_wgsl_corpus" ]
    }

    fuzzer_test("tint_wgsl_reader_spv_writer_fuzzer") {
      sources = [ "tint_wgsl_reader_spv_writer_fuzzer.cc" ]
      deps = [ ":tint_fuzzer_common_with_init_src" ]
      dict = "dictionary.txt"
      libfuzzer_options = tint_fuzzer_common_libfuzzer_options
      seed_corpus = fuzzer_corpus_wgsl_dir
      seed_corpus_deps = [ ":tint_generate_wgsl_corpus" ]
    }
  }

  if (tint_build_wgsl_reader && tint_build_hlsl_writer) {
    fuzzer_test("tint_ast_hlsl_writer_fuzzer") {
      sources = [ "tint_ast_fuzzer/tint_ast_hlsl_writer_fuzzer.cc" ]
      deps = [ "tint_ast_fuzzer:tint_ast_fuzzer" ]
      libfuzzer_options = tint_ast_fuzzer_common_libfuzzer_options
      seed_corpus = fuzzer_corpus_wgsl_dir
      seed_corpus_deps = [ ":tint_generate_wgsl_corpus" ]
    }

    fuzzer_test("tint_regex_hlsl_writer_fuzzer") {
      sources = [ "tint_regex_fuzzer/tint_regex_hlsl_writer_fuzzer.cc" ]
      deps = [ "tint_regex_fuzzer:tint_regex_fuzzer" ]
      libfuzzer_options = tint_regex_fuzzer_common_libfuzzer_options
      seed_corpus = fuzzer_corpus_wgsl_dir
      seed_corpus_deps = [ ":tint_generate_wgsl_corpus" ]
    }

    fuzzer_test("tint_wgsl_reader_hlsl_writer_fuzzer") {
      sources = [ "tint_wgsl_reader_hlsl_writer_fuzzer.cc" ]
      deps = [ ":tint_fuzzer_common_with_init_src" ]
      dict = "dictionary.txt"
      libfuzzer_options = tint_fuzzer_common_libfuzzer_options
      seed_corpus = fuzzer_corpus_wgsl_dir
      seed_corpus_deps = [ ":tint_generate_wgsl_corpus" ]
    }
  }

  if (tint_build_wgsl_reader && tint_build_msl_writer) {
    fuzzer_test("tint_ast_msl_writer_fuzzer") {
      sources = [ "tint_ast_fuzzer/tint_ast_msl_writer_fuzzer.cc" ]
      deps = [ "tint_ast_fuzzer:tint_ast_fuzzer" ]
      libfuzzer_options = tint_ast_fuzzer_common_libfuzzer_options
      seed_corpus = fuzzer_corpus_wgsl_dir
      seed_corpus_deps = [ ":tint_generate_wgsl_corpus" ]
    }

    fuzzer_test("tint_regex_msl_writer_fuzzer") {
      sources = [ "tint_regex_fuzzer/tint_regex_msl_writer_fuzzer.cc" ]
      deps = [ "tint_regex_fuzzer:tint_regex_fuzzer" ]
      libfuzzer_options = tint_regex_fuzzer_common_libfuzzer_options
      seed_corpus = fuzzer_corpus_wgsl_dir
      seed_corpus_deps = [ ":tint_generate_wgsl_corpus" ]
    }

    fuzzer_test("tint_wgsl_reader_msl_writer_fuzzer") {
      sources = [ "tint_wgsl_reader_msl_writer_fuzzer.cc" ]
      deps = [ ":tint_fuzzer_common_with_init_src" ]
      dict = "dictionary.txt"
      libfuzzer_options = tint_fuzzer_common_libfuzzer_options
      seed_corpus = fuzzer_corpus_wgsl_dir
      seed_corpus_deps = [ ":tint_generate_wgsl_corpus" ]
    }
  }

  if (tint_build_wgsl_reader && tint_build_hlsl_writer &&
      tint_build_msl_writer && tint_build_spv_writer &&
      tint_build_wgsl_writer) {
    executable("tint_black_box_fuzz_target") {
      sources = [ "tint_black_box_fuzz_target.cc" ]
      deps = [ ":tint_fuzzer_common_src" ]
    }
  }

  group("fuzzers") {
    testonly = true
    deps = []

    if (tint_build_wgsl_reader && tint_build_wgsl_writer) {
      deps += [
        ":tint_ast_clone_fuzzer",
        ":tint_ast_wgsl_writer_fuzzer",
        ":tint_regex_wgsl_writer_fuzzer",
        ":tint_wgsl_reader_wgsl_writer_fuzzer",
      ]
    }
    if (tint_build_wgsl_reader && tint_build_spv_writer) {
      deps += [
        ":tint_all_transforms_fuzzer",
        ":tint_ast_spv_writer_fuzzer",
        ":tint_binding_remapper_fuzzer",
        ":tint_first_index_offset_fuzzer",
        ":tint_regex_spv_writer_fuzzer",
        ":tint_renamer_fuzzer",
        ":tint_robustness_fuzzer",
        ":tint_single_entry_point_fuzzer",
        ":tint_vertex_pulling_fuzzer",
        ":tint_wgsl_reader_spv_writer_fuzzer",
      ]
    }
    if (tint_build_wgsl_reader && tint_build_hlsl_writer) {
      deps += [
        ":tint_ast_hlsl_writer_fuzzer",
        ":tint_regex_hlsl_writer_fuzzer",
        ":tint_wgsl_reader_hlsl_writer_fuzzer",
      ]
    }
    if (tint_build_wgsl_reader && tint_build_msl_writer) {
      deps += [
        ":tint_ast_msl_writer_fuzzer",
        ":tint_regex_msl_writer_fuzzer",
        ":tint_wgsl_reader_msl_writer_fuzzer",
      ]
    }
    if (tint_build_wgsl_reader && tint_build_hlsl_writer &&
        tint_build_msl_writer && tint_build_spv_writer &&
        tint_build_wgsl_writer) {
      deps += [ ":tint_black_box_fuzz_target" ]
    }
  }
} else {
  group("fuzzers") {
  }
}
