diff options
Diffstat (limited to '')
-rw-r--r-- | demos/meson.build | 170 |
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 |