# Copyright 2023 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.

################################################################################
# File generated by 'tools/src/cmd/gen' using the template:
#   tools/src/cmd/gen/build/BUILD.gn.tmpl
#
# To regenerate run: './tools/run gen'
#
#                       Do not modify this file directly
################################################################################

import("../../../../scripts/tint_overrides_with_defaults.gni")

import("${tint_src_dir}/tint.gni")

if (tint_build_unittests || tint_build_benchmarks) {
  import("//testing/test.gni")
}
if (tint_build_benchmarks) {
  tint_unittests_source_set("bench") {
    sources = [
      "bench.cc",
      "bench.h",
    ]
    deps = [
      "${tint_src_dir}:google_benchmark",
      "${tint_src_dir}/api/common",
      "${tint_src_dir}/lang/core",
      "${tint_src_dir}/lang/core/constant",
      "${tint_src_dir}/lang/core/ir",
      "${tint_src_dir}/lang/core/type",
      "${tint_src_dir}/lang/spirv/reader/common",
      "${tint_src_dir}/lang/wgsl",
      "${tint_src_dir}/lang/wgsl/ast",
      "${tint_src_dir}/lang/wgsl/program",
      "${tint_src_dir}/lang/wgsl/sem",
      "${tint_src_dir}/utils/containers",
      "${tint_src_dir}/utils/diagnostic",
      "${tint_src_dir}/utils/ice",
      "${tint_src_dir}/utils/id",
      "${tint_src_dir}/utils/macros",
      "${tint_src_dir}/utils/math",
      "${tint_src_dir}/utils/memory",
      "${tint_src_dir}/utils/reflection",
      "${tint_src_dir}/utils/result",
      "${tint_src_dir}/utils/rtti",
      "${tint_src_dir}/utils/symbol",
      "${tint_src_dir}/utils/text",
      "${tint_src_dir}/utils/traits",
    ]

    if (tint_build_spv_reader) {
      deps += [ "${tint_src_dir}/lang/spirv/reader" ]
    }

    if (tint_build_wgsl_reader) {
      deps += [ "${tint_src_dir}/lang/wgsl/reader" ]
    }

    if (tint_build_wgsl_writer) {
      deps += [ "${tint_src_dir}/lang/wgsl/writer" ]
    }
  }
}
if (tint_build_benchmarks) {
  test("bench_cmd") {
    testonly = true
    output_name = "tint_benchmark"
    sources = [ "main_bench.cc" ]
    deps = [
      "${tint_src_dir}:google_benchmark",
      "${tint_src_dir}/cmd/bench:bench",
      "${tint_src_dir}/lang/core",
      "${tint_src_dir}/lang/core:bench",
      "${tint_src_dir}/lang/core/constant",
      "${tint_src_dir}/lang/core/type",
      "${tint_src_dir}/lang/wgsl",
      "${tint_src_dir}/lang/wgsl:bench",
      "${tint_src_dir}/lang/wgsl/ast",
      "${tint_src_dir}/lang/wgsl/program",
      "${tint_src_dir}/lang/wgsl/sem",
      "${tint_src_dir}/utils/containers",
      "${tint_src_dir}/utils/diagnostic",
      "${tint_src_dir}/utils/ice",
      "${tint_src_dir}/utils/id",
      "${tint_src_dir}/utils/macros",
      "${tint_src_dir}/utils/math",
      "${tint_src_dir}/utils/memory",
      "${tint_src_dir}/utils/result",
      "${tint_src_dir}/utils/rtti",
      "${tint_src_dir}/utils/rtti:bench",
      "${tint_src_dir}/utils/symbol",
      "${tint_src_dir}/utils/text",
      "${tint_src_dir}/utils/traits",
    ]

    if (tint_build_glsl_writer) {
      deps += [ "${tint_src_dir}/lang/glsl/writer:bench" ]
    }

    if (tint_build_hlsl_writer) {
      deps += [ "${tint_src_dir}/lang/hlsl/writer:bench" ]
    }

    if (tint_build_msl_writer) {
      deps += [ "${tint_src_dir}/lang/msl/writer:bench" ]
    }

    if (tint_build_spv_writer) {
      deps += [ "${tint_src_dir}/lang/spirv/writer:bench" ]
    }

    if (tint_build_wgsl_reader) {
      deps += [ "${tint_src_dir}/lang/wgsl/reader:bench" ]
    }

    if (tint_build_wgsl_writer) {
      deps += [ "${tint_src_dir}/lang/wgsl/writer:bench" ]
    }
  }
}
