# 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("transform") {
  sources = [
    "add_block_attribute.cc",
    "add_block_attribute.h",
    "add_empty_entry_point.cc",
    "add_empty_entry_point.h",
    "array_length_from_uniform.cc",
    "array_length_from_uniform.h",
    "binding_remapper.cc",
    "binding_remapper.h",
    "builtin_polyfill.cc",
    "builtin_polyfill.h",
    "canonicalize_entry_point_io.cc",
    "canonicalize_entry_point_io.h",
    "data.cc",
    "data.h",
    "demote_to_helper.cc",
    "demote_to_helper.h",
    "direct_variable_access.cc",
    "direct_variable_access.h",
    "disable_uniformity_analysis.cc",
    "disable_uniformity_analysis.h",
    "expand_compound_assignment.cc",
    "expand_compound_assignment.h",
    "first_index_offset.cc",
    "first_index_offset.h",
    "get_insertion_point.cc",
    "get_insertion_point.h",
    "hoist_to_decl_before.cc",
    "hoist_to_decl_before.h",
    "manager.cc",
    "manager.h",
    "multiplanar_external_texture.cc",
    "multiplanar_external_texture.h",
    "preserve_padding.cc",
    "preserve_padding.h",
    "promote_initializers_to_let.cc",
    "promote_initializers_to_let.h",
    "promote_side_effects_to_decl.cc",
    "promote_side_effects_to_decl.h",
    "remove_phonies.cc",
    "remove_phonies.h",
    "remove_unreachable_statements.cc",
    "remove_unreachable_statements.h",
    "renamer.cc",
    "renamer.h",
    "robustness.cc",
    "robustness.h",
    "simplify_pointers.cc",
    "simplify_pointers.h",
    "single_entry_point.cc",
    "single_entry_point.h",
    "std140.cc",
    "std140.h",
    "substitute_override.cc",
    "substitute_override.h",
    "transform.cc",
    "transform.h",
    "unshadow.cc",
    "unshadow.h",
    "vectorize_scalar_matrix_initializers.cc",
    "vectorize_scalar_matrix_initializers.h",
    "vertex_pulling.cc",
    "vertex_pulling.h",
    "zero_init_workgroup_memory.cc",
    "zero_init_workgroup_memory.h",
  ]
  deps = [
    "${tint_src_dir}/api/common",
    "${tint_src_dir}/api/options",
    "${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",
  ]
}
if (tint_build_unittests) {
  if (tint_build_wgsl_reader && tint_build_wgsl_writer) {
    tint_unittests_source_set("unittests") {
      sources = [
        "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 = [
        "${tint_src_dir}:gmock_and_gtest",
        "${tint_src_dir}/api/common",
        "${tint_src_dir}/api/options",
        "${tint_src_dir}/lang/core",
        "${tint_src_dir}/lang/core/constant",
        "${tint_src_dir}/lang/core/ir",
        "${tint_src_dir}/lang/core/type",
        "${tint_src_dir}/lang/wgsl",
        "${tint_src_dir}/lang/wgsl/ast",
        "${tint_src_dir}/lang/wgsl/ast:unittests",
        "${tint_src_dir}/lang/wgsl/ast/transform",
        "${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",
      ]

      if (tint_build_wgsl_reader) {
        deps += [ "${tint_src_dir}/lang/wgsl/reader" ]
      }

      if (tint_build_wgsl_writer) {
        deps += [ "${tint_src_dir}/lang/wgsl/writer" ]
      }
    }
  }
}
