101e04c3fSmrg# Copyright © 2017 Rob Clark
201e04c3fSmrg
301e04c3fSmrg# Permission is hereby granted, free of charge, to any person obtaining a copy
401e04c3fSmrg# of this software and associated documentation files (the "Software"), to deal
501e04c3fSmrg# in the Software without restriction, including without limitation the rights
601e04c3fSmrg# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
701e04c3fSmrg# copies of the Software, and to permit persons to whom the Software is
801e04c3fSmrg# furnished to do so, subject to the following conditions:
901e04c3fSmrg
1001e04c3fSmrg# The above copyright notice and this permission notice shall be included in
1101e04c3fSmrg# all copies or substantial portions of the Software.
1201e04c3fSmrg
1301e04c3fSmrg# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1401e04c3fSmrg# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1501e04c3fSmrg# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
1601e04c3fSmrg# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1701e04c3fSmrg# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
1801e04c3fSmrg# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
1901e04c3fSmrg# SOFTWARE.
2001e04c3fSmrg
2101e04c3fSmrgfiles_libfreedreno = files(
227ec681f3Smrg  'freedreno_autotune.c',
237ec681f3Smrg  'freedreno_autotune.h',
2401e04c3fSmrg  'freedreno_batch.c',
2501e04c3fSmrg  'freedreno_batch.h',
2601e04c3fSmrg  'freedreno_batch_cache.c',
2701e04c3fSmrg  'freedreno_batch_cache.h',
2801e04c3fSmrg  'freedreno_blitter.c',
2901e04c3fSmrg  'freedreno_blitter.h',
3001e04c3fSmrg  'freedreno_context.c',
3101e04c3fSmrg  'freedreno_context.h',
3201e04c3fSmrg  'freedreno_draw.c',
3301e04c3fSmrg  'freedreno_draw.h',
3401e04c3fSmrg  'freedreno_fence.c',
3501e04c3fSmrg  'freedreno_fence.h',
3601e04c3fSmrg  'freedreno_gmem.c',
3701e04c3fSmrg  'freedreno_gmem.h',
3801e04c3fSmrg  'freedreno_program.c',
3901e04c3fSmrg  'freedreno_program.h',
4001e04c3fSmrg  'freedreno_query.c',
4101e04c3fSmrg  'freedreno_query.h',
4201e04c3fSmrg  'freedreno_query_acc.c',
4301e04c3fSmrg  'freedreno_query_acc.h',
4401e04c3fSmrg  'freedreno_query_hw.c',
4501e04c3fSmrg  'freedreno_query_hw.h',
4601e04c3fSmrg  'freedreno_query_sw.c',
4701e04c3fSmrg  'freedreno_query_sw.h',
4801e04c3fSmrg  'freedreno_resource.c',
4901e04c3fSmrg  'freedreno_resource.h',
5001e04c3fSmrg  'freedreno_screen.c',
5101e04c3fSmrg  'freedreno_screen.h',
5201e04c3fSmrg  'freedreno_state.c',
5301e04c3fSmrg  'freedreno_state.h',
5401e04c3fSmrg  'freedreno_surface.c',
5501e04c3fSmrg  'freedreno_surface.h',
5601e04c3fSmrg  'freedreno_texture.c',
5701e04c3fSmrg  'freedreno_texture.h',
5801e04c3fSmrg  'freedreno_util.c',
5901e04c3fSmrg  'freedreno_util.h',
6001e04c3fSmrg  'a2xx/fd2_blend.c',
6101e04c3fSmrg  'a2xx/fd2_blend.h',
6201e04c3fSmrg  'a2xx/fd2_context.c',
6301e04c3fSmrg  'a2xx/fd2_context.h',
6401e04c3fSmrg  'a2xx/fd2_draw.c',
6501e04c3fSmrg  'a2xx/fd2_draw.h',
6601e04c3fSmrg  'a2xx/fd2_emit.c',
6701e04c3fSmrg  'a2xx/fd2_emit.h',
6801e04c3fSmrg  'a2xx/fd2_gmem.c',
6901e04c3fSmrg  'a2xx/fd2_gmem.h',
7001e04c3fSmrg  'a2xx/fd2_program.c',
7101e04c3fSmrg  'a2xx/fd2_program.h',
729f464c52Smaya  'a2xx/fd2_query.c',
739f464c52Smaya  'a2xx/fd2_query.h',
7401e04c3fSmrg  'a2xx/fd2_rasterizer.c',
7501e04c3fSmrg  'a2xx/fd2_rasterizer.h',
769f464c52Smaya  'a2xx/fd2_resource.c',
779f464c52Smaya  'a2xx/fd2_resource.h',
7801e04c3fSmrg  'a2xx/fd2_screen.c',
7901e04c3fSmrg  'a2xx/fd2_screen.h',
8001e04c3fSmrg  'a2xx/fd2_texture.c',
8101e04c3fSmrg  'a2xx/fd2_texture.h',
8201e04c3fSmrg  'a2xx/fd2_util.c',
8301e04c3fSmrg  'a2xx/fd2_util.h',
8401e04c3fSmrg  'a2xx/fd2_zsa.c',
8501e04c3fSmrg  'a2xx/fd2_zsa.h',
869f464c52Smaya  'a2xx/ir2.c',
879f464c52Smaya  'a2xx/ir2.h',
889f464c52Smaya  'a2xx/ir2_assemble.c',
899f464c52Smaya  'a2xx/ir2_cp.c',
909f464c52Smaya  'a2xx/ir2_nir.c',
919f464c52Smaya  'a2xx/ir2_private.h',
929f464c52Smaya  'a2xx/ir2_ra.c',
9301e04c3fSmrg  'a3xx/fd3_blend.c',
9401e04c3fSmrg  'a3xx/fd3_blend.h',
9501e04c3fSmrg  'a3xx/fd3_context.c',
9601e04c3fSmrg  'a3xx/fd3_context.h',
9701e04c3fSmrg  'a3xx/fd3_draw.c',
9801e04c3fSmrg  'a3xx/fd3_draw.h',
9901e04c3fSmrg  'a3xx/fd3_emit.c',
10001e04c3fSmrg  'a3xx/fd3_emit.h',
10101e04c3fSmrg  'a3xx/fd3_format.c',
10201e04c3fSmrg  'a3xx/fd3_format.h',
10301e04c3fSmrg  'a3xx/fd3_gmem.c',
10401e04c3fSmrg  'a3xx/fd3_gmem.h',
10501e04c3fSmrg  'a3xx/fd3_program.c',
10601e04c3fSmrg  'a3xx/fd3_program.h',
10701e04c3fSmrg  'a3xx/fd3_query.c',
10801e04c3fSmrg  'a3xx/fd3_query.h',
10901e04c3fSmrg  'a3xx/fd3_rasterizer.c',
11001e04c3fSmrg  'a3xx/fd3_rasterizer.h',
1117ec681f3Smrg  'a3xx/fd3_resource.c',
1127ec681f3Smrg  'a3xx/fd3_resource.h',
11301e04c3fSmrg  'a3xx/fd3_screen.c',
11401e04c3fSmrg  'a3xx/fd3_screen.h',
11501e04c3fSmrg  'a3xx/fd3_texture.c',
11601e04c3fSmrg  'a3xx/fd3_texture.h',
11701e04c3fSmrg  'a3xx/fd3_zsa.c',
11801e04c3fSmrg  'a3xx/fd3_zsa.h',
11901e04c3fSmrg  'a4xx/fd4_blend.c',
12001e04c3fSmrg  'a4xx/fd4_blend.h',
12101e04c3fSmrg  'a4xx/fd4_context.c',
12201e04c3fSmrg  'a4xx/fd4_context.h',
12301e04c3fSmrg  'a4xx/fd4_draw.c',
12401e04c3fSmrg  'a4xx/fd4_draw.h',
12501e04c3fSmrg  'a4xx/fd4_emit.c',
12601e04c3fSmrg  'a4xx/fd4_emit.h',
12701e04c3fSmrg  'a4xx/fd4_format.c',
12801e04c3fSmrg  'a4xx/fd4_format.h',
12901e04c3fSmrg  'a4xx/fd4_gmem.c',
13001e04c3fSmrg  'a4xx/fd4_gmem.h',
13101e04c3fSmrg  'a4xx/fd4_program.c',
13201e04c3fSmrg  'a4xx/fd4_program.h',
13301e04c3fSmrg  'a4xx/fd4_query.c',
13401e04c3fSmrg  'a4xx/fd4_query.h',
13501e04c3fSmrg  'a4xx/fd4_rasterizer.c',
13601e04c3fSmrg  'a4xx/fd4_rasterizer.h',
1377ec681f3Smrg  'a4xx/fd4_resource.c',
1387ec681f3Smrg  'a4xx/fd4_resource.h',
13901e04c3fSmrg  'a4xx/fd4_screen.c',
14001e04c3fSmrg  'a4xx/fd4_screen.h',
14101e04c3fSmrg  'a4xx/fd4_texture.c',
14201e04c3fSmrg  'a4xx/fd4_texture.h',
14301e04c3fSmrg  'a4xx/fd4_zsa.c',
14401e04c3fSmrg  'a4xx/fd4_zsa.h',
14501e04c3fSmrg  'a5xx/fd5_blend.c',
14601e04c3fSmrg  'a5xx/fd5_blend.h',
14701e04c3fSmrg  'a5xx/fd5_blitter.c',
14801e04c3fSmrg  'a5xx/fd5_blitter.h',
14901e04c3fSmrg  'a5xx/fd5_compute.c',
15001e04c3fSmrg  'a5xx/fd5_compute.h',
15101e04c3fSmrg  'a5xx/fd5_context.c',
15201e04c3fSmrg  'a5xx/fd5_context.h',
15301e04c3fSmrg  'a5xx/fd5_draw.c',
15401e04c3fSmrg  'a5xx/fd5_draw.h',
15501e04c3fSmrg  'a5xx/fd5_emit.c',
15601e04c3fSmrg  'a5xx/fd5_emit.h',
15701e04c3fSmrg  'a5xx/fd5_format.c',
15801e04c3fSmrg  'a5xx/fd5_format.h',
15901e04c3fSmrg  'a5xx/fd5_gmem.c',
16001e04c3fSmrg  'a5xx/fd5_gmem.h',
16101e04c3fSmrg  'a5xx/fd5_image.c',
16201e04c3fSmrg  'a5xx/fd5_image.h',
16301e04c3fSmrg  'a5xx/fd5_program.c',
16401e04c3fSmrg  'a5xx/fd5_program.h',
16501e04c3fSmrg  'a5xx/fd5_query.c',
16601e04c3fSmrg  'a5xx/fd5_query.h',
16701e04c3fSmrg  'a5xx/fd5_rasterizer.c',
16801e04c3fSmrg  'a5xx/fd5_rasterizer.h',
16901e04c3fSmrg  'a5xx/fd5_resource.c',
17001e04c3fSmrg  'a5xx/fd5_resource.h',
17101e04c3fSmrg  'a5xx/fd5_screen.c',
17201e04c3fSmrg  'a5xx/fd5_screen.h',
17301e04c3fSmrg  'a5xx/fd5_texture.c',
17401e04c3fSmrg  'a5xx/fd5_texture.h',
17501e04c3fSmrg  'a5xx/fd5_zsa.c',
17601e04c3fSmrg  'a5xx/fd5_zsa.h',
17701e04c3fSmrg  'a6xx/fd6_blend.c',
17801e04c3fSmrg  'a6xx/fd6_blend.h',
17901e04c3fSmrg  'a6xx/fd6_blitter.c',
18001e04c3fSmrg  'a6xx/fd6_blitter.h',
1819f464c52Smaya  'a6xx/fd6_compute.c',
1829f464c52Smaya  'a6xx/fd6_compute.h',
1837ec681f3Smrg  'a6xx/fd6_const.c',
1847ec681f3Smrg  'a6xx/fd6_const.h',
18501e04c3fSmrg  'a6xx/fd6_context.c',
18601e04c3fSmrg  'a6xx/fd6_context.h',
18701e04c3fSmrg  'a6xx/fd6_draw.c',
18801e04c3fSmrg  'a6xx/fd6_draw.h',
18901e04c3fSmrg  'a6xx/fd6_emit.c',
19001e04c3fSmrg  'a6xx/fd6_emit.h',
19101e04c3fSmrg  'a6xx/fd6_format.c',
19201e04c3fSmrg  'a6xx/fd6_format.h',
19301e04c3fSmrg  'a6xx/fd6_gmem.c',
19401e04c3fSmrg  'a6xx/fd6_gmem.h',
19501e04c3fSmrg  'a6xx/fd6_image.c',
19601e04c3fSmrg  'a6xx/fd6_image.h',
19701e04c3fSmrg  'a6xx/fd6_program.c',
19801e04c3fSmrg  'a6xx/fd6_program.h',
19901e04c3fSmrg  'a6xx/fd6_query.c',
20001e04c3fSmrg  'a6xx/fd6_query.h',
20101e04c3fSmrg  'a6xx/fd6_rasterizer.c',
20201e04c3fSmrg  'a6xx/fd6_rasterizer.h',
20301e04c3fSmrg  'a6xx/fd6_resource.c',
20401e04c3fSmrg  'a6xx/fd6_resource.h',
20501e04c3fSmrg  'a6xx/fd6_screen.c',
20601e04c3fSmrg  'a6xx/fd6_screen.h',
20701e04c3fSmrg  'a6xx/fd6_texture.c',
20801e04c3fSmrg  'a6xx/fd6_texture.h',
2097ec681f3Smrg  'a6xx/fd6_vsc.c',
2107ec681f3Smrg  'a6xx/fd6_vsc.h',
21101e04c3fSmrg  'a6xx/fd6_zsa.c',
21201e04c3fSmrg  'a6xx/fd6_zsa.h',
21301e04c3fSmrg  'ir3/ir3_cache.c',
21401e04c3fSmrg  'ir3/ir3_cache.h',
2157ec681f3Smrg  'ir3/ir3_const.h',
2169f464c52Smaya  'ir3/ir3_gallium.c',
2179f464c52Smaya  'ir3/ir3_gallium.h',
21801e04c3fSmrg)
21901e04c3fSmrg
2207ec681f3Smrgfreedreno_tracepoints = custom_target(
2217ec681f3Smrg  'freedreno_tracepoints.[ch]',
2227ec681f3Smrg  input: 'freedreno_tracepoints.py',
2237ec681f3Smrg  output: ['freedreno_tracepoints.c', 'freedreno_tracepoints.h'],
2247ec681f3Smrg  command: [
2257ec681f3Smrg    prog_python, '@INPUT@',
2267ec681f3Smrg    '-p', join_paths(meson.source_root(), 'src/util/perf/'),
2277ec681f3Smrg    '-C', '@OUTPUT0@',
2287ec681f3Smrg    '-H', '@OUTPUT1@',
2297ec681f3Smrg  ],
2307ec681f3Smrg  depend_files: u_trace_py,
2317ec681f3Smrg)
2327ec681f3Smrg
2337ec681f3Smrgfiles_libfreedreno += freedreno_tracepoints
2347ec681f3Smrg
23501e04c3fSmrgfreedreno_includes = [
2369f464c52Smaya  inc_mesa, inc_mapi,
23701e04c3fSmrg  inc_src, inc_include, inc_gallium, inc_gallium_aux,
2389f464c52Smaya  inc_freedreno, include_directories('ir3'),
23901e04c3fSmrg]
24001e04c3fSmrg
2417ec681f3Smrgfreedreno_c_args = [no_override_init_args]
24201e04c3fSmrgif cc.has_argument('-Wpacked-bitfield-compat')
24301e04c3fSmrg  freedreno_c_args += '-Wno-packed-bitfield-compat'
24401e04c3fSmrgendif
24501e04c3fSmrg
24601e04c3fSmrgfreedreno_cpp_args = []
24701e04c3fSmrgif cpp.has_argument('-Wpacked-bitfield-compat')
24801e04c3fSmrg  freedreno_cpp_args += '-Wno-packed-bitfield-compat'
24901e04c3fSmrgendif
25001e04c3fSmrg
2517ec681f3Smrglibfreedreno_dependencies = [
2527ec681f3Smrg  dep_libdrm,
2537ec681f3Smrg  idep_mesautil,
2547ec681f3Smrg  idep_nir_headers,
2557ec681f3Smrg  idep_libfreedreno_common,
2567ec681f3Smrg  idep_u_tracepoints,
2577ec681f3Smrg]
2587ec681f3Smrg
2597ec681f3Smrgif with_perfetto
2607ec681f3Smrg  libfreedreno_dependencies += dep_perfetto
2617ec681f3Smrg  files_libfreedreno += 'freedreno_perfetto.cc'
2627ec681f3Smrgendif
2637ec681f3Smrg
2647ec681f3Smrg# The header file ends up part of the build (but just a stub)
2657ec681f3Smrg# in either case:
2667ec681f3Smrgfiles_libfreedreno += 'freedreno_perfetto.h'
2677ec681f3Smrg
26801e04c3fSmrglibfreedreno = static_library(
26901e04c3fSmrg  'freedreno',
2707ec681f3Smrg  [files_libfreedreno, freedreno_xml_header_files],
27101e04c3fSmrg  include_directories : freedreno_includes,
2727ec681f3Smrg  c_args : [freedreno_c_args],
2737ec681f3Smrg  cpp_args : [freedreno_cpp_args],
2747ec681f3Smrg  gnu_symbol_visibility : 'hidden',
2757ec681f3Smrg  dependencies : libfreedreno_dependencies,
2767ec681f3Smrg  override_options : ['cpp_std=c++17'],
27701e04c3fSmrg)
27801e04c3fSmrg
27901e04c3fSmrgdriver_freedreno = declare_dependency(
28001e04c3fSmrg  compile_args : '-DGALLIUM_FREEDRENO',
2819f464c52Smaya  link_with : [
2829f464c52Smaya    libfreedrenowinsys,
2839f464c52Smaya    libfreedreno,
2849f464c52Smaya    libfreedreno_drm,
2857ec681f3Smrg    libfreedreno_ir2,
2869f464c52Smaya    libfreedreno_ir3,
2877ec681f3Smrg    libfreedreno_layout,
2887ec681f3Smrg    libfreedreno_perfcntrs
2897ec681f3Smrg  ],
2907ec681f3Smrg  dependencies : [
2917ec681f3Smrg    idep_nir,
2927ec681f3Smrg    idep_xmlconfig,
2939f464c52Smaya  ],
29401e04c3fSmrg)
29501e04c3fSmrg
29601e04c3fSmrgir3_compiler = executable(
29701e04c3fSmrg  'ir3_compiler',
29801e04c3fSmrg  'ir3/ir3_cmdline.c',
29901e04c3fSmrg  include_directories : freedreno_includes,
30001e04c3fSmrg  dependencies : [
30101e04c3fSmrg    idep_nir,
3027ec681f3Smrg    idep_mesautil,
3037ec681f3Smrg  ],
3047ec681f3Smrg  link_with : [
3057ec681f3Smrg    libfreedreno,
3067ec681f3Smrg    libfreedreno_drm,
3077ec681f3Smrg    libfreedreno_ir3,
3087ec681f3Smrg    libfreedreno_layout,
3097ec681f3Smrg    libgallium,
3107ec681f3Smrg    libglsl_standalone,
3117ec681f3Smrg  ],
3127ec681f3Smrg  build_by_default : with_tools.contains('freedreno'),
3137ec681f3Smrg  install : false,
3147ec681f3Smrg)
3157ec681f3Smrg
3167ec681f3Smrggmemtool = executable(
3177ec681f3Smrg  'gmemtool',
3187ec681f3Smrg  [
3197ec681f3Smrg    'gmemtool.c',
3207ec681f3Smrg    freedreno_tracepoints[1]
3217ec681f3Smrg  ],
3227ec681f3Smrg  include_directories : freedreno_includes,
3237ec681f3Smrg  dependencies : [
3247ec681f3Smrg    idep_nir,
3257ec681f3Smrg    idep_mesautil,
3267ec681f3Smrg    idep_u_tracepoints,
3277ec681f3Smrg    idep_xmlconfig,
32801e04c3fSmrg  ],
32901e04c3fSmrg  link_with : [
33001e04c3fSmrg    libfreedreno,
3319f464c52Smaya    libfreedreno_drm,
3327ec681f3Smrg    libfreedreno_ir2,
3339f464c52Smaya    libfreedreno_ir3,
3347ec681f3Smrg    libfreedreno_layout,
33501e04c3fSmrg    libgallium,
33601e04c3fSmrg    libglsl_standalone,
3377ec681f3Smrg    libfreedreno_perfcntrs,
33801e04c3fSmrg  ],
33901e04c3fSmrg  build_by_default : with_tools.contains('freedreno'),
3407ec681f3Smrg  install : false,
34101e04c3fSmrg)
342