# Copyright 2017 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("compiler_config") {
  include_dirs = [
    ".",
    "$mesa_build_root/src/mesa",  # because brw_compiler.h includes main/mtypes.h
    "$mesa_build_root/src/gallium/auxiliary",  # because main/macros.h includes gallium/auxiliary/util/u_math.h
    "$mesa_build_root/src/gallium/include",  # because u_math.h includes pipe/p_compiler.h
    "$mesa_build_root/src/intel",  # because brw_compiler.h includes common/gen_device_info.h
  ]
}

mesa_source_set("compiler") {
  public_configs = [
    ":compiler_config",
  ]

  deps = [
    ":gen_brw_nir_trig_workarounds",
    "$mesa_build_root/include:c_compat",
    "$mesa_build_root/src/compiler",
    "$mesa_build_root/src/compiler/glsl:ir_expression_operation",
    "$mesa_build_root/src/compiler/nir",
    "$mesa_build_root/src/intel:isl",
    "$mesa_build_root/src/util",
  ]

  sources = [
    "$target_gen_dir/brw_nir_trig_workarounds.c",
    "brw_cfg.cpp",
    "brw_cfg.h",
    "brw_compiler.c",
    "brw_compiler.h",
    "brw_compile_sf.c",
    "brw_dead_control_flow.cpp",
    "brw_dead_control_flow.h",
    "brw_disasm.c",
    "brw_disasm_info.c",
    "brw_eu.c",
    "brw_eu.h",
    "brw_eu_compact.c",
    "brw_eu_emit.c",
    "brw_eu_util.c",
    "brw_eu_validate.c",
    "brw_fs.cpp",
    "brw_fs.h",
    "brw_fs_bank_conflicts.cpp",
    "brw_fs_builder.h",
    "brw_fs_cmod_propagation.cpp",
    "brw_fs_combine_constants.cpp",
    "brw_fs_copy_propagation.cpp",
    "brw_fs_cse.cpp",
    "brw_fs_dead_code_eliminate.cpp",
    "brw_fs_generator.cpp",
    "brw_fs_live_variables.cpp",
    "brw_fs_live_variables.h",
    "brw_fs_lower_conversions.cpp",
    "brw_fs_lower_pack.cpp",
    "brw_fs_nir.cpp",
    "brw_fs_reg_allocate.cpp",
    "brw_fs_register_coalesce.cpp",
    "brw_fs_saturate_propagation.cpp",
    "brw_fs_sel_peephole.cpp",
    "brw_fs_surface_builder.cpp",
    "brw_fs_surface_builder.h",
    "brw_fs_validate.cpp",
    "brw_fs_visitor.cpp",
    "brw_inst.h",
    "brw_interpolation_map.c",
    "brw_ir_allocator.h",
    "brw_ir_fs.h",
    "brw_ir_vec4.h",
    "brw_nir.c",
    "brw_nir.h",
    "brw_nir_analyze_boolean_resolves.c",
    "brw_nir_analyze_ubo_ranges.c",
    "brw_nir_attribute_workarounds.c",
    "brw_nir_lower_cs_intrinsics.c",
    "brw_nir_opt_peephole_ffma.c",
    "brw_nir_tcs_workarounds.c",
    "brw_packed_float.c",
    "brw_predicated_break.cpp",
    "brw_reg.h",
    "brw_reg_type.c",
    "brw_reg_type.h",
    "brw_schedule_instructions.cpp",
    "brw_shader.cpp",
    "brw_shader.h",
    "brw_vec4.cpp",
    "brw_vec4.h",
    "brw_vec4_builder.h",
    "brw_vec4_cmod_propagation.cpp",
    "brw_vec4_copy_propagation.cpp",
    "brw_vec4_cse.cpp",
    "brw_vec4_dead_code_eliminate.cpp",
    "brw_vec4_generator.cpp",
    "brw_vec4_gs_nir.cpp",
    "brw_vec4_gs_visitor.cpp",
    "brw_vec4_gs_visitor.h",
    "brw_vec4_live_variables.cpp",
    "brw_vec4_live_variables.h",
    "brw_vec4_nir.cpp",
    "brw_vec4_reg_allocate.cpp",
    "brw_vec4_surface_builder.cpp",
    "brw_vec4_surface_builder.h",
    "brw_vec4_tcs.cpp",
    "brw_vec4_tcs.h",
    "brw_vec4_tes.cpp",
    "brw_vec4_tes.h",
    "brw_vec4_visitor.cpp",
    "brw_vec4_vs_visitor.cpp",
    "brw_vue_map.c",
    "brw_wm_iz.cpp",
    "gen6_gs_visitor.cpp",
    "gen6_gs_visitor.h",
  ]
}

action("gen_brw_nir_trig_workarounds") {
  output_name = "brw_nir_trig_workarounds.c"
  script_name = "brw_nir_trig_workarounds.py"

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

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

  inputs = [
    "$mesa_build_root/src/compiler/nir/nir_algebraic.py",
  ]

  python_path = "$magma_python_path:" + rebase_path("$mesa_build_root") +
                "/src/compiler/nir"

  args = [
    "$python_path",
    rebase_path("$target_gen_dir") + "/$output_name",
    rebase_path(".") + "/$script_name",
    "--import-path",
    "$python_path",
  ]
}
