From 6bc6a85d6d9f927b00d34ef1380f17e01aca6229 Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Sat, 24 Dec 2022 16:59:24 +0000 Subject: [PATCH] build: Add options for building layer/executable --- layer/meson.build | 4 ++ meson.build | 136 ++++--------------------------------------- meson_options.txt | 2 + protocol/meson.build | 2 - src/meson.build | 116 ++++++++++++++++++++++++++++++++++++ 5 files changed, 134 insertions(+), 126 deletions(-) create mode 100644 src/meson.build diff --git a/layer/meson.build b/layer/meson.build index 963c374..202e912 100644 --- a/layer/meson.build +++ b/layer/meson.build @@ -1,3 +1,7 @@ +vkroots_dep = dependency('vkroots') +dep_xcb = dependency('xcb') +dep_x11_xcb = dependency('x11-xcb') +wayland_client = dependency('wayland-client') gamescope_wsi_layer = shared_library('VkLayer_FROG_gamescope_wsi', 'VkLayer_FROG_gamescope_wsi.cpp', protocols_client_src, dependencies : [ vkroots_dep, dep_xcb, dep_x11, dep_x11_xcb, wayland_client ], diff --git a/meson.build b/meson.build index 8c4d7b4..5c7617f 100644 --- a/meson.build +++ b/meson.build @@ -24,103 +24,12 @@ add_project_arguments(cppc.get_supported_arguments([ '-Wno-unused-const-variable', ]), language: 'cpp') -dep_x11 = dependency('x11') -dep_xdamage = dependency('xdamage') -dep_xcomposite = dependency('xcomposite') -dep_xrender = dependency('xrender') -dep_xext = dependency('xext') -dep_xfixes = dependency('xfixes') -dep_xxf86vm = dependency('xxf86vm') -dep_xtst = dependency('xtst') -dep_xres = dependency('xres') -dep_xcb = dependency('xcb') -dep_x11_xcb = dependency('x11-xcb') - -drm_dep = dependency('libdrm', version: '>= 2.4.113') -vulkan_dep = dependency('vulkan') - -wayland_client = dependency('wayland-client') -wayland_server = dependency('wayland-server', version: '>=1.21') -wayland_protos = dependency('wayland-protocols', version: '>=1.17') -xkbcommon = dependency('xkbcommon') -thread_dep = dependency('threads') -cap_dep = dependency('libcap') -sdl_dep = dependency('SDL2') pipewire_dep = dependency('libpipewire-0.3', required: get_option('pipewire')) librt_dep = cppc.find_library('rt', required : get_option('pipewire')) hwdata_dep = dependency('hwdata') -stb_dep = dependency('stb') -vkroots_dep = dependency('vkroots') - -wlroots_dep = dependency( - 'wlroots', - version: ['>= 0.16.0', '< 0.17.0'], - fallback: ['wlroots', 'wlroots'], - default_options: ['default_library=static', 'examples=false', 'xwayland=enabled', 'backends=libinput', 'renderers=[]', 'allocators=[]'], -) - -displayinfo_dep = dependency( - 'display-info', - version: ['>= 0.0.0', '< 0.1.0'], - fallback: ['libdisplay-info', 'di_dep'], - default_options: ['default_library=static'], -) - -required_wlroots_features = ['xwayland', 'libinput_backend'] -foreach feat : required_wlroots_features - if wlroots_dep.get_variable('have_' + feat) != 'true' - error('Cannot use wlroots built without ' + feat + ' support') - endif -endforeach - -# Vulkan headers are installed separately from the loader (which ships the -# pkg-config file) -if not cppc.check_header('vulkan/vulkan.h', dependencies: vulkan_dep) - error('Missing vulkan-headers') -endif - - -glsl_compiler = find_program('glslangValidator', native: true) - -# Use --depfile to rebuild shaders when included files have changed. Sadly debian based -# distros don't have up-to-date glslang so we need to check for support first. -if run_command(glsl_compiler, ['--version', '--depfile', 'dummy.dep'], check: false).returncode() == 0 - glsl_generator = generator( - glsl_compiler, - output : ['@BASENAME@.h'], - arguments : ['-V', '@INPUT@', '--vn', '@BASENAME@', '-o', '@OUTPUT@', '--depfile', '@DEPFILE@', '--quiet'], - depfile : '@BASENAME@.h.d', - ) -else - glsl_generator = generator( - glsl_compiler, - output : ['@BASENAME@.h'], - arguments : ['-V', '@INPUT@', '--vn', '@BASENAME@', '-o', '@OUTPUT@'], - ) -endif - -shader_src = [ - 'src/shaders/cs_composite_blit.comp', - 'src/shaders/cs_composite_blur.comp', - 'src/shaders/cs_composite_blur_cond.comp', - 'src/shaders/cs_composite_rcas.comp', - 'src/shaders/cs_easu.comp', - 'src/shaders/cs_easu_fp16.comp', - 'src/shaders/cs_gaussian_blur_horizontal.comp', - 'src/shaders/cs_nis.comp', - 'src/shaders/cs_nis_fp16.comp', - 'src/shaders/cs_rgb_to_nv12.comp', -] - -spirv_shaders = glsl_generator.process(shader_src) - -liftoff_dep = dependency( - 'libliftoff', - version: ['>= 0.3.0', '< 0.4.0'], - fallback: ['libliftoff', 'liftoff'], - default_options: ['default_library=static'], -) +dep_x11 = dependency('x11') +vulkan_dep = dependency('vulkan') add_project_arguments( '-DHAVE_PIPEWIRE=@0@'.format(pipewire_dep.found().to_int()), @@ -128,39 +37,18 @@ add_project_arguments( language: 'cpp', ) -src = [ - 'src/steamcompmgr.cpp', - 'src/main.cpp', - 'src/wlserver.cpp', - 'src/drm.cpp', - 'src/modegen.cpp', - 'src/sdlwindow.cpp', - 'src/vblankmanager.cpp', - 'src/rendervulkan.cpp', - 'src/log.cpp', - 'src/ime.cpp', - 'src/mangoapp.cpp', -] - -src += spirv_shaders - -if pipewire_dep.found() - src += 'src/pipewire.cpp' +# Vulkan headers are installed separately from the loader (which ships the +# pkg-config file) +if not cppc.check_header('vulkan/vulkan.h', dependencies: vulkan_dep) + error('Missing vulkan-headers') endif subdir('protocol') -subdir('layer') +if get_option('enable_gamescope_wsi_layer') + subdir('layer') +endif -executable( - 'gamescope', - src, - dependencies: [ - dep_x11, dep_xdamage, dep_xcomposite, dep_xrender, dep_xext, dep_xfixes, - dep_xxf86vm, dep_xres, drm_dep, wayland_server, - xkbcommon, thread_dep, sdl_dep, wlroots_dep, - vulkan_dep, liftoff_dep, dep_xtst, cap_dep, pipewire_dep, librt_dep, - stb_dep, displayinfo_dep, - ], - install: true, -) +if get_option('enable_gamescope') + subdir('src') +endif diff --git a/meson_options.txt b/meson_options.txt index 64f6d15..b8fd949 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -1 +1,3 @@ option('pipewire', type: 'feature', description: 'Screen capture via PipeWire') +option('enable_gamescope', type : 'boolean', value : true, description: 'Build Gamescope executable') +option('enable_gamescope_wsi_layer', type : 'boolean', value : true, description: 'Build Gamescope layer') diff --git a/protocol/meson.build b/protocol/meson.build index 4b13267..7f22101 100644 --- a/protocol/meson.build +++ b/protocol/meson.build @@ -37,5 +37,3 @@ foreach name : protocols protocols_server_src += [code, server_header] protocols_client_src += [code, client_header] endforeach - -src += protocols_server_src diff --git a/src/meson.build b/src/meson.build new file mode 100644 index 0000000..704daba --- /dev/null +++ b/src/meson.build @@ -0,0 +1,116 @@ +dep_xdamage = dependency('xdamage') +dep_xcomposite = dependency('xcomposite') +dep_xrender = dependency('xrender') +dep_xext = dependency('xext') +dep_xfixes = dependency('xfixes') +dep_xxf86vm = dependency('xxf86vm') +dep_xtst = dependency('xtst') +dep_xres = dependency('xres') + +drm_dep = dependency('libdrm', version: '>= 2.4.113') + +wayland_server = dependency('wayland-server', version: '>=1.21') +wayland_protos = dependency('wayland-protocols', version: '>=1.17') +xkbcommon = dependency('xkbcommon') +thread_dep = dependency('threads') +cap_dep = dependency('libcap') +sdl_dep = dependency('SDL2') + +stb_dep = dependency('stb') + +wlroots_dep = dependency( + 'wlroots', + version: ['>= 0.16.0', '< 0.17.0'], + fallback: ['wlroots', 'wlroots'], + default_options: ['default_library=static', 'examples=false', 'xwayland=enabled', 'backends=libinput', 'renderers=[]', 'allocators=[]'], +) + +displayinfo_dep = dependency( + 'display-info', + version: ['>= 0.0.0', '< 0.1.0'], + fallback: ['libdisplay-info', 'di_dep'], + default_options: ['default_library=static'], +) + +required_wlroots_features = ['xwayland', 'libinput_backend'] +foreach feat : required_wlroots_features + if wlroots_dep.get_variable('have_' + feat) != 'true' + error('Cannot use wlroots built without ' + feat + ' support') + endif +endforeach + +glsl_compiler = find_program('glslangValidator', native: true) + +# Use --depfile to rebuild shaders when included files have changed. Sadly debian based +# distros don't have up-to-date glslang so we need to check for support first. +if run_command(glsl_compiler, ['--version', '--depfile', 'dummy.dep'], check: false).returncode() == 0 + glsl_generator = generator( + glsl_compiler, + output : ['@BASENAME@.h'], + arguments : ['-V', '@INPUT@', '--vn', '@BASENAME@', '-o', '@OUTPUT@', '--depfile', '@DEPFILE@', '--quiet'], + depfile : '@BASENAME@.h.d', + ) +else + glsl_generator = generator( + glsl_compiler, + output : ['@BASENAME@.h'], + arguments : ['-V', '@INPUT@', '--vn', '@BASENAME@', '-o', '@OUTPUT@'], + ) +endif + +shader_src = [ + 'shaders/cs_composite_blit.comp', + 'shaders/cs_composite_blur.comp', + 'shaders/cs_composite_blur_cond.comp', + 'shaders/cs_composite_rcas.comp', + 'shaders/cs_easu.comp', + 'shaders/cs_easu_fp16.comp', + 'shaders/cs_gaussian_blur_horizontal.comp', + 'shaders/cs_nis.comp', + 'shaders/cs_nis_fp16.comp', + 'shaders/cs_rgb_to_nv12.comp', +] + +spirv_shaders = glsl_generator.process(shader_src) + +liftoff_dep = dependency( + 'libliftoff', + version: ['>= 0.3.0', '< 0.4.0'], + fallback: ['libliftoff', 'liftoff'], + default_options: ['default_library=static'], +) + + +src = [ + 'steamcompmgr.cpp', + 'main.cpp', + 'wlserver.cpp', + 'drm.cpp', + 'modegen.cpp', + 'sdlwindow.cpp', + 'vblankmanager.cpp', + 'rendervulkan.cpp', + 'log.cpp', + 'ime.cpp', + 'mangoapp.cpp', +] + +src += spirv_shaders +src += protocols_server_src + +if pipewire_dep.found() + src += 'pipewire.cpp' +endif + + executable( + 'gamescope', + src, + dependencies: [ + dep_x11, dep_xdamage, dep_xcomposite, dep_xrender, dep_xext, dep_xfixes, + dep_xxf86vm, dep_xres, drm_dep, wayland_server, + xkbcommon, thread_dep, sdl_dep, wlroots_dep, + vulkan_dep, liftoff_dep, dep_xtst, cap_dep, pipewire_dep, librt_dep, + stb_dep, displayinfo_dep, + ], + install: true, + )