From 89c9ef6692fef7672dadd01c7a2326c1b94d35ce Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Sat, 3 Jan 2026 19:35:17 +0100 Subject: [PATCH] render/gles2: skip glslang check when shaders are unchanged Currently, the glslang check is run every time ninja is invoked, even with an up-to-date build directory when GLSL shaders haven't been modified. This is due to glslang not creating any output file: the _check file never exists so ninja keeps trying to generate it by running the command. Unfortunately Meson doesn't support running commands with no outputs [1]. Create an empty output file to fix this by setting `capture: true`. This doesn't work out-of-the-box, because glslang prints messages to stdout, and provides no way to change this [2]. As a result, shader errors are not surfaced back to the user - they end up in the _check file. Workaround this with a thin wrapper which redirects stdout to stderr when invoking glslang. [1]: https://github.com/mesonbuild/meson/issues/11506 [2]: https://github.com/KhronosGroup/glslang/pull/4138 --- render/gles2/shaders/check.sh | 4 ++++ render/gles2/shaders/meson.build | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 render/gles2/shaders/check.sh diff --git a/render/gles2/shaders/check.sh b/render/gles2/shaders/check.sh new file mode 100644 index 000000000..18f4be246 --- /dev/null +++ b/render/gles2/shaders/check.sh @@ -0,0 +1,4 @@ +#!/bin/sh -eu + +# glslang prints log messages to stdout, remap to stderr +exec "$@" >&2 diff --git a/render/gles2/shaders/meson.build b/render/gles2/shaders/meson.build index 64e4e93fb..1e649f7b5 100644 --- a/render/gles2/shaders/meson.build +++ b/render/gles2/shaders/meson.build @@ -1,3 +1,4 @@ +check = find_program('./check.sh', native: true) embed = find_program('./embed.sh', native: true) shaders = [ @@ -13,7 +14,8 @@ foreach name : shaders 'gles2-' + name, input: name, output: name + '_check', - command: [glslang, '@INPUT@'], + command: [check, glslang, '@INPUT@'], + capture: true, build_by_default: true, )