# 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.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 = "ir",
  srcs = [
    "access.cc",
    "binary.cc",
    "bitcast.cc",
    "block.cc",
    "block_param.cc",
    "break_if.cc",
    "builder.cc",
    "builtin_call.cc",
    "call.cc",
    "clone_context.cc",
    "constant.cc",
    "construct.cc",
    "continue.cc",
    "control_instruction.cc",
    "convert.cc",
    "core_binary.cc",
    "core_builtin_call.cc",
    "core_unary.cc",
    "disassembler.cc",
    "discard.cc",
    "exit.cc",
    "exit_if.cc",
    "exit_loop.cc",
    "exit_switch.cc",
    "function.cc",
    "function_param.cc",
    "if.cc",
    "instruction.cc",
    "instruction_result.cc",
    "let.cc",
    "load.cc",
    "load_vector_element.cc",
    "loop.cc",
    "module.cc",
    "multi_in_block.cc",
    "next_iteration.cc",
    "operand_instruction.cc",
    "return.cc",
    "store.cc",
    "store_vector_element.cc",
    "switch.cc",
    "swizzle.cc",
    "terminate_invocation.cc",
    "terminator.cc",
    "unary.cc",
    "unreachable.cc",
    "user_call.cc",
    "validator.cc",
    "value.cc",
    "var.cc",
  ],
  hdrs = [
    "access.h",
    "binary.h",
    "bitcast.h",
    "block.h",
    "block_param.h",
    "break_if.h",
    "builder.h",
    "builtin_call.h",
    "call.h",
    "clone_context.h",
    "constant.h",
    "construct.h",
    "continue.h",
    "control_instruction.h",
    "convert.h",
    "core_binary.h",
    "core_builtin_call.h",
    "core_unary.h",
    "disassembler.h",
    "discard.h",
    "exit.h",
    "exit_if.h",
    "exit_loop.h",
    "exit_switch.h",
    "function.h",
    "function_param.h",
    "ice.h",
    "if.h",
    "instruction.h",
    "instruction_result.h",
    "let.h",
    "load.h",
    "load_vector_element.h",
    "location.h",
    "loop.h",
    "module.h",
    "multi_in_block.h",
    "next_iteration.h",
    "operand_instruction.h",
    "return.h",
    "store.h",
    "store_vector_element.h",
    "switch.h",
    "swizzle.h",
    "terminate_invocation.h",
    "terminator.h",
    "traverse.h",
    "unary.h",
    "unreachable.h",
    "user_call.h",
    "validator.h",
    "value.h",
    "var.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/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 = [
    "access_test.cc",
    "bitcast_test.cc",
    "block_param_test.cc",
    "block_test.cc",
    "break_if_test.cc",
    "constant_test.cc",
    "construct_test.cc",
    "continue_test.cc",
    "convert_test.cc",
    "core_binary_test.cc",
    "core_builtin_call_test.cc",
    "core_unary_test.cc",
    "discard_test.cc",
    "exit_if_test.cc",
    "exit_loop_test.cc",
    "exit_switch_test.cc",
    "function_param_test.cc",
    "function_test.cc",
    "if_test.cc",
    "instruction_result_test.cc",
    "instruction_test.cc",
    "ir_helper_test.h",
    "let_test.cc",
    "load_test.cc",
    "load_vector_element_test.cc",
    "loop_test.cc",
    "module_test.cc",
    "multi_in_block_test.cc",
    "next_iteration_test.cc",
    "operand_instruction_test.cc",
    "return_test.cc",
    "store_test.cc",
    "store_vector_element_test.cc",
    "switch_test.cc",
    "swizzle_test.cc",
    "terminate_invocation_test.cc",
    "traverse_test.cc",
    "unreachable_test.cc",
    "user_call_test.cc",
    "validator_test.cc",
    "value_test.cc",
    "var_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/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"],
)

