# 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) {
  import("//testing/test.gni")
}

libtint_source_set("sem") {
  sources = [
    "accessor_expression.cc",
    "accessor_expression.h",
    "array_count.cc",
    "array_count.h",
    "behavior.cc",
    "behavior.h",
    "block_statement.cc",
    "block_statement.h",
    "break_if_statement.cc",
    "break_if_statement.h",
    "builtin_enum_expression.cc",
    "builtin_enum_expression.h",
    "builtin_fn.cc",
    "builtin_fn.h",
    "call.cc",
    "call.h",
    "call_target.cc",
    "call_target.h",
    "expression.cc",
    "expression.h",
    "for_loop_statement.cc",
    "for_loop_statement.h",
    "function.cc",
    "function.h",
    "function_expression.cc",
    "function_expression.h",
    "if_statement.cc",
    "if_statement.h",
    "index_accessor_expression.cc",
    "index_accessor_expression.h",
    "info.cc",
    "info.h",
    "load.cc",
    "load.h",
    "loop_statement.cc",
    "loop_statement.h",
    "materialize.cc",
    "materialize.h",
    "member_accessor_expression.cc",
    "member_accessor_expression.h",
    "module.cc",
    "module.h",
    "node.cc",
    "node.h",
    "pipeline_stage_set.h",
    "sampler_texture_pair.h",
    "statement.cc",
    "statement.h",
    "struct.cc",
    "struct.h",
    "switch_statement.cc",
    "switch_statement.h",
    "type_expression.cc",
    "type_expression.h",
    "type_mappings.h",
    "value_constructor.cc",
    "value_constructor.h",
    "value_conversion.cc",
    "value_conversion.h",
    "value_expression.cc",
    "value_expression.h",
    "variable.cc",
    "variable.h",
    "while_statement.cc",
    "while_statement.h",
  ]
  deps = [
    "${tint_src_dir}/api/common",
    "${tint_src_dir}/lang/core",
    "${tint_src_dir}/lang/core/constant",
    "${tint_src_dir}/lang/core/type",
    "${tint_src_dir}/lang/wgsl",
    "${tint_src_dir}/lang/wgsl/ast",
    "${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_unittests) {
  tint_unittests_source_set("unittests") {
    testonly = true
    sources = [
      "builtin_fn_test.cc",
      "diagnostic_severity_test.cc",
      "helper_test.h",
      "struct_test.cc",
      "value_expression_test.cc",
    ]
    deps = [
      "${tint_src_dir}:gmock_and_gtest",
      "${tint_src_dir}/api/common",
      "${tint_src_dir}/lang/core",
      "${tint_src_dir}/lang/core/constant",
      "${tint_src_dir}/lang/core/type",
      "${tint_src_dir}/lang/wgsl",
      "${tint_src_dir}/lang/wgsl/ast",
      "${tint_src_dir}/lang/wgsl/program",
      "${tint_src_dir}/lang/wgsl/resolver",
      "${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",
    ]
  }
}
