# 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) {
  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",
    "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",
    "intrinsic_call.cc",
    "intrinsic_call.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",
    "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/intrinsic/data",
    "${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") {
    testonly = true
    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",
      "unary_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/intrinsic/data",
      "${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",
    ]
  }
}
