1b8e80941Smrg# Copyright © 2017-2019 Intel Corporation
2b8e80941Smrg
3b8e80941Smrg# Permission is hereby granted, free of charge, to any person obtaining a copy
4b8e80941Smrg# of this software and associated documentation files (the "Software"), to deal
5b8e80941Smrg# in the Software without restriction, including without limitation the rights
6b8e80941Smrg# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7b8e80941Smrg# copies of the Software, and to permit persons to whom the Software is
8b8e80941Smrg# furnished to do so, subject to the following conditions:
9b8e80941Smrg
10b8e80941Smrg# The above copyright notice and this permission notice shall be included in
11b8e80941Smrg# all copies or substantial portions of the Software.
12b8e80941Smrg
13b8e80941Smrg# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14b8e80941Smrg# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15b8e80941Smrg# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16b8e80941Smrg# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17b8e80941Smrg# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18b8e80941Smrg# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19b8e80941Smrg# SOFTWARE.
20b8e80941Smrg
21b8e80941Smrganv_extensions_py = files('anv_extensions.py')
22b8e80941Smrg
23b8e80941Smrganv_entrypoints = custom_target(
24b8e80941Smrg  'anv_entrypoints.[ch]',
25b8e80941Smrg  input : ['anv_entrypoints_gen.py', vk_api_xml],
26b8e80941Smrg  output : ['anv_entrypoints.h', 'anv_entrypoints.c'],
27b8e80941Smrg  command : [
28b8e80941Smrg    prog_python, '@INPUT0@', '--xml', '@INPUT1@',
29b8e80941Smrg    '--outdir', meson.current_build_dir(),
30b8e80941Smrg  ],
31b8e80941Smrg  depend_files : anv_extensions_py,
32b8e80941Smrg)
33b8e80941Smrg
34b8e80941Smrganv_extensions_c = custom_target(
35b8e80941Smrg  'anv_extensions.c',
36b8e80941Smrg  input : ['anv_extensions_gen.py', vk_api_xml],
37b8e80941Smrg  output : 'anv_extensions.c',
38b8e80941Smrg  command : [
39b8e80941Smrg    prog_python, '@INPUT0@', '--xml', '@INPUT1@',
40b8e80941Smrg    '--out-c', '@OUTPUT@',
41b8e80941Smrg  ],
42b8e80941Smrg  depend_files : anv_extensions_py,
43b8e80941Smrg)
44b8e80941Smrg
45b8e80941Smrganv_extensions_h = custom_target(
46b8e80941Smrg  'anv_extensions.h',
47b8e80941Smrg  input : ['anv_extensions_gen.py', vk_api_xml],
48b8e80941Smrg  output : 'anv_extensions.h',
49b8e80941Smrg  command : [
50b8e80941Smrg    prog_python, '@INPUT0@', '--xml', '@INPUT1@',
51b8e80941Smrg    '--out-h', '@OUTPUT@',
52b8e80941Smrg  ],
53b8e80941Smrg  depend_files : anv_extensions_py,
54b8e80941Smrg)
55b8e80941Smrg
56b8e80941Smrgintel_icd = custom_target(
57b8e80941Smrg  'intel_icd',
58b8e80941Smrg  input : 'anv_icd.py',
59b8e80941Smrg  output : 'intel_icd.@0@.json'.format(host_machine.cpu()),
60b8e80941Smrg  command : [
61b8e80941Smrg    prog_python, '@INPUT@',
62b8e80941Smrg    '--lib-path', join_paths(get_option('prefix'), get_option('libdir')),
63b8e80941Smrg    '--out', '@OUTPUT@',
64b8e80941Smrg  ],
65b8e80941Smrg  depend_files : anv_extensions_py,
66b8e80941Smrg  build_by_default : true,
67b8e80941Smrg  install_dir : with_vulkan_icd_dir,
68b8e80941Smrg  install : true,
69b8e80941Smrg)
70b8e80941Smrg
71b8e80941Smrgdev_icd = custom_target(
72b8e80941Smrg  'dev_icd',
73b8e80941Smrg  input : 'anv_icd.py',
74b8e80941Smrg  output : 'dev_icd.@0@.json'.format(host_machine.cpu()),
75b8e80941Smrg  command : [
76b8e80941Smrg    prog_python, '@INPUT@', '--lib-path', meson.current_build_dir(),
77b8e80941Smrg    '--out', '@OUTPUT@'
78b8e80941Smrg  ],
79b8e80941Smrg  depend_files : files('anv_extensions.py'),
80b8e80941Smrg  build_by_default : true,
81b8e80941Smrg  install : false,
82b8e80941Smrg)
83b8e80941Smrg
84b8e80941Smrglibanv_gen_libs = []
85b8e80941Smrganv_gen_files = files(
86b8e80941Smrg  'genX_blorp_exec.c',
87b8e80941Smrg  'genX_cmd_buffer.c',
88b8e80941Smrg  'genX_gpu_memcpy.c',
89b8e80941Smrg  'genX_pipeline.c',
90b8e80941Smrg  'genX_query.c',
91b8e80941Smrg  'genX_state.c',
92b8e80941Smrg)
93b8e80941Smrgforeach g : [['70', ['gen7_cmd_buffer.c']], ['75', ['gen7_cmd_buffer.c']],
94b8e80941Smrg             ['80', ['gen8_cmd_buffer.c']], ['90', ['gen8_cmd_buffer.c']],
95b8e80941Smrg             ['100', ['gen8_cmd_buffer.c']], ['110', ['gen8_cmd_buffer.c']]]
96b8e80941Smrg  _gen = g[0]
97b8e80941Smrg  libanv_gen_libs += static_library(
98b8e80941Smrg    'anv_gen@0@'.format(_gen),
99b8e80941Smrg    [anv_gen_files, g[1], anv_entrypoints[0], anv_extensions_h],
100b8e80941Smrg    include_directories : [
101b8e80941Smrg      inc_common, inc_compiler, inc_include, inc_intel, inc_vulkan_wsi,
102b8e80941Smrg    ],
103b8e80941Smrg    c_args : [
104b8e80941Smrg      c_vis_args, no_override_init_args, c_sse2_args,
105b8e80941Smrg      '-DGEN_VERSIONx10=@0@'.format(_gen),
106b8e80941Smrg    ],
107b8e80941Smrg    dependencies : [
108b8e80941Smrg      dep_libdrm, dep_valgrind, idep_nir_headers, idep_genxml, idep_vulkan_util_headers,
109b8e80941Smrg    ],
110b8e80941Smrg  )
111b8e80941Smrgendforeach
112b8e80941Smrg
113b8e80941Smrglibanv_files = files(
114b8e80941Smrg  'anv_allocator.c',
115b8e80941Smrg  'anv_android.h',
116b8e80941Smrg  'anv_batch_chain.c',
117b8e80941Smrg  'anv_blorp.c',
118b8e80941Smrg  'anv_cmd_buffer.c',
119b8e80941Smrg  'anv_descriptor_set.c',
120b8e80941Smrg  'anv_device.c',
121b8e80941Smrg  'anv_dump.c',
122b8e80941Smrg  'anv_formats.c',
123b8e80941Smrg  'anv_genX.h',
124b8e80941Smrg  'anv_image.c',
125b8e80941Smrg  'anv_intel.c',
126b8e80941Smrg  'anv_nir.h',
127b8e80941Smrg  'anv_nir_add_base_work_group_id.c',
128b8e80941Smrg  'anv_nir_apply_pipeline_layout.c',
129b8e80941Smrg  'anv_nir_lower_input_attachments.c',
130b8e80941Smrg  'anv_nir_lower_multiview.c',
131b8e80941Smrg  'anv_nir_lower_push_constants.c',
132b8e80941Smrg  'anv_nir_lower_ycbcr_textures.c',
133b8e80941Smrg  'anv_pass.c',
134b8e80941Smrg  'anv_pipeline.c',
135b8e80941Smrg  'anv_pipeline_cache.c',
136b8e80941Smrg  'anv_private.h',
137b8e80941Smrg  'anv_queue.c',
138b8e80941Smrg  'anv_util.c',
139b8e80941Smrg  'anv_wsi.c',
140b8e80941Smrg  'vk_format_info.h',
141b8e80941Smrg)
142b8e80941Smrg
143b8e80941Smrganv_deps = [
144b8e80941Smrg  dep_libdrm,
145b8e80941Smrg  dep_valgrind,
146b8e80941Smrg  idep_nir_headers,
147b8e80941Smrg  idep_vulkan_util_headers,
148b8e80941Smrg]
149b8e80941Smrganv_flags = [
150b8e80941Smrg  c_vis_args,
151b8e80941Smrg  no_override_init_args,
152b8e80941Smrg  c_sse2_args,
153b8e80941Smrg]
154b8e80941Smrg
155b8e80941Smrgif with_platform_x11
156b8e80941Smrg  anv_deps += dep_xcb_dri3
157b8e80941Smrg  anv_flags += [
158b8e80941Smrg    '-DVK_USE_PLATFORM_XCB_KHR',
159b8e80941Smrg    '-DVK_USE_PLATFORM_XLIB_KHR',
160b8e80941Smrg  ]
161b8e80941Smrg  libanv_files += files('anv_wsi_x11.c')
162b8e80941Smrgendif
163b8e80941Smrg
164b8e80941Smrgif with_platform_wayland
165b8e80941Smrg  anv_deps += dep_wayland_client
166b8e80941Smrg  anv_flags += '-DVK_USE_PLATFORM_WAYLAND_KHR'
167b8e80941Smrg  libanv_files += files('anv_wsi_wayland.c')
168b8e80941Smrgendif
169b8e80941Smrg
170b8e80941Smrgif with_platform_drm
171b8e80941Smrg  anv_flags += '-DVK_USE_PLATFORM_DISPLAY_KHR'
172b8e80941Smrg  libanv_files += files('anv_wsi_display.c')
173b8e80941Smrgendif
174b8e80941Smrg
175b8e80941Smrgif with_xlib_lease
176b8e80941Smrg  anv_deps += [dep_xcb_xrandr, dep_xlib_xrandr]
177b8e80941Smrg  anv_flags += '-DVK_USE_PLATFORM_XLIB_XRANDR_EXT'
178b8e80941Smrgendif
179b8e80941Smrg
180b8e80941Smrgif with_platform_android
181b8e80941Smrg  anv_deps += dep_android
182b8e80941Smrg  anv_flags += '-DVK_USE_PLATFORM_ANDROID_KHR'
183b8e80941Smrg  libanv_files += files('anv_android.c')
184b8e80941Smrgelse
185b8e80941Smrg  libanv_files += files('anv_android_stubs.c')
186b8e80941Smrgendif
187b8e80941Smrg
188b8e80941Smrglibanv_common = static_library(
189b8e80941Smrg  'anv_common',
190b8e80941Smrg  [
191b8e80941Smrg    libanv_files, anv_entrypoints, anv_extensions_c, anv_extensions_h, sha1_h,
192b8e80941Smrg    gen_xml_pack,
193b8e80941Smrg  ],
194b8e80941Smrg  include_directories : [
195b8e80941Smrg    inc_common, inc_intel, inc_compiler, inc_include,
196b8e80941Smrg    inc_vulkan_wsi, inc_util,
197b8e80941Smrg  ],
198b8e80941Smrg  c_args : anv_flags,
199b8e80941Smrg  dependencies : anv_deps,
200b8e80941Smrg)
201b8e80941Smrg
202b8e80941Smrglibvulkan_intel = shared_library(
203b8e80941Smrg  'vulkan_intel',
204b8e80941Smrg  [files('anv_gem.c'), anv_entrypoints[0], anv_extensions_h],
205b8e80941Smrg  include_directories : [
206b8e80941Smrg    inc_common, inc_intel, inc_compiler, inc_include, inc_vulkan_wsi,
207b8e80941Smrg  ],
208b8e80941Smrg  link_whole : [libanv_common, libanv_gen_libs],
209b8e80941Smrg  link_with : [
210b8e80941Smrg    libintel_compiler, libintel_common, libintel_dev, libisl, libblorp,
211b8e80941Smrg    libvulkan_wsi, libmesa_util,
212b8e80941Smrg  ],
213b8e80941Smrg  dependencies : [
214b8e80941Smrg    dep_thread, dep_dl, dep_m, anv_deps, idep_nir, idep_genxml, idep_vulkan_util
215b8e80941Smrg  ],
216b8e80941Smrg  c_args : anv_flags,
217b8e80941Smrg  link_args : ['-Wl,--build-id=sha1', ld_args_bsymbolic, ld_args_gc_sections],
218b8e80941Smrg  install : true,
219b8e80941Smrg)
220b8e80941Smrg
221b8e80941Smrgif with_tests
222b8e80941Smrg  libvulkan_intel_test = static_library(
223b8e80941Smrg    'vulkan_intel_test',
224b8e80941Smrg    [files('anv_gem_stubs.c'), anv_entrypoints[0], anv_extensions_h],
225b8e80941Smrg    include_directories : [
226b8e80941Smrg      inc_common, inc_intel, inc_compiler, inc_include, inc_vulkan_wsi,
227b8e80941Smrg    ],
228b8e80941Smrg    link_whole : libanv_common,
229b8e80941Smrg    link_with : [
230b8e80941Smrg      libanv_gen_libs, libintel_compiler, libintel_common, libintel_dev,
231b8e80941Smrg      libisl, libblorp, libvulkan_wsi, libmesa_util,
232b8e80941Smrg    ],
233b8e80941Smrg    dependencies : [
234b8e80941Smrg      dep_thread, dep_dl, dep_m, anv_deps, idep_nir, idep_vulkan_util
235b8e80941Smrg    ],
236b8e80941Smrg    c_args : anv_flags,
237b8e80941Smrg  )
238b8e80941Smrg
239b8e80941Smrg  foreach t : ['block_pool_no_free', 'block_pool_grow_first',
240b8e80941Smrg               'state_pool_no_free', 'state_pool_free_list_only',
241b8e80941Smrg               'state_pool', 'state_pool_padding']
242b8e80941Smrg    test(
243b8e80941Smrg      'anv_@0@'.format(t),
244b8e80941Smrg      executable(
245b8e80941Smrg        t,
246b8e80941Smrg        ['tests/@0@.c'.format(t), anv_entrypoints[0], anv_extensions_h],
247b8e80941Smrg        c_args : [ c_sse2_args ],
248b8e80941Smrg        link_with : libvulkan_intel_test,
249b8e80941Smrg        dependencies : [dep_libdrm, dep_thread, dep_m, dep_valgrind, idep_vulkan_util, ],
250b8e80941Smrg        include_directories : [
251b8e80941Smrg          inc_common, inc_intel, inc_compiler, inc_vulkan_wsi,
252b8e80941Smrg        ],
253b8e80941Smrg      ),
254b8e80941Smrg      suite : ['intel'],
255b8e80941Smrg    )
256b8e80941Smrg  endforeach
257b8e80941Smrgendif
258