# Copyright 2017 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("../../../mesa.gni")

config("config_util") {
  include_dirs = [ 
    "$target_gen_dir", 
    "."
  ]
}

mesa_source_set("util") {
  public_configs = [ ":config_util" ]
  public_deps = [ "$mesa_build_root/include:vulkan" ]
  deps = [ "$mesa_build_root/src/util" ]
  sources = [
    "$target_gen_dir/vk_enum_to_str.c",
    "vk_enum_to_str.h",
    "vk_util.c",
    "vk_util.h",
    "vk_debug_report.c",
    "vk_debug_report.h",
  ]
  deps += [ ":gen_enum_to_str" ]
}

action("gen_enum_to_str") {
  outputs = [ "$target_gen_dir/vk_enum_to_str.h",
    "$target_gen_dir/vk_enum_to_str.c",
  ]

  script = "$mesa_build_root/scripts/python_exec.py"

  inputs = [
    "$mesa_build_root/src/vulkan/registry/vk.xml",
    "gen_enum_to_str.py",
  ]

  args = [
    rebase_path("$magma_python_path"),
    rebase_path("gen_enum_to_str.py"),
    "--xml",
    rebase_path("$mesa_build_root") + "/src/vulkan/registry/vk.xml",
    "--outdir",
    rebase_path("$target_gen_dir")
  ]
}
