# Copyright 2023 The Dawn & Tint Authors
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this
#    list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice,
#    this list of conditions and the following disclaimer in the documentation
#    and/or other materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its
#    contributors may be used to endorse or promote products derived from
#    this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

################################################################################
# File generated by 'tools/src/cmd/gen' using the template:
#   tools/src/cmd/gen/build/BUILD.cmake.tmpl
#
# To regenerate run: './tools/run gen'
#
#                       Do not modify this file directly
################################################################################

################################################################################
# Target:    tint_utils_containers
# Kind:      lib
################################################################################
tint_add_target(tint_utils_containers lib
  utils/containers/bitset.h
  utils/containers/const_propagating_ptr.h
  utils/containers/containers.cc
  utils/containers/enum_set.h
  utils/containers/filtered_iterator.h
  utils/containers/hashmap.h
  utils/containers/hashmap_base.h
  utils/containers/hashset.h
  utils/containers/map.h
  utils/containers/predicates.h
  utils/containers/reverse.h
  utils/containers/scope_stack.h
  utils/containers/slice.h
  utils/containers/transform.h
  utils/containers/unique_allocator.h
  utils/containers/unique_vector.h
  utils/containers/vector.h
)

tint_target_add_dependencies(tint_utils_containers lib
  tint_utils_ice
  tint_utils_macros
  tint_utils_math
  tint_utils_memory
  tint_utils_rtti
  tint_utils_traits
)

tint_target_add_external_dependencies(tint_utils_containers lib
  "src_utils"
)

################################################################################
# Target:    tint_utils_containers_test
# Kind:      test
################################################################################
tint_add_target(tint_utils_containers_test test
  utils/containers/bitset_test.cc
  utils/containers/enum_set_test.cc
  utils/containers/filtered_iterator_test.cc
  utils/containers/hashmap_test.cc
  utils/containers/hashset_test.cc
  utils/containers/map_test.cc
  utils/containers/predicates_test.cc
  utils/containers/reverse_test.cc
  utils/containers/scope_stack_test.cc
  utils/containers/slice_test.cc
  utils/containers/transform_test.cc
  utils/containers/unique_allocator_test.cc
  utils/containers/unique_vector_test.cc
  utils/containers/vector_test.cc
)

tint_target_add_dependencies(tint_utils_containers_test test
  tint_api_common
  tint_lang_core
  tint_lang_core_constant
  tint_lang_core_type
  tint_lang_wgsl
  tint_lang_wgsl_ast
  tint_lang_wgsl_features
  tint_lang_wgsl_program
  tint_lang_wgsl_sem
  tint_utils_containers
  tint_utils_diagnostic
  tint_utils_ice
  tint_utils_id
  tint_utils_macros
  tint_utils_math
  tint_utils_memory
  tint_utils_reflection
  tint_utils_result
  tint_utils_rtti
  tint_utils_symbol
  tint_utils_text
  tint_utils_traits
)

tint_target_add_external_dependencies(tint_utils_containers_test test
  "gtest"
  "src_utils"
)
