1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
# shaderc
shaderc = dependency('shaderc', version: '>=2019.1', required: get_option('shaderc'))
components.set('shaderc', shaderc.found())
if shaderc.found()
build_deps += shaderc
sources += 'glsl/spirv_shaderc.c'
endif
# glslang
glslang = disabler()
glslang_req = get_option('glslang')
if glslang_req.auto() and shaderc.found()
# we only need one or the other, and shaderc is preferred
message('Skipping `glslang` because `shaderc` is available')
elif not glslang_req.disabled()
glslang_deps = [
cxx.find_library('glslang-default-resource-limits', required: false)
]
# meson doesn't respect generator expressions in INTERFACE_LINK_LIBRARIES
# https://github.com/mesonbuild/meson/issues/8232
# TODO: Use the following once it's fixed
# glslang = dependency('glslang', method: 'cmake', modules: ['glslang::SPIRV'])
prefer_static = get_option('prefer_static')
found_lib = false
foreach arg : [[prefer_static, false], [not prefer_static, glslang_req]]
static = arg[0]
required = arg[1]
spirv = cxx.find_library('SPIRV', required: required, static: static)
if not spirv.found()
continue
endif
glslang_deps += spirv
if static
glslang_deps += [
# Always required for static linking
cxx.find_library('MachineIndependent', required: true, static: true),
cxx.find_library('OSDependent', required: true, static: true),
cxx.find_library('OGLCompiler', required: true, static: true),
cxx.find_library('GenericCodeGen', required: true, static: true),
# SPIRV-Tools are required only if optimizer is enabled in glslang build
cxx.find_library('SPIRV-Tools', required: false, static: true),
cxx.find_library('SPIRV-Tools-opt', required: false, static: true),
]
endif
found_lib = true
break
endforeach
if found_lib and cc.has_header('glslang/build_info.h')
glslang = declare_dependency(dependencies: glslang_deps)
endif
endif
components.set('glslang', glslang.found())
if glslang.found()
build_deps += glslang
sources += [
'glsl/glslang.cc',
'glsl/glslang_resources.c',
'glsl/spirv_glslang.c',
]
endif
|