# 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.bazel.tmpl
#
# To regenerate run: './tools/run gen'
#
#                       Do not modify this file directly
################################################################################

load("//src/tint:flags.bzl", "COPTS")
load("@bazel_skylib//lib:selects.bzl", "selects")
cc_library(
  name = "resolver",
  srcs = [
    "dependency_graph.cc",
    "incomplete_type.cc",
    "resolve.cc",
    "resolver.cc",
    "sem_helper.cc",
    "uniformity.cc",
    "unresolved_identifier.cc",
    "validator.cc",
  ],
  hdrs = [
    "dependency_graph.h",
    "incomplete_type.h",
    "resolve.h",
    "resolver.h",
    "sem_helper.h",
    "uniformity.h",
    "unresolved_identifier.h",
    "validator.h",
  ],
  deps = [
    "//src/tint/api/common",
    "//src/tint/lang/core",
    "//src/tint/lang/core/constant",
    "//src/tint/lang/core/intrinsic",
    "//src/tint/lang/core/type",
    "//src/tint/lang/wgsl",
    "//src/tint/lang/wgsl/ast",
    "//src/tint/lang/wgsl/intrinsic",
    "//src/tint/lang/wgsl/program",
    "//src/tint/lang/wgsl/sem",
    "//src/tint/utils/containers",
    "//src/tint/utils/diagnostic",
    "//src/tint/utils/ice",
    "//src/tint/utils/id",
    "//src/tint/utils/macros",
    "//src/tint/utils/math",
    "//src/tint/utils/memory",
    "//src/tint/utils/reflection",
    "//src/tint/utils/result",
    "//src/tint/utils/rtti",
    "//src/tint/utils/symbol",
    "//src/tint/utils/text",
    "//src/tint/utils/traits",
  ],
  copts = COPTS,
  visibility = ["//visibility:public"],
)
cc_library(
  name = "test",
  alwayslink = True,
  srcs = [
    "address_space_layout_validation_test.cc",
    "address_space_validation_test.cc",
    "alias_analysis_test.cc",
    "array_accessor_test.cc",
    "assignment_validation_test.cc",
    "atomics_test.cc",
    "atomics_validation_test.cc",
    "attribute_validation_test.cc",
    "bitcast_validation_test.cc",
    "builtin_enum_test.cc",
    "builtin_structs_test.cc",
    "builtin_test.cc",
    "builtin_validation_test.cc",
    "builtins_validation_test.cc",
    "call_test.cc",
    "call_validation_test.cc",
    "compound_assignment_validation_test.cc",
    "compound_statement_test.cc",
    "const_assert_test.cc",
    "control_block_validation_test.cc",
    "dependency_graph_test.cc",
    "diagnostic_control_test.cc",
    "dual_source_blending_extension_test.cc",
    "entry_point_validation_test.cc",
    "evaluation_stage_test.cc",
    "expression_kind_test.cc",
    "f16_extension_test.cc",
    "function_validation_test.cc",
    "host_shareable_validation_test.cc",
    "increment_decrement_validation_test.cc",
    "inferred_type_test.cc",
    "is_host_shareable_test.cc",
    "is_storeable_test.cc",
    "load_test.cc",
    "materialize_test.cc",
    "override_test.cc",
    "pixel_local_extension_test.cc",
    "ptr_ref_test.cc",
    "ptr_ref_validation_test.cc",
    "resolver_behavior_test.cc",
    "resolver_helper_test.cc",
    "resolver_helper_test.h",
    "resolver_test.cc",
    "root_identifier_test.cc",
    "side_effects_test.cc",
    "struct_address_space_use_test.cc",
    "struct_layout_test.cc",
    "struct_pipeline_stage_use_test.cc",
    "subgroups_extension_test.cc",
    "type_validation_test.cc",
    "unresolved_identifier_test.cc",
    "validation_test.cc",
    "validator_is_storeable_test.cc",
    "value_constructor_validation_test.cc",
    "variable_test.cc",
    "variable_validation_test.cc",
  ] + select({
    ":tint_build_wgsl_reader": [
      "uniformity_test.cc",
    ],
    "//conditions:default": [],
  }),
  deps = [
    "//src/tint/api/common",
    "//src/tint/lang/core",
    "//src/tint/lang/core/constant",
    "//src/tint/lang/core/intrinsic",
    "//src/tint/lang/core/ir",
    "//src/tint/lang/core/type",
    "//src/tint/lang/core/type:test",
    "//src/tint/lang/wgsl",
    "//src/tint/lang/wgsl/ast",
    "//src/tint/lang/wgsl/ast/transform",
    "//src/tint/lang/wgsl/ast:test",
    "//src/tint/lang/wgsl/intrinsic",
    "//src/tint/lang/wgsl/program",
    "//src/tint/lang/wgsl/resolver",
    "//src/tint/lang/wgsl/sem",
    "//src/tint/lang/wgsl/sem:test",
    "//src/tint/utils/containers",
    "//src/tint/utils/diagnostic",
    "//src/tint/utils/ice",
    "//src/tint/utils/id",
    "//src/tint/utils/macros",
    "//src/tint/utils/math",
    "//src/tint/utils/memory",
    "//src/tint/utils/reflection",
    "//src/tint/utils/result",
    "//src/tint/utils/rtti",
    "//src/tint/utils/symbol",
    "//src/tint/utils/text",
    "//src/tint/utils/traits",
    "@gtest",
  ] + select({
    ":tint_build_wgsl_reader": [
      "//src/tint/lang/wgsl/reader",
    ],
    "//conditions:default": [],
  }),
  copts = COPTS,
  visibility = ["//visibility:public"],
)

alias(
  name = "tint_build_wgsl_reader",
  actual = "//src/tint:tint_build_wgsl_reader_true",
)

