# 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/intrinsic/data",
    "//src/tint/lang/core/type",
    "//src/tint/lang/wgsl",
    "//src/tint/lang/wgsl/ast",
    "//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/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"],
)

