diff --git a/src/libcamera/shaders/meson.build b/src/libcamera/shaders/meson.build
index 4f4e8da607c7..c409ff9b0b1c 100644
--- a/src/libcamera/shaders/meson.build
+++ b/src/libcamera/shaders/meson.build
@@ -9,12 +9,12 @@ shader_files = files([
     'identity.vert',
 ])
 
-# Generate headers from shaders
-libcamera_shader_headers = custom_target(
+# Generate header from shaders
+libcamera_shader_header = custom_target(
     'gen-shader-headers',
     input : [shader_files],
     output : 'glsl_shaders.h',
-    command : [gen_shader_headers, '-o', '@OUTPUT@', '@INPUT@'],
+    command : [gen_shader_header, '-o', '@OUTPUT@', '@INPUT@'],
 )
 
-libcamera_internal_headers += libcamera_shader_headers
+libcamera_internal_headers += libcamera_shader_header
diff --git a/utils/gen-shader-headers.py b/utils/codegen/gen-shader-header.py
similarity index 100%
rename from utils/gen-shader-headers.py
rename to utils/codegen/gen-shader-header.py
diff --git a/utils/codegen/meson.build b/utils/codegen/meson.build
index 8d1c690866e1..70c228d68804 100644
--- a/utils/codegen/meson.build
+++ b/utils/codegen/meson.build
@@ -14,6 +14,7 @@ gen_formats = files('gen-formats.py')
 gen_gst_controls = files('gen-gst-controls.py')
 gen_header = files('gen-header.sh')
 gen_ipa_pub_key = files('gen-ipa-pub-key.py')
+gen_shader_header = files('gen-shader-header.py')
 gen_tracepoints = files('gen-tp-header.py')
 
 py_mod_controls = files('controls.py')
diff --git a/utils/meson.build b/utils/meson.build
index 17a7aa7c3f5e..6e1b885b3688 100644
--- a/utils/meson.build
+++ b/utils/meson.build
@@ -3,8 +3,6 @@
 subdir('codegen')
 subdir('ipu3')
 
-gen_shader_headers = files('gen-shader-headers.py')
-
 ## Module signing
 gen_ipa_priv_key = files('gen-ipa-priv-key.sh')
 
