# 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")

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.cc",
    "builtin.h",
    "builtin_enum_expression.cc",
    "builtin_enum_expression.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/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_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/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",
    ]
  }
}
