# 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",
    "resolve.cc",
    "resolver.cc",
    "sem_helper.cc",
    "uniformity.cc",
    "validator.cc",
  ],
  hdrs = [
    "dependency_graph.h",
    "resolve.h",
    "resolver.h",
    "sem_helper.h",
    "uniformity.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",
    "uniformity_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",
  ],
  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/reader",
    "//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",
  ],
  copts = COPTS,
  visibility = ["//visibility:public"],
)

