# 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 = "transform",
  srcs = [
    "add_block_attribute.cc",
    "add_empty_entry_point.cc",
    "array_length_from_uniform.cc",
    "binding_remapper.cc",
    "builtin_polyfill.cc",
    "canonicalize_entry_point_io.cc",
    "data.cc",
    "demote_to_helper.cc",
    "direct_variable_access.cc",
    "disable_uniformity_analysis.cc",
    "expand_compound_assignment.cc",
    "first_index_offset.cc",
    "get_insertion_point.cc",
    "hoist_to_decl_before.cc",
    "manager.cc",
    "multiplanar_external_texture.cc",
    "preserve_padding.cc",
    "promote_initializers_to_let.cc",
    "promote_side_effects_to_decl.cc",
    "remove_phonies.cc",
    "remove_unreachable_statements.cc",
    "renamer.cc",
    "robustness.cc",
    "simplify_pointers.cc",
    "single_entry_point.cc",
    "std140.cc",
    "substitute_override.cc",
    "transform.cc",
    "unshadow.cc",
    "vectorize_scalar_matrix_initializers.cc",
    "vertex_pulling.cc",
    "zero_init_workgroup_memory.cc",
  ],
  hdrs = [
    "add_block_attribute.h",
    "add_empty_entry_point.h",
    "array_length_from_uniform.h",
    "binding_remapper.h",
    "builtin_polyfill.h",
    "canonicalize_entry_point_io.h",
    "data.h",
    "demote_to_helper.h",
    "direct_variable_access.h",
    "disable_uniformity_analysis.h",
    "expand_compound_assignment.h",
    "first_index_offset.h",
    "get_insertion_point.h",
    "hoist_to_decl_before.h",
    "manager.h",
    "multiplanar_external_texture.h",
    "preserve_padding.h",
    "promote_initializers_to_let.h",
    "promote_side_effects_to_decl.h",
    "remove_phonies.h",
    "remove_unreachable_statements.h",
    "renamer.h",
    "robustness.h",
    "simplify_pointers.h",
    "single_entry_point.h",
    "std140.h",
    "substitute_override.h",
    "transform.h",
    "unshadow.h",
    "vectorize_scalar_matrix_initializers.h",
    "vertex_pulling.h",
    "zero_init_workgroup_memory.h",
  ],
  deps = [
    "//src/tint/api/common",
    "//src/tint/api/options",
    "//src/tint/lang/core",
    "//src/tint/lang/core/constant",
    "//src/tint/lang/core/type",
    "//src/tint/lang/wgsl",
    "//src/tint/lang/wgsl/ast",
    "//src/tint/lang/wgsl/program",
    "//src/tint/lang/wgsl/resolver",
    "//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 = [
    "add_block_attribute_test.cc",
    "add_empty_entry_point_test.cc",
    "array_length_from_uniform_test.cc",
    "binding_remapper_test.cc",
    "builtin_polyfill_test.cc",
    "canonicalize_entry_point_io_test.cc",
    "demote_to_helper_test.cc",
    "direct_variable_access_test.cc",
    "disable_uniformity_analysis_test.cc",
    "expand_compound_assignment_test.cc",
    "first_index_offset_test.cc",
    "get_insertion_point_test.cc",
    "helper_test.h",
    "hoist_to_decl_before_test.cc",
    "manager_test.cc",
    "multiplanar_external_texture_test.cc",
    "preserve_padding_test.cc",
    "promote_initializers_to_let_test.cc",
    "promote_side_effects_to_decl_test.cc",
    "remove_phonies_test.cc",
    "remove_unreachable_statements_test.cc",
    "renamer_test.cc",
    "robustness_test.cc",
    "simplify_pointers_test.cc",
    "single_entry_point_test.cc",
    "std140_exhaustive_test.cc",
    "std140_f16_test.cc",
    "std140_f32_test.cc",
    "std140_test.cc",
    "substitute_override_test.cc",
    "transform_test.cc",
    "unshadow_test.cc",
    "vectorize_scalar_matrix_initializers_test.cc",
    "vertex_pulling_test.cc",
    "zero_init_workgroup_memory_test.cc",
  ],
  deps = [
    "//src/tint/api/common",
    "//src/tint/api/options",
    "//src/tint/lang/core",
    "//src/tint/lang/core/constant",
    "//src/tint/lang/core/ir",
    "//src/tint/lang/core/type",
    "//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/writer",
    "//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"],
)

