# 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.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("ir") {
  sources = [
    "access.cc",
    "access.h",
    "binary.cc",
    "binary.h",
    "bitcast.cc",
    "bitcast.h",
    "block.cc",
    "block.h",
    "block_param.cc",
    "block_param.h",
    "break_if.cc",
    "break_if.h",
    "builder.cc",
    "builder.h",
    "builtin_call.cc",
    "builtin_call.h",
    "call.cc",
    "call.h",
    "clone_context.cc",
    "clone_context.h",
    "constant.cc",
    "constant.h",
    "construct.cc",
    "construct.h",
    "continue.cc",
    "continue.h",
    "control_instruction.cc",
    "control_instruction.h",
    "convert.cc",
    "convert.h",
    "core_binary.cc",
    "core_binary.h",
    "core_builtin_call.cc",
    "core_builtin_call.h",
    "core_unary.cc",
    "core_unary.h",
    "disassembly.cc",
    "disassembly.h",
    "discard.cc",
    "discard.h",
    "exit.cc",
    "exit.h",
    "exit_if.cc",
    "exit_if.h",
    "exit_loop.cc",
    "exit_loop.h",
    "exit_switch.cc",
    "exit_switch.h",
    "function.cc",
    "function.h",
    "function_param.cc",
    "function_param.h",
    "ice.h",
    "if.cc",
    "if.h",
    "instruction.cc",
    "instruction.h",
    "instruction_result.cc",
    "instruction_result.h",
    "let.cc",
    "let.h",
    "load.cc",
    "load.h",
    "load_vector_element.cc",
    "load_vector_element.h",
    "location.h",
    "loop.cc",
    "loop.h",
    "module.cc",
    "module.h",
    "multi_in_block.cc",
    "multi_in_block.h",
    "next_iteration.cc",
    "next_iteration.h",
    "operand_instruction.cc",
    "operand_instruction.h",
    "return.cc",
    "return.h",
    "store.cc",
    "store.h",
    "store_vector_element.cc",
    "store_vector_element.h",
    "switch.cc",
    "switch.h",
    "swizzle.cc",
    "swizzle.h",
    "terminate_invocation.cc",
    "terminate_invocation.h",
    "terminator.cc",
    "terminator.h",
    "traverse.h",
    "unary.cc",
    "unary.h",
    "unreachable.cc",
    "unreachable.h",
    "user_call.cc",
    "user_call.h",
    "validator.cc",
    "validator.h",
    "value.cc",
    "value.h",
    "var.cc",
    "var.h",
  ]
  deps = [
    "${tint_src_dir}/api/common",
    "${tint_src_dir}/lang/core",
    "${tint_src_dir}/lang/core/constant",
    "${tint_src_dir}/lang/core/intrinsic",
    "${tint_src_dir}/lang/core/type",
    "${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) {
  tint_unittests_source_set("unittests") {
    sources = [
      "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 = [
      "${tint_src_dir}:gmock_and_gtest",
      "${tint_src_dir}/api/common",
      "${tint_src_dir}/lang/core",
      "${tint_src_dir}/lang/core/constant",
      "${tint_src_dir}/lang/core/intrinsic",
      "${tint_src_dir}/lang/core/ir",
      "${tint_src_dir}/lang/core/type",
      "${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",
    ]
  }
}
