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

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

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

libtint_source_set("api") {
  sources = [
    "tint.cc",
    "tint.h",
  ]
  deps = [
    "${tint_src_dir}/api/common",
    "${tint_src_dir}/api/options",
    "${tint_src_dir}/lang/core",
    "${tint_src_dir}/lang/core/constant",
    "${tint_src_dir}/lang/core/type",
    "${tint_src_dir}/lang/hlsl/writer/common",
    "${tint_src_dir}/lang/spirv/reader/common",
    "${tint_src_dir}/lang/wgsl/ast",
    "${tint_src_dir}/lang/wgsl/program",
    "${tint_src_dir}/lang/wgsl/reader",
    "${tint_src_dir}/lang/wgsl/sem",
    "${tint_src_dir}/lang/wgsl/writer",
    "${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_glsl_writer) {
    deps += [
      "${tint_src_dir}/lang/glsl/writer",
      "${tint_src_dir}/lang/glsl/writer/common",
    ]
  }

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

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

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

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