diff --git a/include/libcamera/meson.build b/include/libcamera/meson.build
index cdb8e0372e77..692931a5a639 100644
--- a/include/libcamera/meson.build
+++ b/include/libcamera/meson.build
@@ -34,8 +34,6 @@ install_headers(libcamera_public_headers,
 #
 
 # control_ids.h and property_ids.h
-gen_controls = files('../../src/libcamera/gen-controls.py')
-
 control_source_files = [
     'control_ids',
     'property_ids',
@@ -57,8 +55,6 @@ endforeach
 libcamera_public_headers += control_headers
 
 # formats.h
-gen_formats = files('gen-formats.py')
-
 formats_h = custom_target('formats_h',
                           input : files(
                               '../../src/libcamera/formats.yaml',
@@ -72,8 +68,6 @@ formats_h = custom_target('formats_h',
 libcamera_public_headers += formats_h
 
 # libcamera.h
-gen_header = files('gen-header.sh')
-
 libcamera_h = custom_target('gen-header',
                             input : 'meson.build',
                             output : 'libcamera.h',
diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build
index 0e6ecf5060a4..d63dacd55cc7 100644
--- a/src/libcamera/meson.build
+++ b/src/libcamera/meson.build
@@ -77,8 +77,6 @@ if libudev.found()
     ])
 endif
 
-gen_controls = files('gen-controls.py')
-
 control_sources = []
 
 foreach source : control_source_files
diff --git a/src/libcamera/gen-controls.py b/utils/gen-controls.py
similarity index 100%
rename from src/libcamera/gen-controls.py
rename to utils/gen-controls.py
diff --git a/include/libcamera/gen-formats.py b/utils/gen-formats.py
similarity index 100%
rename from include/libcamera/gen-formats.py
rename to utils/gen-formats.py
diff --git a/include/libcamera/gen-header.sh b/utils/gen-header.sh
similarity index 100%
rename from include/libcamera/gen-header.sh
rename to utils/gen-header.sh
diff --git a/utils/meson.build b/utils/meson.build
index c3cd9d69f887..ef5507b1c5ca 100644
--- a/utils/meson.build
+++ b/utils/meson.build
@@ -1,3 +1,8 @@
 # SPDX-License-Identifier: CC0-1.0
 
 subdir('ipu3')
+
+## Code generation
+gen_controls = files('gen-controls.py')
+gen_formats = files('gen-formats.py')
+gen_header = files('gen-header.sh')
