summaryrefslogtreecommitdiffstats
path: root/demos/meson.build
diff options
context:
space:
mode:
Diffstat (limited to 'demos/meson.build')
-rw-r--r--demos/meson.build170
1 files changed, 170 insertions, 0 deletions
diff --git a/demos/meson.build b/demos/meson.build
new file mode 100644
index 0000000..fef665a
--- /dev/null
+++ b/demos/meson.build
@@ -0,0 +1,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