render_src = ['common.c'] render_deps = [] render_args = [] if get_option('renderer') == 'momo' render_src += ['renderer_momo.c', 'queue_momo.c'] subdir('momo') render_deps += [momo] render_args += ['-DCAMU_RENDERER_MOMO'] elif get_option('renderer') == 'libplacebo' libplacebo_found = false if 'libplacebo' not in get_option('force_fallback_for') and get_option('wrap_mode') != 'forcefallback' libplacebo = dependency('libplacebo', required: false, allow_fallback: false) libplacebo_found = libplacebo.found() endif if not libplacebo_found libplacebo_opts = ['warning_level=2', 'demos=false', 'tests=false', 'bench=false', 'fuzz=false', 'gl-proc-addr=disabled', 'vk-proc-addr=disabled', 'lcms=auto', 'dovi=auto', 'libdovi=auto', 'xxhash=auto' ] if get_option('renderer-api') == 'vulkan' or get_option('renderer-api') == 'dx11' if get_option('renderer-compiler') == 'shaderc' shaderc_found = false if 'shaderc' not in get_option('force_fallback_for') and get_option('wrap_mode') != 'forcefallback' if is_windows shaderc = dependency('shaderc_combined', required: false, allow_fallback: false) else shaderc = dependency('shaderc', required: false, allow_fallback: false) endif shaderc_found = shaderc.found() endif if shaderc_found render_deps += [shaderc] else shaderc_opts = cmake.subproject_options() shaderc_opts.set_override_option('warning_level', '0') # Doesn't work. reltype = is_minsize ? 'MinSizeRel' : 'Release' shaderc_opts.add_cmake_defines({ 'CMAKE_BUILD_TYPE': is_debug ? 'Debug' : reltype }) shaderc_opts.add_cmake_defines({ 'SHADERC_SKIP_INSTALL': true }) shaderc_opts.add_cmake_defines({ 'SHADERC_SKIP_TESTS': true }) shaderc_opts.add_cmake_defines({ 'SHADERC_SKIP_EXAMPLES': true }) shaderc_opts.add_cmake_defines({ 'SHADERC_SKIP_COPYRIGHT_CHECK': true }) # glslang shaderc_opts.add_cmake_defines({ 'ENABLE_GLSLANG_BINARIES': false }) shaderc_opts.add_cmake_defines({ 'ENABLE_HLSL': false }) shaderc_opts.add_cmake_defines({ 'ENABLE_SPVREMAPPER': false }) shaderc_opts.add_cmake_defines({ 'ENABLE_EXCEPTIONS': false }) spirv_optimizer = true shaderc_opts.add_cmake_defines({ 'ENABLE_OPT': spirv_optimizer }) # spirv-tools shaderc_opts.add_cmake_defines({ 'ENABLE_EXCEPTIONS_ON_MSVC': false }) shaderc_proj = cmake.subproject('shaderc', options: shaderc_opts) shaderc = shaderc_proj.dependency('shaderc') meson.override_dependency('shaderc', declare_dependency(dependencies: shaderc, version: '2026.1')) render_deps += [ shaderc_proj.dependency('shaderc_util'), shaderc_proj.dependency('glslang'), shaderc_proj.dependency('MachineIndependent'), shaderc_proj.dependency('OSDependent'), shaderc_proj.dependency('GenericCodeGen'), shaderc_proj.dependency('SPIRV'), shaderc_proj.dependency('SPIRV-Tools-static') ] if spirv_optimizer render_deps += [shaderc_proj.dependency('SPIRV-Tools-opt')] endif endif libplacebo_opts += ['shaderc=enabled', 'glslang=disabled'] else glslang = dependency('glslang', required: false, allow_fallback: false) if glslang.found() render_deps += [glslang] else # Currently does not build. prefer_static = get_option('prefer_static') spirv_optimizer = false if spirv_optimizer spirv_headers_proj = cmake.subproject('SPIRV-Headers') spirv_headers = spirv_headers_proj.dependency('SPIRV-Headers') spirv_tools_opts = cmake.subproject_options() spirv_tools_opts.add_cmake_defines({ 'SPIRV-Headers_SOURCE_DIR': meson.source_root() + '/subprojects/SPIRV-Headers-b824a46' }) spirv_tools_opts.add_cmake_defines({ 'ENABLE_EXCEPTIONS_ON_MSVC': false }) spirv_tools_proj = cmake.subproject('SPIRV-Tools', options: spirv_tools_opts) spirv_tools = spirv_tools_proj.dependency('SPIRV-Tools-static') spirv_tools_opt = spirv_tools_proj.dependency('SPIRV-Tools-opt') endif glslang_opts = cmake.subproject_options() glslang_opts.set_override_option('warning_level', '0') reltype = is_minsize ? 'MinSizeRel' : 'Release' glslang_opts.add_cmake_defines({ 'CMAKE_BUILD_TYPE': is_debug ? 'Debug' : reltype }) glslang_opts.add_cmake_defines({ 'ENABLE_GLSLANG_BINARIES': false }) glslang_opts.add_cmake_defines({ 'ENABLE_HLSL': false }) glslang_opts.add_cmake_defines({ 'ENABLE_SPVREMAPPER': false }) glslang_opts.add_cmake_defines({ 'ENABLE_EXCEPTIONS': false }) glslang_opts.add_cmake_defines({ 'ENABLE_OPT': spirv_optimizer }) glslang_opts.add_cmake_defines({ 'ALLOW_EXTERNAL_SPIRV_TOOLS': spirv_optimizer }) glslang_proj = cmake.subproject('glslang', options: glslang_opts) spirv = glslang_proj.dependency('SPIRV') glslang = glslang_proj.dependency('glslang') glslang_default_resource_limits = glslang_proj.dependency('glslang-default-resource-limits') meson.override_dependency('SPIRV', spirv, static: prefer_static) meson.override_dependency('glslang', glslang, static: prefer_static) meson.override_dependency('glslang-default-resource-limits', glslang_default_resource_limits, static: prefer_static) render_deps += [ glslang_proj.dependency('MachineIndependent'), glslang_proj.dependency('OSDependent'), glslang_proj.dependency('GenericCodeGen'), spirv, glslang, glslang_default_resource_limits ] if spirv_optimizer render_deps += [ spirv_tools, spirv_headers, spirv_tools_opt ] endif endif libplacebo_opts += ['glslang=enabled', 'shaderc=disabled'] endif else libplacebo_opts += ['glslang=disabled', 'shaderc=disabled'] endif if get_option('renderer-api') == 'vulkan' libplacebo_opts += ['vulkan=enabled', 'd3d11=disabled', 'opengl=disabled'] elif get_option('renderer-api') == 'dx11' spirv_cross_opts = cmake.subproject_options() reltype = is_minsize ? 'MinSizeRel' : 'Release' spirv_cross_opts.add_cmake_defines({ 'CMAKE_BUILD_TYPE': is_debug ? 'Debug' : reltype }) spirv_cross_opts.add_cmake_defines({ 'SPIRV_CROSS_CLI': false }) spirv_cross_opts.add_cmake_defines({ 'SPIRV_CROSS_ENABLE_TESTS': false }) spirv_cross_opts.add_cmake_defines({ 'SPIRV_CROSS_ENABLE_MSL': false }) spirv_cross_opts.add_cmake_defines({ 'SPIRV_CROSS_ENABLE_CPP': false }) spirv_cross_opts.add_cmake_defines({ 'SPIRV_CROSS_ENABLE_REFLECT': false }) spirv_cross_opts.add_cmake_defines({ 'SPIRV_CROSS_ENABLE_UTIL': false }) spirv_cross_proj = cmake.subproject('SPIRV-Cross', options: spirv_cross_opts) spirv_cross_c_shared = spirv_cross_proj.dependency('spirv-cross-c') render_deps += [ spirv_cross_proj.dependency('spirv-cross-glsl'), spirv_cross_proj.dependency('spirv-cross-hlsl'), spirv_cross_proj.dependency('spirv-cross-core'), spirv_cross_c_shared ] meson.override_dependency('spirv-cross-c-shared', declare_dependency(dependencies: spirv_cross_c_shared, version: '0.29.0')) libplacebo_opts += ['d3d11=enabled', 'vulkan=disabled', 'opengl=disabled'] else libplacebo_opts += ['opengl=enabled', 'vulkan=disabled', 'd3d11=disabled'] endif libplacebo = dependency('libplacebo', default_options: libplacebo_opts) endif render_src += ['renderer_libplacebo.c', 'queue_libplacebo.c', 'impl_libplacebo.c'] render_deps += [libplacebo] render_args += ['-DCAMU_RENDERER_LIBPLACEBO'] endif if get_option('subtitles').enabled() libass_found = false if 'libass' not in get_option('force_fallback_for') and get_option('wrap_mode') != 'forcefallback' libass = dependency('libass', required: false, allow_fallback: false) libass_found = libass.found() endif if not libass_found libass_opts = ['test=disabled'] # freetype2(42608f7):meson.build:346 harfbuz = dependency('harfbuzz', version: '>=2.0.0', default_options: [ 'glib=disabled', 'gobject=disabled', 'cairo=disabled', 'chafa=disabled', 'icu=disabled', 'freetype=disabled', # This does not override yield, and yielding breaks the build if tests=enabled. # https://github.com/mesonbuild/meson/issues/5214 'tests=disabled', 'introspection=disabled', 'docs=disabled', 'utilities=disabled' ]) if not is_windows libass_opts += ['fontconfig=enabled'] # libass(e46aede):meson.build:126 fontconfig = dependency('fontconfig', version: '>=2.10.92', default_options: [ 'doc=disabled', 'nls=disabled', 'tests=disabled', 'tools=disabled', 'cache-build=disabled', 'xml-backend=libxml2' ]) else libass_opts += ['directwrite=enabled'] endif # libass(e46aede):meson.build:84 # fontconfig(72b9a48):meson.build:28 freetype = dependency('freetype2', version: '>=9.17.3', default_options: [ 'warning_level=0', 'tests=disabled', 'harfbuzz=disabled', 'png=disabled' ]) # libass(e46aede):meson.build:90 fribidi = dependency('fribidi', version: '>=0.19.1', default_options: [ 'warning_level=0', 'c_args=-Wno-stringop-overflow', # This doesn't work. 'docs=false', 'tests=false', 'bin=false' ]) libass = dependency('libass', default_options: libass_opts) endif render_deps += [libass] render_args += ['-DCAMU_HAVE_SUBTITLES'] endif render = declare_dependency(sources: render_src, dependencies: render_deps, compile_args: render_args)