• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1vulkan_sources = [
2  'gstvulkan.c',
3  'vkbuffermemory.c',
4  'vkbufferpool.c',
5  'vkdevice.c',
6  'vkdisplay.c',
7  'vkerror.c',
8  'vkfence.c',
9  'vkimagememory.c',
10  'vkinstance.c',
11  'vkmemory.c',
12  'vkqueue.c',
13  'vksink.c',
14  'vkswapper.c',
15  'vktrash.c',
16  'vkupload.c',
17  'vkutils.c',
18  'vkwindow.c',
19]
20
21vulkan_objc_args = []
22vulkan_defines = []
23optional_deps = []
24if get_option('vulkan').disabled()
25  subdir_done()
26endif
27
28if host_system == 'ios'
29  vulkan_dep = cc.find_library('MoltenVK', required : get_option('vulkan'))
30else
31  vulkan_dep = cc.find_library('vulkan', required : get_option('vulkan'))
32endif
33has_vulkan_header = cc.has_header('vulkan/vulkan.h')
34if not has_vulkan_header and get_option('vulkan').enabled()
35  error('vulkan plugin enabled, but vulkan.h not found')
36endif
37
38if vulkan_dep.found() and has_vulkan_header
39  have_vulkan_windowing = false
40
41  vkconf = configuration_data()
42
43  xcb_dep = dependency('xcb', version : '>=1.10', required : get_option('x11'))
44  if xcb_dep.found()
45    vulkan_sources += [
46      'xcb/vkdisplay_xcb.c',
47      'xcb/vkwindow_xcb.c',
48      'xcb/xcb_event_source.c',
49    ]
50
51    optional_deps += xcb_dep
52    have_vulkan_windowing = true
53    vkconf.set10('GST_VULKAN_HAVE_WINDOW_XCB', 1)
54  endif
55
56  wayland_client_dep = dependency('wayland-client', version : '>=1.4', required : get_option('wayland'))
57  if wayland_client_dep.found()
58    vulkan_sources += [
59      'wayland/vkdisplay_wayland.c',
60      'wayland/vkwindow_wayland.c',
61      'wayland/wayland_event_source.c',
62    ]
63
64    optional_deps += wayland_client_dep
65    have_vulkan_windowing = true
66    vkconf.set10('GST_VULKAN_HAVE_WINDOW_WAYLAND', 1)
67  endif
68
69  if ['darwin', 'ios'].contains(host_system)
70    objc = meson.get_compiler('objc')
71    if not objc.has_argument('-fobjc-arc')
72      error('ARC is required for building')
73    endif
74
75    vulkan_objc_args += ['-fobjc-arc']
76
77    foundation_dep = dependency('appleframeworks', modules : ['Foundation'], required : get_option('vulkan'))
78    quartzcore_dep = dependency('appleframeworks', modules : ['QuartzCore'], required : get_option('vulkan'))
79    corefoundation_dep = dependency('appleframeworks', modules : ['CoreFoundation'], required : get_option('vulkan'))
80    if foundation_dep.found() and quartzcore_dep.found() and corefoundation_dep.found()
81      optional_deps += [foundation_dep, corefoundation_dep, quartzcore_dep]
82    endif
83  endif
84
85  if host_system == 'darwin'
86    cocoa_dep = dependency('appleframeworks', modules : ['Cocoa'], required : get_option('vulkan'))
87
88    if cocoa_dep.found()
89      vulkan_sources += [
90        'cocoa/vkdisplay_cocoa.m',
91        'cocoa/vkwindow_cocoa.m',
92      ]
93      optional_deps += [cocoa_dep]
94      have_vulkan_windowing = true
95      vkconf.set10('GST_VULKAN_HAVE_WINDOW_COCOA', 1)
96    endif
97  endif
98
99  if host_system == 'ios'
100    uikit_dep = dependency('appleframeworks', modules : ['UIKit'], required : get_option('vulkan'))
101
102    if uikit_dep.found()
103      vulkan_sources += [
104        'ios/vkdisplay_ios.m',
105        'ios/vkwindow_ios.m',
106      ]
107      optional_deps += [uikit_dep]
108      have_vulkan_windowing = true
109      vkconf.set10('GST_VULKAN_HAVE_WINDOW_IOS', 1)
110    endif
111  endif
112
113  if have_vulkan_windowing
114    configure_file(input : 'vkconfig.h.meson',
115      output : 'vkconfig.h',
116      configuration : vkconf)
117
118    gstvulkan = library('gstvulkan',
119      vulkan_sources,
120      c_args : gst_plugins_bad_args + vulkan_defines,
121      objc_args : gst_plugins_bad_args + vulkan_defines + vulkan_objc_args,
122      link_args : noseh_link_args,
123      include_directories : [configinc],
124      dependencies : [gstvideo_dep, gstbase_dep, vulkan_dep] + optional_deps,
125      install : true,
126      install_dir : plugins_install_dir,
127    )
128    pkgconfig.generate(gstvulkan, install_dir : plugins_pkgconfig_install_dir)
129  endif
130endif
131
132