summaryrefslogtreecommitdiffstats
path: root/demos/meson.build
blob: fef665a7b78bf74c8b663d780182f8f7e057532d (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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
glfw = dependency('glfw3', required: false)
sdl = dependency('sdl2', required: false)
sdl_image = dependency('SDL2_image', required: false)

ffmpeg_deps = [
  dependency('libavcodec', required: false),
  dependency('libavformat', required: false),
  dependency('libavutil', required: false),
]

ffmpeg_found = true
foreach dep : ffmpeg_deps
  ffmpeg_found = ffmpeg_found and dep.found()
endforeach

nuklear = disabler()
nuklear_inc = include_directories('./3rdparty/nuklear')
if cc.has_header('nuklear.h', include_directories: nuklear_inc)
  nuklear_lib = static_library('nuklear',
    include_directories: nuklear_inc,
    c_args: ['-O2', '-Wno-missing-prototypes'],
    dependencies: [ libplacebo, libm ],
    sources: 'ui.c',
  )

  nuklear = declare_dependency(
    include_directories: nuklear_inc,
    link_with: nuklear_lib,
  )
else
  warning('Nuklear was not found in `demos/3rdparty`. Please run ' +
          '`git submodule update --init` followed by `meson --wipe`.')
endif

conf_demos = configuration_data()
conf_demos.set('HAVE_NUKLEAR', nuklear.found())
conf_demos.set('HAVE_EGL', cc.check_header('EGL/egl.h', required: false))

apis = []

# Enable all supported combinations of API and windowing system
if glfw.found()
  if components.get('vulkan')
    conf_demos.set('HAVE_GLFW_VULKAN', true)
    apis += static_library('glfw-vk',
      dependencies: [libplacebo, libm, glfw, vulkan_headers],
      sources: 'window_glfw.c',
      c_args: ['-DUSE_VK'],
      include_directories: vulkan_headers_inc,
    )
  endif

  if components.get('opengl')
    conf_demos.set('HAVE_GLFW_OPENGL', true)
    apis += static_library('glfw-gl',
      dependencies: [libplacebo, glfw],
      sources: 'window_glfw.c',
      c_args: '-DUSE_GL',
    )
  endif

  if components.get('d3d11')
    conf_demos.set('HAVE_GLFW_D3D11', true)
    apis += static_library('glfw-d3d11',
      dependencies: [libplacebo, glfw],
      sources: 'window_glfw.c',
      c_args: '-DUSE_D3D11',
    )
  endif
endif

if sdl.found()
  if components.get('vulkan')
    conf_demos.set('HAVE_SDL_VULKAN', true)
    apis += static_library('sdl-vk',
      dependencies: [libplacebo, sdl, vulkan_headers],
      sources: 'window_sdl.c',
      c_args: ['-DUSE_VK'],
      include_directories: vulkan_headers_inc,
    )
  endif

  if components.get('opengl')
    conf_demos.set('HAVE_SDL_OPENGL', true)
    apis += static_library('sdl-gl',
      dependencies: [libplacebo, sdl],
      sources: 'window_sdl.c',
      c_args: '-DUSE_GL',
    )
  endif
endif

configure_file(
  output: 'config_demos.h',
  configuration: conf_demos,
)

if apis.length() == 0
  warning('Demos enabled but no supported combination of windowing system ' +
          'and graphical APIs was found. Demo programs require either GLFW or ' +
          'SDL and either Vulkan or OpenGL to function.')
else

  additional_dep = []
  if host_machine.system() == 'windows'
    additional_dep += cc.find_library('winmm')
  endif

  dep = declare_dependency(
    dependencies: [ libplacebo, build_deps ] + additional_dep,
    sources: ['window.c', 'utils.c'],
    include_directories: vulkan_headers_inc,
    link_with: apis,
  )

  # Graphical demo programs
  executable('colors', 'colors.c',
    dependencies: [ dep, pl_clock, libm ],
    link_args: link_args,
    link_depends: link_depends,
  )

  if sdl_image.found()
    executable('sdlimage', 'sdlimage.c',
      dependencies: [ dep, libm, sdl_image ],
      link_args: link_args,
      link_depends: link_depends,
    )
  endif

  if ffmpeg_found
    plplay_deps = [ dep, pl_thread, pl_clock ] + ffmpeg_deps
    if nuklear.found()
      plplay_deps += nuklear
    endif
    if host_machine.system() == 'windows'
      plplay_deps += cc.find_library('shlwapi', required: true)
    endif
    plplay_sources = ['plplay.c', 'settings.c']
    if host_machine.system() == 'windows'
      windows = import('windows')
      plplay_sources += windows.compile_resources(demos_rc, depends: version_h,
                          include_directories: meson.project_source_root()/'win32')
    endif
    executable('plplay', plplay_sources,
      dependencies: plplay_deps,
      link_args: link_args,
      link_depends: link_depends,
      install: true,
    )
  endif

endif

# Headless vulkan demos
if components.get('vk-proc-addr')
  executable('video-filtering', 'video-filtering.c',
    dependencies: [ libplacebo, pl_clock, pl_thread, vulkan_loader ],
    c_args: '-O2',
    link_args: link_args,
    link_depends: link_depends,
  )

  executable('multigpu-bench', 'multigpu-bench.c',
    dependencies: [ libplacebo, pl_clock, vulkan_loader ],
    c_args: '-O2',
    link_args: link_args,
    link_depends: link_depends,
  )
endif