# 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_builtin_call.cc",
    "core_builtin_call.h",
    "disassembler.cc",
    "disassembler.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",
    "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",
      "binary_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_builtin_call_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",
      "unary_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",
    ]
  }
}
