# Copyright 2021 The ANGLE Project Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("../../../gni/angle.gni")

angle_source_set("angle_spirv_headers") {
  sources = [ "spirv_types.h" ]

  deps = [ "$angle_root:angle_common" ]
}

angle_source_set("angle_spirv_base") {
  sources = [ "angle_spirv_utils.cpp" ]
  deps = [
    ":angle_spirv_headers",
    "$angle_root:angle_common",
    "${angle_spirv_headers_dir}:spv_headers",
    "${angle_spirv_tools_dir}:spvtools_headers",
  ]

  if (angle_debug_layers_enabled) {
    deps += [ "$angle_spirv_tools_dir:spvtools_val" ]
  }
}

angle_source_set("angle_spirv_builder") {
  sources = [
    "spirv_instruction_builder_autogen.cpp",
    "spirv_instruction_builder_autogen.h",
  ]
  deps = [
    ":angle_spirv_base",
    ":angle_spirv_headers",
    "$angle_root:angle_common",
    "${angle_spirv_headers_dir}:spv_headers",
  ]
}

angle_source_set("angle_spirv_parser") {
  sources = [
    "spirv_instruction_parser_autogen.cpp",
    "spirv_instruction_parser_autogen.h",
  ]
  deps = [
    ":angle_spirv_base",
    ":angle_spirv_headers",
    "$angle_root:angle_common",
    "${angle_spirv_headers_dir}:spv_headers",
  ]
}
