summaryrefslogtreecommitdiffstats
path: root/src/glsl/meson.build
blob: 5cebfb89181d5454e06bf044a945f30e7b55bc3c (plain)
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