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