# Copyright © 2017 Rob Clark

# 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 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.

files_libfreedreno = files(
  'disasm.h',
  'freedreno_batch.c',
  'freedreno_batch.h',
  'freedreno_batch_cache.c',
  'freedreno_batch_cache.h',
  'freedreno_blitter.c',
  'freedreno_blitter.h',
  'freedreno_context.c',
  'freedreno_context.h',
  'freedreno_draw.c',
  'freedreno_draw.h',
  'freedreno_fence.c',
  'freedreno_fence.h',
  'freedreno_gmem.c',
  'freedreno_gmem.h',
  'freedreno_log.c',
  'freedreno_log.h',
  'freedreno_program.c',
  'freedreno_program.h',
  'freedreno_query.c',
  'freedreno_query.h',
  'freedreno_query_acc.c',
  'freedreno_query_acc.h',
  'freedreno_query_hw.c',
  'freedreno_query_hw.h',
  'freedreno_query_sw.c',
  'freedreno_query_sw.h',
  'freedreno_resource.c',
  'freedreno_resource.h',
  'freedreno_screen.c',
  'freedreno_screen.h',
  'freedreno_state.c',
  'freedreno_state.h',
  'freedreno_surface.c',
  'freedreno_surface.h',
  'freedreno_texture.c',
  'freedreno_texture.h',
  'freedreno_util.c',
  'freedreno_util.h',
  'a2xx/disasm-a2xx.c',
  'a2xx/fd2_blend.c',
  'a2xx/fd2_blend.h',
  'a2xx/fd2_context.c',
  'a2xx/fd2_context.h',
  'a2xx/fd2_draw.c',
  'a2xx/fd2_draw.h',
  'a2xx/fd2_emit.c',
  'a2xx/fd2_emit.h',
  'a2xx/fd2_gmem.c',
  'a2xx/fd2_gmem.h',
  'a2xx/fd2_program.c',
  'a2xx/fd2_program.h',
  'a2xx/fd2_query.c',
  'a2xx/fd2_query.h',
  'a2xx/fd2_rasterizer.c',
  'a2xx/fd2_rasterizer.h',
  'a2xx/fd2_resource.c',
  'a2xx/fd2_resource.h',
  'a2xx/fd2_screen.c',
  'a2xx/fd2_screen.h',
  'a2xx/fd2_texture.c',
  'a2xx/fd2_texture.h',
  'a2xx/fd2_util.c',
  'a2xx/fd2_util.h',
  'a2xx/fd2_zsa.c',
  'a2xx/fd2_zsa.h',
  'a2xx/instr-a2xx.h',
  'a2xx/ir2.c',
  'a2xx/ir2.h',
  'a2xx/ir2_assemble.c',
  'a2xx/ir2_cp.c',
  'a2xx/ir2_nir.c',
  'a2xx/ir2_private.h',
  'a2xx/ir2_ra.c',
  'a3xx/fd3_blend.c',
  'a3xx/fd3_blend.h',
  'a3xx/fd3_context.c',
  'a3xx/fd3_context.h',
  'a3xx/fd3_draw.c',
  'a3xx/fd3_draw.h',
  'a3xx/fd3_emit.c',
  'a3xx/fd3_emit.h',
  'a3xx/fd3_format.c',
  'a3xx/fd3_format.h',
  'a3xx/fd3_gmem.c',
  'a3xx/fd3_gmem.h',
  'a3xx/fd3_program.c',
  'a3xx/fd3_program.h',
  'a3xx/fd3_query.c',
  'a3xx/fd3_query.h',
  'a3xx/fd3_rasterizer.c',
  'a3xx/fd3_rasterizer.h',
  'a3xx/fd3_resource.c',
  'a3xx/fd3_resource.h',
  'a3xx/fd3_screen.c',
  'a3xx/fd3_screen.h',
  'a3xx/fd3_texture.c',
  'a3xx/fd3_texture.h',
  'a3xx/fd3_zsa.c',
  'a3xx/fd3_zsa.h',
  'a4xx/fd4_blend.c',
  'a4xx/fd4_blend.h',
  'a4xx/fd4_context.c',
  'a4xx/fd4_context.h',
  'a4xx/fd4_draw.c',
  'a4xx/fd4_draw.h',
  'a4xx/fd4_emit.c',
  'a4xx/fd4_emit.h',
  'a4xx/fd4_format.c',
  'a4xx/fd4_format.h',
  'a4xx/fd4_gmem.c',
  'a4xx/fd4_gmem.h',
  'a4xx/fd4_program.c',
  'a4xx/fd4_program.h',
  'a4xx/fd4_query.c',
  'a4xx/fd4_query.h',
  'a4xx/fd4_rasterizer.c',
  'a4xx/fd4_rasterizer.h',
  'a4xx/fd4_resource.c',
  'a4xx/fd4_resource.h',
  'a4xx/fd4_screen.c',
  'a4xx/fd4_screen.h',
  'a4xx/fd4_texture.c',
  'a4xx/fd4_texture.h',
  'a4xx/fd4_zsa.c',
  'a4xx/fd4_zsa.h',
  'a5xx/fd5_blend.c',
  'a5xx/fd5_blend.h',
  'a5xx/fd5_blitter.c',
  'a5xx/fd5_blitter.h',
  'a5xx/fd5_compute.c',
  'a5xx/fd5_compute.h',
  'a5xx/fd5_context.c',
  'a5xx/fd5_context.h',
  'a5xx/fd5_draw.c',
  'a5xx/fd5_draw.h',
  'a5xx/fd5_emit.c',
  'a5xx/fd5_emit.h',
  'a5xx/fd5_format.c',
  'a5xx/fd5_format.h',
  'a5xx/fd5_gmem.c',
  'a5xx/fd5_gmem.h',
  'a5xx/fd5_image.c',
  'a5xx/fd5_image.h',
  'a5xx/fd5_program.c',
  'a5xx/fd5_program.h',
  'a5xx/fd5_query.c',
  'a5xx/fd5_query.h',
  'a5xx/fd5_rasterizer.c',
  'a5xx/fd5_rasterizer.h',
  'a5xx/fd5_resource.c',
  'a5xx/fd5_resource.h',
  'a5xx/fd5_screen.c',
  'a5xx/fd5_screen.h',
  'a5xx/fd5_texture.c',
  'a5xx/fd5_texture.h',
  'a5xx/fd5_zsa.c',
  'a5xx/fd5_zsa.h',
  'a6xx/fd6_blend.c',
  'a6xx/fd6_blend.h',
  'a6xx/fd6_blitter.c',
  'a6xx/fd6_blitter.h',
  'a6xx/fd6_compute.c',
  'a6xx/fd6_compute.h',
  'a6xx/fd6_const.c',
  'a6xx/fd6_const.h',
  'a6xx/fd6_context.c',
  'a6xx/fd6_context.h',
  'a6xx/fd6_draw.c',
  'a6xx/fd6_draw.h',
  'a6xx/fd6_emit.c',
  'a6xx/fd6_emit.h',
  'a6xx/fd6_format.c',
  'a6xx/fd6_format.h',
  'a6xx/fd6_gmem.c',
  'a6xx/fd6_gmem.h',
  'a6xx/fd6_image.c',
  'a6xx/fd6_image.h',
  'a6xx/fd6_program.c',
  'a6xx/fd6_program.h',
  'a6xx/fd6_query.c',
  'a6xx/fd6_query.h',
  'a6xx/fd6_rasterizer.c',
  'a6xx/fd6_rasterizer.h',
  'a6xx/fd6_resource.c',
  'a6xx/fd6_resource.h',
  'a6xx/fd6_screen.c',
  'a6xx/fd6_screen.h',
  'a6xx/fd6_texture.c',
  'a6xx/fd6_texture.h',
  'a6xx/fd6_vsc.c',
  'a6xx/fd6_vsc.h',
  'a6xx/fd6_zsa.c',
  'a6xx/fd6_zsa.h',
  'ir3/ir3_cache.c',
  'ir3/ir3_cache.h',
  'ir3/ir3_const.h',
  'ir3/ir3_gallium.c',
  'ir3/ir3_gallium.h',
)

freedreno_includes = [
  inc_mesa, inc_mapi,
  inc_src, inc_include, inc_gallium, inc_gallium_aux,
  inc_freedreno, include_directories('ir3'),
]

freedreno_c_args = [no_override_init_args]
if cc.has_argument('-Wpacked-bitfield-compat')
  freedreno_c_args += '-Wno-packed-bitfield-compat'
endif

freedreno_cpp_args = []
if cpp.has_argument('-Wpacked-bitfield-compat')
  freedreno_cpp_args += '-Wno-packed-bitfield-compat'
endif

libfreedreno = static_library(
  'freedreno',
  [files_libfreedreno, freedreno_xml_header_files],
  include_directories : freedreno_includes,
  c_args : [freedreno_c_args],
  cpp_args : [freedreno_cpp_args],
  gnu_symbol_visibility : 'hidden',
  dependencies : [dep_libdrm, idep_nir_headers],
)

driver_freedreno = declare_dependency(
  compile_args : '-DGALLIUM_FREEDRENO',
  link_with : [
    libfreedrenowinsys,
    libfreedreno,
    libfreedreno_drm,
    libfreedreno_ir3,
    libfreedreno_layout,
    libfreedreno_perfcntrs
  ],
  dependencies : idep_nir,
)

ir3_compiler = executable(
  'ir3_compiler',
  'ir3/ir3_cmdline.c',
  include_directories : freedreno_includes,
  dependencies : [
    idep_nir,
    idep_mesautil,
  ],
  link_with : [
    libfreedreno,
    libfreedreno_drm,
    libfreedreno_ir3,
    libfreedreno_layout,
    libgallium,
    libglsl_standalone,
  ],
  build_by_default : with_tools.contains('freedreno'),
  install : with_tools.contains('freedreno'),
)

gmemtool = executable(
  'gmemtool',
  'gmemtool.c',
  include_directories : freedreno_includes,
  dependencies : [
    idep_nir,
    idep_mesautil,
  ],
  link_with : [
    libfreedreno,
    libfreedreno_drm,
    libfreedreno_ir3,
    libfreedreno_layout,
    libgallium,
    libglsl_standalone,
    libfreedreno_perfcntrs,
  ],
  build_by_default : with_tools.contains('freedreno'),
  install : false,
)
