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

libtint_source_set("sem") {
  sources = [
    "accessor_expression.cc",
    "accessor_expression.h",
    "array.cc",
    "array.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") {
    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",
    ]
  }
}
