101e04c3fSmrg# Copyright © 2017-2019 Intel Corporation
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
2101e04c3fSmrganv_entrypoints = custom_target(
227ec681f3Smrg  'anv_entrypoints',
237ec681f3Smrg  input : [vk_entrypoints_gen, vk_api_xml],
2401e04c3fSmrg  output : ['anv_entrypoints.h', 'anv_entrypoints.c'],
2501e04c3fSmrg  command : [
267ec681f3Smrg    prog_python, '@INPUT0@', '--xml', '@INPUT1@', '--proto', '--weak',
277ec681f3Smrg    '--out-h', '@OUTPUT0@', '--out-c', '@OUTPUT1@', '--prefix', 'anv',
287ec681f3Smrg    '--device-prefix', 'gfx7', '--device-prefix', 'gfx75',
297ec681f3Smrg    '--device-prefix', 'gfx8', '--device-prefix', 'gfx9',
307ec681f3Smrg    '--device-prefix', 'gfx11', '--device-prefix', 'gfx12',
317ec681f3Smrg    '--device-prefix', 'gfx125',
3201e04c3fSmrg  ],
337ec681f3Smrg  depend_files : vk_entrypoints_gen_depend_files,
3401e04c3fSmrg)
3501e04c3fSmrg
3601e04c3fSmrgintel_icd = custom_target(
3701e04c3fSmrg  'intel_icd',
387ec681f3Smrg  input : [vk_icd_gen, vk_api_xml],
3901e04c3fSmrg  output : 'intel_icd.@0@.json'.format(host_machine.cpu()),
4001e04c3fSmrg  command : [
417ec681f3Smrg    prog_python, '@INPUT0@',
427ec681f3Smrg    '--api-version', '1.2', '--xml', '@INPUT1@',
437ec681f3Smrg    '--lib-path', join_paths(get_option('prefix'), get_option('libdir'),
447ec681f3Smrg                             'libvulkan_intel.so'),
4501e04c3fSmrg    '--out', '@OUTPUT@',
4601e04c3fSmrg  ],
4701e04c3fSmrg  build_by_default : true,
4801e04c3fSmrg  install_dir : with_vulkan_icd_dir,
4901e04c3fSmrg  install : true,
5001e04c3fSmrg)
5101e04c3fSmrg
527ec681f3Smrglibanv_per_hw_ver_libs = []
537ec681f3Smrganv_per_hw_ver_files = files(
5401e04c3fSmrg  'genX_blorp_exec.c',
5501e04c3fSmrg  'genX_cmd_buffer.c',
5601e04c3fSmrg  'genX_gpu_memcpy.c',
5701e04c3fSmrg  'genX_pipeline.c',
5801e04c3fSmrg  'genX_query.c',
5901e04c3fSmrg  'genX_state.c',
6001e04c3fSmrg)
617ec681f3Smrgforeach g : [['70', ['gfx7_cmd_buffer.c']], ['75', ['gfx7_cmd_buffer.c']],
627ec681f3Smrg             ['80', ['gfx8_cmd_buffer.c']], ['90', ['gfx8_cmd_buffer.c']],
637ec681f3Smrg             ['110', ['gfx8_cmd_buffer.c']], ['120', ['gfx8_cmd_buffer.c']],
647ec681f3Smrg             ['125', ['gfx8_cmd_buffer.c']]]
657ec681f3Smrg  _gfx_ver = g[0]
667ec681f3Smrg  libanv_per_hw_ver_libs += static_library(
677ec681f3Smrg    'anv_per_hw_ver@0@'.format(_gfx_ver),
687ec681f3Smrg    [anv_per_hw_ver_files, g[1], anv_entrypoints[0]],
6901e04c3fSmrg    include_directories : [
707ec681f3Smrg      inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_compiler, inc_intel,
7101e04c3fSmrg    ],
7201e04c3fSmrg    c_args : [
737ec681f3Smrg      no_override_init_args, c_sse2_args,
747ec681f3Smrg      '-DGFX_VERx10=@0@'.format(_gfx_ver),
7501e04c3fSmrg    ],
767ec681f3Smrg    gnu_symbol_visibility : 'hidden',
779f464c52Smaya    dependencies : [
787ec681f3Smrg      dep_libdrm, dep_valgrind, idep_nir_headers, idep_genxml,
797ec681f3Smrg      idep_vulkan_util_headers, idep_vulkan_wsi_headers,
809f464c52Smaya    ],
8101e04c3fSmrg  )
8201e04c3fSmrgendforeach
8301e04c3fSmrg
8401e04c3fSmrglibanv_files = files(
857ec681f3Smrg  'anv_acceleration_structure.c',
8601e04c3fSmrg  'anv_allocator.c',
879f464c52Smaya  'anv_android.h',
8801e04c3fSmrg  'anv_batch_chain.c',
8901e04c3fSmrg  'anv_blorp.c',
9001e04c3fSmrg  'anv_cmd_buffer.c',
9101e04c3fSmrg  'anv_descriptor_set.c',
9201e04c3fSmrg  'anv_device.c',
9301e04c3fSmrg  'anv_formats.c',
9401e04c3fSmrg  'anv_genX.h',
9501e04c3fSmrg  'anv_image.c',
967ec681f3Smrg  'anv_measure.c',
977ec681f3Smrg  'anv_measure.h',
9801e04c3fSmrg  'anv_nir.h',
9901e04c3fSmrg  'anv_nir_add_base_work_group_id.c',
10001e04c3fSmrg  'anv_nir_apply_pipeline_layout.c',
1017ec681f3Smrg  'anv_nir_compute_push_layout.c',
10201e04c3fSmrg  'anv_nir_lower_multiview.c',
1037ec681f3Smrg  'anv_nir_lower_ubo_loads.c',
10401e04c3fSmrg  'anv_nir_lower_ycbcr_textures.c',
10501e04c3fSmrg  'anv_pass.c',
1067ec681f3Smrg  'anv_perf.c',
10701e04c3fSmrg  'anv_pipeline.c',
10801e04c3fSmrg  'anv_pipeline_cache.c',
10901e04c3fSmrg  'anv_private.h',
11001e04c3fSmrg  'anv_queue.c',
11101e04c3fSmrg  'anv_util.c',
11201e04c3fSmrg  'anv_wsi.c',
11301e04c3fSmrg)
11401e04c3fSmrg
11501e04c3fSmrganv_deps = [
11601e04c3fSmrg  dep_libdrm,
11701e04c3fSmrg  dep_valgrind,
1187ec681f3Smrg  idep_genxml,
11901e04c3fSmrg  idep_nir_headers,
1209f464c52Smaya  idep_vulkan_util_headers,
1217ec681f3Smrg  idep_vulkan_wsi_headers,
12201e04c3fSmrg]
12301e04c3fSmrganv_flags = [
12401e04c3fSmrg  no_override_init_args,
12501e04c3fSmrg  c_sse2_args,
12601e04c3fSmrg]
12701e04c3fSmrg
12801e04c3fSmrgif with_platform_x11
12901e04c3fSmrg  anv_deps += dep_xcb_dri3
13001e04c3fSmrgendif
13101e04c3fSmrg
13201e04c3fSmrgif with_platform_wayland
13301e04c3fSmrg  anv_deps += dep_wayland_client
13401e04c3fSmrgendif
13501e04c3fSmrg
1367ec681f3Smrgif system_has_kms_drm and not with_platform_android
13701e04c3fSmrg  libanv_files += files('anv_wsi_display.c')
13801e04c3fSmrgendif
13901e04c3fSmrg
14001e04c3fSmrgif with_xlib_lease
1417ec681f3Smrg  anv_deps += [dep_xlib_xrandr]
14201e04c3fSmrgendif
14301e04c3fSmrg
1449f464c52Smayaif with_platform_android
1459f464c52Smaya  libanv_files += files('anv_android.c')
1469f464c52Smayaelse
1479f464c52Smaya  libanv_files += files('anv_android_stubs.c')
1489f464c52Smayaendif
1499f464c52Smaya
15001e04c3fSmrglibanv_common = static_library(
15101e04c3fSmrg  'anv_common',
15201e04c3fSmrg  [
1537ec681f3Smrg    libanv_files, anv_entrypoints, sha1_h,
15401e04c3fSmrg    gen_xml_pack,
15501e04c3fSmrg  ],
15601e04c3fSmrg  include_directories : [
1577ec681f3Smrg    inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_intel, inc_compiler,
1587ec681f3Smrg    inc_util,
15901e04c3fSmrg  ],
16001e04c3fSmrg  c_args : anv_flags,
1617ec681f3Smrg  gnu_symbol_visibility : 'hidden',
16201e04c3fSmrg  dependencies : anv_deps,
16301e04c3fSmrg)
16401e04c3fSmrg
16501e04c3fSmrglibvulkan_intel = shared_library(
16601e04c3fSmrg  'vulkan_intel',
1677ec681f3Smrg  [files('anv_gem.c'), anv_entrypoints[0]],
16801e04c3fSmrg  include_directories : [
1697ec681f3Smrg    inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_intel, inc_compiler,
17001e04c3fSmrg  ],
1717ec681f3Smrg  link_whole : [libanv_common, libanv_per_hw_ver_libs],
17201e04c3fSmrg  link_with : [
1737ec681f3Smrg    libintel_compiler, libintel_dev, libisl, libblorp, libintel_perf,
17401e04c3fSmrg  ],
17501e04c3fSmrg  dependencies : [
1767ec681f3Smrg    dep_thread, dep_dl, dep_m, anv_deps, idep_libintel_common,
1777ec681f3Smrg    idep_nir, idep_genxml, idep_vulkan_util, idep_vulkan_wsi,
1787ec681f3Smrg    idep_mesautil, idep_xmlconfig,
17901e04c3fSmrg  ],
18001e04c3fSmrg  c_args : anv_flags,
1817ec681f3Smrg  gnu_symbol_visibility : 'hidden',
1827ec681f3Smrg  link_args : [ld_args_build_id, ld_args_bsymbolic, ld_args_gc_sections],
18301e04c3fSmrg  install : true,
18401e04c3fSmrg)
18501e04c3fSmrg
1867ec681f3Smrgif with_symbols_check
1877ec681f3Smrg  test(
1887ec681f3Smrg    'anv symbols check',
1897ec681f3Smrg    symbols_check,
1907ec681f3Smrg    args : [
1917ec681f3Smrg      '--lib', libvulkan_intel,
1927ec681f3Smrg      '--symbols-file', vulkan_icd_symbols,
1937ec681f3Smrg      symbols_check_args,
1947ec681f3Smrg    ],
1957ec681f3Smrg    suite : ['intel'],
1967ec681f3Smrg  )
1977ec681f3Smrgendif
1987ec681f3Smrg
19901e04c3fSmrgif with_tests
20001e04c3fSmrg  libvulkan_intel_test = static_library(
20101e04c3fSmrg    'vulkan_intel_test',
2027ec681f3Smrg    [files('anv_gem_stubs.c'), anv_entrypoints[0]],
20301e04c3fSmrg    include_directories : [
2047ec681f3Smrg      inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_intel, inc_compiler,
20501e04c3fSmrg    ],
20601e04c3fSmrg    link_whole : libanv_common,
20701e04c3fSmrg    link_with : [
2087ec681f3Smrg      libanv_per_hw_ver_libs, libintel_compiler, libintel_common, libintel_dev,
2097ec681f3Smrg      libisl, libblorp, libintel_perf,
21001e04c3fSmrg    ],
21101e04c3fSmrg    dependencies : [
2127ec681f3Smrg      dep_thread, dep_dl, dep_m, anv_deps,
2137ec681f3Smrg      idep_nir, idep_vulkan_util, idep_vulkan_wsi, idep_mesautil,
21401e04c3fSmrg    ],
21501e04c3fSmrg    c_args : anv_flags,
2167ec681f3Smrg    gnu_symbol_visibility : 'hidden',
21701e04c3fSmrg  )
21801e04c3fSmrg
2199f464c52Smaya  foreach t : ['block_pool_no_free', 'block_pool_grow_first',
2209f464c52Smaya               'state_pool_no_free', 'state_pool_free_list_only',
2219f464c52Smaya               'state_pool', 'state_pool_padding']
22201e04c3fSmrg    test(
22301e04c3fSmrg      'anv_@0@'.format(t),
22401e04c3fSmrg      executable(
22501e04c3fSmrg        t,
2267ec681f3Smrg        ['tests/@0@.c'.format(t), anv_entrypoints[0]],
2279f464c52Smaya        c_args : [ c_sse2_args ],
22801e04c3fSmrg        link_with : libvulkan_intel_test,
2297ec681f3Smrg        dependencies : [
2307ec681f3Smrg          dep_libdrm, dep_thread, dep_m, dep_valgrind,
2317ec681f3Smrg          idep_vulkan_util, idep_vulkan_wsi_headers,
2327ec681f3Smrg        ],
23301e04c3fSmrg        include_directories : [
2347ec681f3Smrg          inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_intel, inc_compiler,
23501e04c3fSmrg        ],
2369f464c52Smaya      ),
2379f464c52Smaya      suite : ['intel'],
23801e04c3fSmrg    )
23901e04c3fSmrg  endforeach
24001e04c3fSmrgendif
241