# Copyright 2016 The Fuchsia Authors
#
# 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("nir_public_config") {
  include_dirs = [ "." ]
}

mesa_source_set("nir") {
  public_configs = [
    ":nir_public_config",
  ]

  public_deps = [
    ":gen",
  ]

  deps = [
    ":nir_compiler_workaround",
    "$mesa_build_root/include:c_compat",
    "$mesa_build_root/src/compiler/glsl:ir_expression_operation",
    "$mesa_build_root/src/util",
  ]

  include_dirs = [
    "..",
    "$mesa_build_root/src/mapi",
    "$mesa_build_root/src/mesa",
  ]

  sources = [
    "nir.c",
    "nir.h",
    "nir_builder.h",
    "nir_clone.c",
    "nir_constant_expressions.h",
    "nir_control_flow.c",
    "nir_control_flow.h",
    "nir_control_flow_private.h",
    "nir_dominance.c",
    "nir_from_ssa.c",
    "nir_gather_info.c",
    "nir_gs_count_vertices.c",
    "nir_inline_functions.c",
    "nir_instr_set.c",
    "nir_instr_set.h",
    "nir_intrinsics.c",
    "nir_intrinsics.h",
    "nir_linking_helpers.c",
    "nir_liveness.c",
    "nir_loop_analyze.c",
    "nir_lower_64bit_packing.c",
    "nir_lower_alu_to_scalar.c",
    "nir_lower_atomics.c",
    "nir_lower_clip.c",
    "nir_lower_clip_cull_distance_arrays.c",
    "nir_lower_constant_initializers.c",
    "nir_lower_double_ops.c",
    "nir_lower_global_vars_to_local.c",
    "nir_lower_gs_intrinsics.c",
    "nir_lower_idiv.c",
    "nir_lower_indirect_derefs.c",
    "nir_lower_int64.c",
    "nir_lower_io.c",
    "nir_lower_io_to_temporaries.c",
    "nir_lower_load_const_to_scalar.c",
    "nir_lower_locals_to_regs.c",
    "nir_lower_patch_vertices.c",
    "nir_lower_phis_to_scalar.c",
    "nir_lower_regs_to_ssa.c",
    "nir_lower_returns.c",
    "nir_lower_samplers.c",
    "nir_lower_subgroups.c",
    "nir_lower_system_values.c",
    "nir_lower_tex.c",
    "nir_lower_to_source_mods.c",
    "nir_lower_two_sided_color.c",
    "nir_lower_var_copies.c",
    "nir_lower_vars_to_ssa.c",
    "nir_lower_vec_to_movs.c",
    "nir_lower_wpos_center.c",
    "nir_metadata.c",
    "nir_move_vec_src_uses_to_dest.c",
    "nir_normalize_cubemap_coords.c",
    "nir_opt_constant_folding.c",
    "nir_opt_copy_prop_vars.c",
    "nir_opt_copy_propagate.c",
    "nir_opt_cse.c",
    "nir_opt_dce.c",
    "nir_opt_dead_cf.c",
    "nir_opt_gcm.c",
    "nir_opt_global_to_local.c",
    "nir_opt_if.c",
    "nir_opt_intrinsics.c",
    "nir_opt_loop_unroll.c",
    "nir_opt_move_comparisons.c",
    "nir_opt_peephole_select.c",
    "nir_opt_remove_phis.c",
    "nir_opt_trivial_continues.c",
    "nir_opt_undef.c",
    "nir_phi_builder.c",
    "nir_print.c",
    "nir_propagate_invariant.c",
    "nir_remove_dead_variables.c",
    "nir_repair_ssa.c",
    "nir_search.c",
    "nir_search.h",
    "nir_serialize.c",
    "nir_split_var_copies.c",
    "nir_sweep.c",
    "nir_to_lcssa.c",
    "nir_validate.c",
    "nir_vla.h",
    "nir_worklist.c",
    "nir_worklist.h",
  ]
}

# With -O2 this file causes an infinite loop with clang 3.9.0
mesa_source_set("nir_compiler_workaround") {
  sources = [
    "nir_lower_wpos_ytransform.c",
  ]

  cflags_c = [ "-O1" ]

  include_dirs = [ "$mesa_build_root/src/mesa" ]

  deps = [
    ":gen",
    "$mesa_build_root/src/util",
  ]
}

group("nir_headers") {
  public_configs = [ ":nir_public_config" ]

  public_deps = [
    ":gen",
  ]
}

action("nir_opcodes") {
  output_name = "nir_opcodes.h"
  script_name = "nir_opcodes_h.py"

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

  outputs = [
    "$target_gen_dir/$output_name",
  ]

  inputs = [
    "nir_opcodes.py",
    script_name,
  ]

  args = [
    "$magma_python_path",
    rebase_path(target_gen_dir) + "/$output_name",
    rebase_path(".") + "/$script_name",
  ]
}

action("nir_builder_opcodes") {
  output_name = "nir_builder_opcodes.h"
  script_name = "nir_builder_opcodes_h.py"

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

  outputs = [
    "$target_gen_dir/$output_name",
  ]

  inputs = [
    "nir_opcodes.py",
    script_name,
  ]

  args = [
    "$magma_python_path",
    rebase_path(target_gen_dir) + "/$output_name",
    rebase_path(".") + "/$script_name",
  ]
}

action("nir_constant_expressions") {
  output_name = "nir_constant_expressions.c"
  script_name = "nir_constant_expressions.py"

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

  outputs = [
    "$target_gen_dir/$output_name",
  ]

  inputs = [
    "nir_opcodes.py",
    script_name,
  ]

  args = [
    "$magma_python_path",
    rebase_path(target_gen_dir) + "/$output_name",
    rebase_path(".") + "/$script_name",
  ]
}

action("nir_opcodes_c") {
  output_name = "nir_opcodes.c"
  script_name = "nir_opcodes_c.py"

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

  outputs = [
    "$target_gen_dir/$output_name",
  ]

  inputs = [
    "nir_opcodes.py",
    script_name,
  ]

  args = [
    "$magma_python_path",
    rebase_path(target_gen_dir) + "/$output_name",
    rebase_path(".") + "/$script_name",
  ]
}

action("nir_opt_algebraic") {
  output_name = "nir_opt_algebraic.c"
  script_name = "nir_opt_algebraic.py"

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

  outputs = [
    "$target_gen_dir/$output_name",
  ]

  inputs = [
    "nir_algebraic.py",
    script_name,
  ]

  args = [
    "$magma_python_path",
    rebase_path(target_gen_dir) + "/$output_name",
    rebase_path(".") + "/$script_name",
  ]
}

config("gen_public_config") {
  include_dirs = [ target_gen_dir ]
}

mesa_source_set("gen") {
  public_configs = [ ":gen_public_config" ]

  public_deps = [
    ":nir_builder_opcodes",
    ":nir_constant_expressions",
    ":nir_opcodes",
    ":nir_opcodes_c",
    ":nir_opt_algebraic",
    "$mesa_build_root/src/util",
  ]

  include_dirs = [
    "$mesa_build_root/src/mesa",
    "$mesa_build_root/src/mapi",
    ".",
  ]

  sources = [
    "$target_gen_dir/nir_constant_expressions.c",
    "$target_gen_dir/nir_opcodes.c",
    "$target_gen_dir/nir_opt_algebraic.c",
  ]
}
