# Copyright 2016 Google, LLC
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice (including the next
# paragraph) shall be included in all copies or substantial portions of the
# Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.

import("//third_party/mako/py_srcs.gni")
import("../../../mesa.gni")

config("spirv_public_config") {
  include_dirs = [ "." ]
}

mesa_source_set("spirv") {
  public_configs = [ ":spirv_public_config" ]

  deps = [
    ":spirv_info",
    ":vtn_gather_types",
    "$mesa_build_root/include:c_compat",
    "$mesa_build_root/src/compiler/nir",
    "$mesa_build_root/src/util",
  ]

  include_dirs = [ ".." ]

  sources = [
    "$target_gen_dir/spirv_info.c",
    "$target_gen_dir/vtn_gather_types.c",
    "spirv_to_nir.c",
    "vtn_alu.c",
    "vtn_amd.c",
    "vtn_cfg.c",
    "vtn_glsl450.c",
    "vtn_opencl.c",
    "vtn_private.h",
    "vtn_subgroup.c",
    "vtn_variables.c",
  ]
}

mesa_python_action("spirv_info") {
  output_name = "spirv_info.c"
  script = "spirv_info_c.py"

  outputs = [ "$target_gen_dir/$output_name" ]

  inputs = [ "spirv.core.grammar.json" ] + third_party_mako_srcs

  args = [
    rebase_path(".") + "/spirv.core.grammar.json",
    rebase_path(target_gen_dir) + "/$output_name",
  ]
}

mesa_python_action("vtn_gather_types") {
  output_name = "vtn_gather_types.c"
  script = "vtn_gather_types_c.py"

  outputs = [ "$target_gen_dir/$output_name" ]
  inputs = [ "spirv.core.grammar.json" ]
  args = [
    rebase_path(".") + "/spirv.core.grammar.json",
    rebase_path(target_gen_dir) + "/$output_name",
  ]
}
