# 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.cmake.tmpl
#
# Do not modify this file directly
################################################################################

tint_add_target("cmd/bench"
  cmd/bench/bench.h
  cmd/bench/benchmark.cc
)

tint_target_add_dependencies("cmd/bench"
  "lang/wgsl/program"
  "utils/macros"
)

tint_add_target("cmd/bench:bench"
  cmd/bench/main_bench.cc
)

tint_target_add_dependencies("cmd/bench:bench"
  "cmd/bench"
  "lang/core:bench"
  "lang/wgsl/reader"
  "lang/wgsl/reader:bench"
  "lang/wgsl/writer"
  "lang/wgsl/writer:bench"
  "utils/rtti:bench"
  "utils/text"
)

if (TINT_BUILD_GLSL_WRITER)
  tint_target_add_dependencies("cmd/bench:bench"
    "lang/glsl/writer:bench"
  )
endif(TINT_BUILD_GLSL_WRITER)

if (TINT_BUILD_HLSL_WRITER)
  tint_target_add_dependencies("cmd/bench:bench"
    "lang/hlsl/writer:bench"
  )
endif(TINT_BUILD_HLSL_WRITER)

if (TINT_BUILD_MSL_WRITER)
  tint_target_add_dependencies("cmd/bench:bench"
    "lang/msl/writer:bench"
  )
endif(TINT_BUILD_MSL_WRITER)

if (TINT_BUILD_SPV_READER)
  tint_target_add_dependencies("cmd/bench:bench"
    "lang/spirv/reader"
  )
endif(TINT_BUILD_SPV_READER)

if (TINT_BUILD_SPV_WRITER)
  tint_target_add_dependencies("cmd/bench:bench"
    "lang/spirv/writer:bench"
  )
endif(TINT_BUILD_SPV_WRITER)
