meson.build 5.45 KB
Newer Older
1
# Copyright 2019-2020, Collabora, Ltd.
Drew DeVault's avatar
Drew DeVault committed
2
3
4
5
6
# SPDX-License-Identifier: BSL-1.0

project(
	'xrt',
	['c', 'cpp'],
Jakob Bornecrantz's avatar
Jakob Bornecrantz committed
7
	version: '0.2.0',
Drew DeVault's avatar
Drew DeVault committed
8
9
10
11
	license: 'BSL-1.0',
	meson_version: '>=0.49.0',
	default_options: [
		'c_std=c11',
12
		'warning_level=3',
Drew DeVault's avatar
Drew DeVault committed
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
	],
)

cc = meson.get_compiler('c')
cpp = meson.get_compiler('cpp')

add_project_arguments(cc.get_supported_arguments([
	'-D_XOPEN_SOURCE=700',
	'-Wno-unused-parameter',
]), language: 'c')

add_project_arguments(cpp.get_supported_arguments([
	'-D_XOPEN_SOURCE=700',
	'-Wno-unused-parameter',
	'-Wno-deprecated-copy', # Eigen
]), language: 'cpp')

30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

#
# Pre-setting these variables
#

build_tracking = false

v4l2_required = false
hidapi_required = false
openhmd_required = false


#
# Adding dependencies
#

46
# When docs are disabled, doxygen will always appear as "not found"
47
doxygen = find_program('doxygen', required: get_option('docs'))
48
build_docs = doxygen.found()
49

Drew DeVault's avatar
Drew DeVault committed
50
51
glslangValidator = find_program('glslangValidator')

Jakob Bornecrantz's avatar
Jakob Bornecrantz committed
52
pthreads = cc.find_library('pthread', required: true)
53
rt = cc.find_library('rt', required: true)
Jakob Bornecrantz's avatar
Jakob Bornecrantz committed
54

Drew DeVault's avatar
Drew DeVault committed
55
avcodec = dependency('libavcodec', required: false)
56
egl     = dependency('egl', required: get_option('egl'))
Drew DeVault's avatar
Drew DeVault committed
57
egl     = egl.partial_dependency(includes: true)
Drew DeVault's avatar
Drew DeVault committed
58
59
60
eigen3  = dependency('eigen3')
libjpeg = dependency('libjpeg', required: false)
libusb  = dependency('libusb-1.0', required: false)
61
opengl  = dependency('gl', required: get_option('opengl'))
Jakob Bornecrantz's avatar
Jakob Bornecrantz committed
62
rs      = dependency('realsense2', required: false)
Drew DeVault's avatar
Drew DeVault committed
63
64
65
sdl2    = dependency('sdl2', required: get_option('gui'))
udev    = dependency('libudev', required: false)
libuvc  = dependency('libuvc', required: false)
66
vulkan  = dependency('vulkan', required: true)
67
zlib    = dependency('zlib', required: false)
Christoph Haag's avatar
Christoph Haag committed
68
survive = dependency('survive', required: false)
Drew DeVault's avatar
Drew DeVault committed
69

70
71
72
73
74
opencv = dependency('opencv4', required: false)
if not opencv.found()
	opencv = dependency('opencv', required: get_option('tracking'))
endif

Drew DeVault's avatar
Drew DeVault committed
75
76
77
78
79
if get_option('tracking').enabled() or get_option('tracking').auto()
	build_tracking = opencv.found()
endif

# TODO: make these behave well when not present
80
x11       = dependency('x11', required: get_option('xlib'))
81
x11_xcb   = dependency('x11-xcb', required: get_option('xlib'))
82
83
xcb       = dependency('xcb', required: get_option('xcb'))
xcb_randr = dependency('xcb-randr', required: get_option('xcb'))
84

85
86
87
wayland         = dependency('wayland-client', required: get_option('wayland'))
wayland_protos  = dependency('wayland-protocols', required: get_option('wayland'))
wayland_scanner = dependency('wayland-scanner', required: get_option('wayland'))
88
89
90
91
92
93
94

if wayland_scanner.found()
	wayland_scanner = find_program(
		wayland_scanner.get_pkgconfig_variable('wayland_scanner'),
		native: true,
	)
endif
Drew DeVault's avatar
Drew DeVault committed
95

96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
build_opengl = false
if get_option('opengl').enabled() or get_option('opengl').auto()
        build_opengl = opengl.found()
endif


build_egl = false
if get_option('egl').enabled() or get_option('egl').auto()
        build_egl = opengl.found() and egl.found()
endif

build_xlib = false
if get_option('xlib').enabled() or get_option('xlib').auto()
        build_xlib = x11.found()
endif

build_xcb = false
if get_option('xcb').enabled() or get_option('xcb').auto()
        build_xcb = xcb.found()
endif

117
build_xcb_xrandr_direct = build_xcb and build_xlib and xcb_randr.found() and x11_xcb.found()
118
119
120
121
122
123

build_wayland = false
if get_option('wayland').enabled() or get_option('wayland').auto()
        build_wayland = wayland.found() and wayland_protos.found() and wayland_scanner.found()
endif

124
# For now required on Linux
Jakob Bornecrantz's avatar
Jakob Bornecrantz committed
125
if target_machine.system() == 'linux'
126
127
128
	v4l2_required = true
endif

Drew DeVault's avatar
Drew DeVault committed
129
130
131
132
drivers = get_option('drivers')
if 'ohmd' in drivers
	openhmd_required = true
endif
133
if 'psvr' in drivers
Drew DeVault's avatar
Drew DeVault committed
134
135
136
137
138
139
140
	hidapi_required = true
endif
if 'v4l2' in drivers
	v4l2_required = true
endif

if 'auto' in drivers
141
	drivers += ['dummy', 'hdk', 'hydra', 'ns', 'psmv']
Drew DeVault's avatar
Drew DeVault committed
142
143
144
endif

openhmd = dependency('openhmd', required: openhmd_required)
145
hidapi  = dependency('hidapi-libusb', required: hidapi_required)
Drew DeVault's avatar
Drew DeVault committed
146
147
148
149
150
151
152
153
154
155
156
157
158
159
v4l2    = dependency('libv4l2', required: v4l2_required)

if openhmd.found() and ('auto' in drivers or 'ohmd' in drivers)
	if 'ohmd' not in drivers
		drivers += ['ohmd']
	endif
endif

if hidapi.found() and ('auto' in drivers or 'psvr' in drivers or 'hdk' in drivers)
	if 'psvr' not in drivers
		drivers += ['psvr']
	endif
endif

160
161
162
163
164
165
if zlib.found() and ('auto' in drivers or 'vive' in drivers)
	if 'vive' not in drivers
		drivers += ['vive']
	endif
endif

Jakob Bornecrantz's avatar
Jakob Bornecrantz committed
166
167
168
169
170
171
if rs.found() and ('auto' in drivers or 'rs' in drivers)
	if 'rs' not in drivers
		drivers += ['rs']
	endif
endif

Drew DeVault's avatar
Drew DeVault committed
172
173
174
175
176
177
if v4l2.found() and ('auto' in drivers or 'v4l2' in drivers)
	if 'v4l2' not in drivers
		drivers += ['v4l2']
	endif
endif

Christoph Haag's avatar
Christoph Haag committed
178
179
180
181
182
183
if survive.found() and ('survive' in drivers)
  if 'survive' not in drivers
    drivers += ['survive']
    endif
endif

Drew DeVault's avatar
Drew DeVault committed
184
185
186
187
if drivers.length() == 0 or drivers == ['auto']
	error('You must enable at least one driver.')
endif

188
189
190
191
#
# Go down sub directories
#

Drew DeVault's avatar
Drew DeVault committed
192
193
subdir('src')

194
if build_docs
Drew DeVault's avatar
Drew DeVault committed
195
196
197
	subdir('doc')
endif

198
199
200
201
202

#
# Final bits
#

Drew DeVault's avatar
Drew DeVault committed
203
204
205
206
207
208
209
210
211
212
# This is here so that it gets emitted in the top-level build directory
manifest_devconf = configuration_data()
# https://github.com/mesonbuild/meson/issues/5940
manifest_devconf.set('runtime_path', openxr.full_path())

manifest_dev_json = configure_file(
	input: manifest_in,
	output: 'openxr_monado-dev.json',
	configuration: manifest_devconf,
)
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227

message('Configuration done!')
message('    drivers:  ' + ', '.join(drivers))

if build_docs
	message('    docs:     yes')
else
	message('    docs:     no')
endif

if build_tracking
	message('    tracking: yes')
else
	message('    tracking: no')
endif