diff --git a/include/libcamera/internal/meson.build b/include/libcamera/internal/meson.build
index 39230facc8a4..1c5eef9cab80 100644
--- a/include/libcamera/internal/meson.build
+++ b/include/libcamera/internal/meson.build
@@ -48,7 +48,7 @@ tracepoints_h = custom_target(
     'tp_header',
     input : ['tracepoints.h.in', tracepoint_files],
     output : 'tracepoints.h',
-    command : [gen_tracepoints_header, include_build_dir, '@OUTPUT@', '@INPUT@'],
+    command : [gen_tracepoints, include_build_dir, '@OUTPUT@', '@INPUT@'],
 )
 
 libcamera_internal_headers += tracepoints_h
diff --git a/utils/gen-controls.py b/utils/codegen/gen-controls.py
similarity index 100%
rename from utils/gen-controls.py
rename to utils/codegen/gen-controls.py
diff --git a/utils/gen-formats.py b/utils/codegen/gen-formats.py
similarity index 100%
rename from utils/gen-formats.py
rename to utils/codegen/gen-formats.py
diff --git a/utils/gen-header.sh b/utils/codegen/gen-header.sh
similarity index 100%
rename from utils/gen-header.sh
rename to utils/codegen/gen-header.sh
diff --git a/utils/gen-ipa-pub-key.py b/utils/codegen/gen-ipa-pub-key.py
similarity index 100%
rename from utils/gen-ipa-pub-key.py
rename to utils/codegen/gen-ipa-pub-key.py
diff --git a/utils/tracepoints/gen-tp-header.py b/utils/codegen/gen-tp-header.py
similarity index 100%
rename from utils/tracepoints/gen-tp-header.py
rename to utils/codegen/gen-tp-header.py
diff --git a/utils/ipc/extract-docs.py b/utils/codegen/ipc/extract-docs.py
similarity index 100%
rename from utils/ipc/extract-docs.py
rename to utils/codegen/ipc/extract-docs.py
diff --git a/utils/ipc/generate.py b/utils/codegen/ipc/generate.py
similarity index 100%
rename from utils/ipc/generate.py
rename to utils/codegen/ipc/generate.py
diff --git a/utils/ipc/generators/__init__.py b/utils/codegen/ipc/generators/__init__.py
similarity index 100%
rename from utils/ipc/generators/__init__.py
rename to utils/codegen/ipc/generators/__init__.py
diff --git a/utils/ipc/generators/libcamera_templates/core_ipa_interface.h.tmpl b/utils/codegen/ipc/generators/libcamera_templates/core_ipa_interface.h.tmpl
similarity index 100%
rename from utils/ipc/generators/libcamera_templates/core_ipa_interface.h.tmpl
rename to utils/codegen/ipc/generators/libcamera_templates/core_ipa_interface.h.tmpl
diff --git a/utils/ipc/generators/libcamera_templates/core_ipa_serializer.h.tmpl b/utils/codegen/ipc/generators/libcamera_templates/core_ipa_serializer.h.tmpl
similarity index 100%
rename from utils/ipc/generators/libcamera_templates/core_ipa_serializer.h.tmpl
rename to utils/codegen/ipc/generators/libcamera_templates/core_ipa_serializer.h.tmpl
diff --git a/utils/ipc/generators/libcamera_templates/definition_functions.tmpl b/utils/codegen/ipc/generators/libcamera_templates/definition_functions.tmpl
similarity index 100%
rename from utils/ipc/generators/libcamera_templates/definition_functions.tmpl
rename to utils/codegen/ipc/generators/libcamera_templates/definition_functions.tmpl
diff --git a/utils/ipc/generators/libcamera_templates/meson.build b/utils/codegen/ipc/generators/libcamera_templates/meson.build
similarity index 100%
rename from utils/ipc/generators/libcamera_templates/meson.build
rename to utils/codegen/ipc/generators/libcamera_templates/meson.build
diff --git a/utils/ipc/generators/libcamera_templates/module_ipa_interface.h.tmpl b/utils/codegen/ipc/generators/libcamera_templates/module_ipa_interface.h.tmpl
similarity index 100%
rename from utils/ipc/generators/libcamera_templates/module_ipa_interface.h.tmpl
rename to utils/codegen/ipc/generators/libcamera_templates/module_ipa_interface.h.tmpl
diff --git a/utils/ipc/generators/libcamera_templates/module_ipa_proxy.cpp.tmpl b/utils/codegen/ipc/generators/libcamera_templates/module_ipa_proxy.cpp.tmpl
similarity index 100%
rename from utils/ipc/generators/libcamera_templates/module_ipa_proxy.cpp.tmpl
rename to utils/codegen/ipc/generators/libcamera_templates/module_ipa_proxy.cpp.tmpl
diff --git a/utils/ipc/generators/libcamera_templates/module_ipa_proxy.h.tmpl b/utils/codegen/ipc/generators/libcamera_templates/module_ipa_proxy.h.tmpl
similarity index 100%
rename from utils/ipc/generators/libcamera_templates/module_ipa_proxy.h.tmpl
rename to utils/codegen/ipc/generators/libcamera_templates/module_ipa_proxy.h.tmpl
diff --git a/utils/ipc/generators/libcamera_templates/module_ipa_proxy_worker.cpp.tmpl b/utils/codegen/ipc/generators/libcamera_templates/module_ipa_proxy_worker.cpp.tmpl
similarity index 100%
rename from utils/ipc/generators/libcamera_templates/module_ipa_proxy_worker.cpp.tmpl
rename to utils/codegen/ipc/generators/libcamera_templates/module_ipa_proxy_worker.cpp.tmpl
diff --git a/utils/ipc/generators/libcamera_templates/module_ipa_serializer.h.tmpl b/utils/codegen/ipc/generators/libcamera_templates/module_ipa_serializer.h.tmpl
similarity index 100%
rename from utils/ipc/generators/libcamera_templates/module_ipa_serializer.h.tmpl
rename to utils/codegen/ipc/generators/libcamera_templates/module_ipa_serializer.h.tmpl
diff --git a/utils/ipc/generators/libcamera_templates/proxy_functions.tmpl b/utils/codegen/ipc/generators/libcamera_templates/proxy_functions.tmpl
similarity index 100%
rename from utils/ipc/generators/libcamera_templates/proxy_functions.tmpl
rename to utils/codegen/ipc/generators/libcamera_templates/proxy_functions.tmpl
diff --git a/utils/ipc/generators/libcamera_templates/serializer.tmpl b/utils/codegen/ipc/generators/libcamera_templates/serializer.tmpl
similarity index 100%
rename from utils/ipc/generators/libcamera_templates/serializer.tmpl
rename to utils/codegen/ipc/generators/libcamera_templates/serializer.tmpl
diff --git a/utils/ipc/generators/meson.build b/utils/codegen/ipc/generators/meson.build
similarity index 100%
rename from utils/ipc/generators/meson.build
rename to utils/codegen/ipc/generators/meson.build
diff --git a/utils/ipc/generators/mojom_libcamera_generator.py b/utils/codegen/ipc/generators/mojom_libcamera_generator.py
similarity index 100%
rename from utils/ipc/generators/mojom_libcamera_generator.py
rename to utils/codegen/ipc/generators/mojom_libcamera_generator.py
diff --git a/utils/ipc/meson.build b/utils/codegen/ipc/meson.build
similarity index 100%
rename from utils/ipc/meson.build
rename to utils/codegen/ipc/meson.build
diff --git a/utils/ipc/mojo/README b/utils/codegen/ipc/mojo/README
similarity index 100%
rename from utils/ipc/mojo/README
rename to utils/codegen/ipc/mojo/README
diff --git a/utils/ipc/mojo/public/LICENSE b/utils/codegen/ipc/mojo/public/LICENSE
similarity index 100%
rename from utils/ipc/mojo/public/LICENSE
rename to utils/codegen/ipc/mojo/public/LICENSE
diff --git a/utils/ipc/mojo/public/tools/.style.yapf b/utils/codegen/ipc/mojo/public/tools/.style.yapf
similarity index 100%
rename from utils/ipc/mojo/public/tools/.style.yapf
rename to utils/codegen/ipc/mojo/public/tools/.style.yapf
diff --git a/utils/ipc/mojo/public/tools/BUILD.gn b/utils/codegen/ipc/mojo/public/tools/BUILD.gn
similarity index 100%
rename from utils/ipc/mojo/public/tools/BUILD.gn
rename to utils/codegen/ipc/mojo/public/tools/BUILD.gn
diff --git a/utils/ipc/mojo/public/tools/bindings/BUILD.gn b/utils/codegen/ipc/mojo/public/tools/bindings/BUILD.gn
similarity index 100%
rename from utils/ipc/mojo/public/tools/bindings/BUILD.gn
rename to utils/codegen/ipc/mojo/public/tools/bindings/BUILD.gn
diff --git a/utils/ipc/mojo/public/tools/bindings/README.md b/utils/codegen/ipc/mojo/public/tools/bindings/README.md
similarity index 100%
rename from utils/ipc/mojo/public/tools/bindings/README.md
rename to utils/codegen/ipc/mojo/public/tools/bindings/README.md
diff --git a/utils/ipc/mojo/public/tools/bindings/checks/__init__.py b/utils/codegen/ipc/mojo/public/tools/bindings/checks/__init__.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/bindings/checks/__init__.py
rename to utils/codegen/ipc/mojo/public/tools/bindings/checks/__init__.py
diff --git a/utils/ipc/mojo/public/tools/bindings/checks/mojom_attributes_check.py b/utils/codegen/ipc/mojo/public/tools/bindings/checks/mojom_attributes_check.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/bindings/checks/mojom_attributes_check.py
rename to utils/codegen/ipc/mojo/public/tools/bindings/checks/mojom_attributes_check.py
diff --git a/utils/ipc/mojo/public/tools/bindings/checks/mojom_attributes_check_unittest.py b/utils/codegen/ipc/mojo/public/tools/bindings/checks/mojom_attributes_check_unittest.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/bindings/checks/mojom_attributes_check_unittest.py
rename to utils/codegen/ipc/mojo/public/tools/bindings/checks/mojom_attributes_check_unittest.py
diff --git a/utils/ipc/mojo/public/tools/bindings/checks/mojom_definitions_check.py b/utils/codegen/ipc/mojo/public/tools/bindings/checks/mojom_definitions_check.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/bindings/checks/mojom_definitions_check.py
rename to utils/codegen/ipc/mojo/public/tools/bindings/checks/mojom_definitions_check.py
diff --git a/utils/ipc/mojo/public/tools/bindings/checks/mojom_interface_feature_check.py b/utils/codegen/ipc/mojo/public/tools/bindings/checks/mojom_interface_feature_check.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/bindings/checks/mojom_interface_feature_check.py
rename to utils/codegen/ipc/mojo/public/tools/bindings/checks/mojom_interface_feature_check.py
diff --git a/utils/ipc/mojo/public/tools/bindings/checks/mojom_interface_feature_check_unittest.py b/utils/codegen/ipc/mojo/public/tools/bindings/checks/mojom_interface_feature_check_unittest.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/bindings/checks/mojom_interface_feature_check_unittest.py
rename to utils/codegen/ipc/mojo/public/tools/bindings/checks/mojom_interface_feature_check_unittest.py
diff --git a/utils/ipc/mojo/public/tools/bindings/checks/mojom_restrictions_check.py b/utils/codegen/ipc/mojo/public/tools/bindings/checks/mojom_restrictions_check.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/bindings/checks/mojom_restrictions_check.py
rename to utils/codegen/ipc/mojo/public/tools/bindings/checks/mojom_restrictions_check.py
diff --git a/utils/ipc/mojo/public/tools/bindings/checks/mojom_restrictions_checks_unittest.py b/utils/codegen/ipc/mojo/public/tools/bindings/checks/mojom_restrictions_checks_unittest.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/bindings/checks/mojom_restrictions_checks_unittest.py
rename to utils/codegen/ipc/mojo/public/tools/bindings/checks/mojom_restrictions_checks_unittest.py
diff --git a/utils/ipc/mojo/public/tools/bindings/concatenate-files.py b/utils/codegen/ipc/mojo/public/tools/bindings/concatenate-files.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/bindings/concatenate-files.py
rename to utils/codegen/ipc/mojo/public/tools/bindings/concatenate-files.py
diff --git a/utils/ipc/mojo/public/tools/bindings/concatenate_and_replace_closure_exports.py b/utils/codegen/ipc/mojo/public/tools/bindings/concatenate_and_replace_closure_exports.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/bindings/concatenate_and_replace_closure_exports.py
rename to utils/codegen/ipc/mojo/public/tools/bindings/concatenate_and_replace_closure_exports.py
diff --git a/utils/ipc/mojo/public/tools/bindings/gen_data_files_list.py b/utils/codegen/ipc/mojo/public/tools/bindings/gen_data_files_list.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/bindings/gen_data_files_list.py
rename to utils/codegen/ipc/mojo/public/tools/bindings/gen_data_files_list.py
diff --git a/utils/ipc/mojo/public/tools/bindings/generate_type_mappings.py b/utils/codegen/ipc/mojo/public/tools/bindings/generate_type_mappings.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/bindings/generate_type_mappings.py
rename to utils/codegen/ipc/mojo/public/tools/bindings/generate_type_mappings.py
diff --git a/utils/ipc/mojo/public/tools/bindings/minify_with_terser.py b/utils/codegen/ipc/mojo/public/tools/bindings/minify_with_terser.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/bindings/minify_with_terser.py
rename to utils/codegen/ipc/mojo/public/tools/bindings/minify_with_terser.py
diff --git a/utils/ipc/mojo/public/tools/bindings/mojom.gni b/utils/codegen/ipc/mojo/public/tools/bindings/mojom.gni
similarity index 100%
rename from utils/ipc/mojo/public/tools/bindings/mojom.gni
rename to utils/codegen/ipc/mojo/public/tools/bindings/mojom.gni
diff --git a/utils/ipc/mojo/public/tools/bindings/mojom_bindings_generator.py b/utils/codegen/ipc/mojo/public/tools/bindings/mojom_bindings_generator.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/bindings/mojom_bindings_generator.py
rename to utils/codegen/ipc/mojo/public/tools/bindings/mojom_bindings_generator.py
diff --git a/utils/ipc/mojo/public/tools/bindings/mojom_bindings_generator_unittest.py b/utils/codegen/ipc/mojo/public/tools/bindings/mojom_bindings_generator_unittest.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/bindings/mojom_bindings_generator_unittest.py
rename to utils/codegen/ipc/mojo/public/tools/bindings/mojom_bindings_generator_unittest.py
diff --git a/utils/ipc/mojo/public/tools/bindings/validate_typemap_config.py b/utils/codegen/ipc/mojo/public/tools/bindings/validate_typemap_config.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/bindings/validate_typemap_config.py
rename to utils/codegen/ipc/mojo/public/tools/bindings/validate_typemap_config.py
diff --git a/utils/ipc/mojo/public/tools/mojom/BUILD.gn b/utils/codegen/ipc/mojo/public/tools/mojom/BUILD.gn
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/BUILD.gn
rename to utils/codegen/ipc/mojo/public/tools/mojom/BUILD.gn
diff --git a/utils/ipc/mojo/public/tools/mojom/README.md b/utils/codegen/ipc/mojo/public/tools/mojom/README.md
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/README.md
rename to utils/codegen/ipc/mojo/public/tools/mojom/README.md
diff --git a/utils/ipc/mojo/public/tools/mojom/check_stable_mojom_compatibility.py b/utils/codegen/ipc/mojo/public/tools/mojom/check_stable_mojom_compatibility.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/check_stable_mojom_compatibility.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/check_stable_mojom_compatibility.py
diff --git a/utils/ipc/mojo/public/tools/mojom/check_stable_mojom_compatibility_unittest.py b/utils/codegen/ipc/mojo/public/tools/mojom/check_stable_mojom_compatibility_unittest.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/check_stable_mojom_compatibility_unittest.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/check_stable_mojom_compatibility_unittest.py
diff --git a/utils/ipc/mojo/public/tools/mojom/const_unittest.py b/utils/codegen/ipc/mojo/public/tools/mojom/const_unittest.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/const_unittest.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/const_unittest.py
diff --git a/utils/ipc/mojo/public/tools/mojom/enum_unittest.py b/utils/codegen/ipc/mojo/public/tools/mojom/enum_unittest.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/enum_unittest.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/enum_unittest.py
diff --git a/utils/ipc/mojo/public/tools/mojom/feature_unittest.py b/utils/codegen/ipc/mojo/public/tools/mojom/feature_unittest.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/feature_unittest.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/feature_unittest.py
diff --git a/utils/ipc/mojo/public/tools/mojom/mojom/BUILD.gn b/utils/codegen/ipc/mojo/public/tools/mojom/mojom/BUILD.gn
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/mojom/BUILD.gn
rename to utils/codegen/ipc/mojo/public/tools/mojom/mojom/BUILD.gn
diff --git a/utils/ipc/mojo/public/tools/mojom/mojom/__init__.py b/utils/codegen/ipc/mojo/public/tools/mojom/mojom/__init__.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/mojom/__init__.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/mojom/__init__.py
diff --git a/utils/ipc/mojo/public/tools/mojom/mojom/error.py b/utils/codegen/ipc/mojo/public/tools/mojom/mojom/error.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/mojom/error.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/mojom/error.py
diff --git a/utils/ipc/mojo/public/tools/mojom/mojom/fileutil.py b/utils/codegen/ipc/mojo/public/tools/mojom/mojom/fileutil.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/mojom/fileutil.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/mojom/fileutil.py
diff --git a/utils/ipc/mojo/public/tools/mojom/mojom/fileutil_unittest.py b/utils/codegen/ipc/mojo/public/tools/mojom/mojom/fileutil_unittest.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/mojom/fileutil_unittest.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/mojom/fileutil_unittest.py
diff --git a/utils/ipc/mojo/public/tools/mojom/mojom/generate/__init__.py b/utils/codegen/ipc/mojo/public/tools/mojom/mojom/generate/__init__.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/mojom/generate/__init__.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/mojom/generate/__init__.py
diff --git a/utils/ipc/mojo/public/tools/mojom/mojom/generate/check.py b/utils/codegen/ipc/mojo/public/tools/mojom/mojom/generate/check.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/mojom/generate/check.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/mojom/generate/check.py
diff --git a/utils/ipc/mojo/public/tools/mojom/mojom/generate/generator.py b/utils/codegen/ipc/mojo/public/tools/mojom/mojom/generate/generator.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/mojom/generate/generator.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/mojom/generate/generator.py
diff --git a/utils/ipc/mojo/public/tools/mojom/mojom/generate/generator_unittest.py b/utils/codegen/ipc/mojo/public/tools/mojom/mojom/generate/generator_unittest.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/mojom/generate/generator_unittest.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/mojom/generate/generator_unittest.py
diff --git a/utils/ipc/mojo/public/tools/mojom/mojom/generate/module.py b/utils/codegen/ipc/mojo/public/tools/mojom/mojom/generate/module.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/mojom/generate/module.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/mojom/generate/module.py
diff --git a/utils/ipc/mojo/public/tools/mojom/mojom/generate/module_unittest.py b/utils/codegen/ipc/mojo/public/tools/mojom/mojom/generate/module_unittest.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/mojom/generate/module_unittest.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/mojom/generate/module_unittest.py
diff --git a/utils/ipc/mojo/public/tools/mojom/mojom/generate/pack.py b/utils/codegen/ipc/mojo/public/tools/mojom/mojom/generate/pack.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/mojom/generate/pack.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/mojom/generate/pack.py
diff --git a/utils/ipc/mojo/public/tools/mojom/mojom/generate/pack_unittest.py b/utils/codegen/ipc/mojo/public/tools/mojom/mojom/generate/pack_unittest.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/mojom/generate/pack_unittest.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/mojom/generate/pack_unittest.py
diff --git a/utils/ipc/mojo/public/tools/mojom/mojom/generate/template_expander.py b/utils/codegen/ipc/mojo/public/tools/mojom/mojom/generate/template_expander.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/mojom/generate/template_expander.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/mojom/generate/template_expander.py
diff --git a/utils/ipc/mojo/public/tools/mojom/mojom/generate/translate.py b/utils/codegen/ipc/mojo/public/tools/mojom/mojom/generate/translate.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/mojom/generate/translate.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/mojom/generate/translate.py
diff --git a/utils/ipc/mojo/public/tools/mojom/mojom/generate/translate_unittest.py b/utils/codegen/ipc/mojo/public/tools/mojom/mojom/generate/translate_unittest.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/mojom/generate/translate_unittest.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/mojom/generate/translate_unittest.py
diff --git a/utils/ipc/mojo/public/tools/mojom/mojom/parse/__init__.py b/utils/codegen/ipc/mojo/public/tools/mojom/mojom/parse/__init__.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/mojom/parse/__init__.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/mojom/parse/__init__.py
diff --git a/utils/ipc/mojo/public/tools/mojom/mojom/parse/ast.py b/utils/codegen/ipc/mojo/public/tools/mojom/mojom/parse/ast.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/mojom/parse/ast.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/mojom/parse/ast.py
diff --git a/utils/ipc/mojo/public/tools/mojom/mojom/parse/ast_unittest.py b/utils/codegen/ipc/mojo/public/tools/mojom/mojom/parse/ast_unittest.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/mojom/parse/ast_unittest.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/mojom/parse/ast_unittest.py
diff --git a/utils/ipc/mojo/public/tools/mojom/mojom/parse/conditional_features.py b/utils/codegen/ipc/mojo/public/tools/mojom/mojom/parse/conditional_features.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/mojom/parse/conditional_features.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/mojom/parse/conditional_features.py
diff --git a/utils/ipc/mojo/public/tools/mojom/mojom/parse/conditional_features_unittest.py b/utils/codegen/ipc/mojo/public/tools/mojom/mojom/parse/conditional_features_unittest.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/mojom/parse/conditional_features_unittest.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/mojom/parse/conditional_features_unittest.py
diff --git a/utils/ipc/mojo/public/tools/mojom/mojom/parse/lexer.py b/utils/codegen/ipc/mojo/public/tools/mojom/mojom/parse/lexer.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/mojom/parse/lexer.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/mojom/parse/lexer.py
diff --git a/utils/ipc/mojo/public/tools/mojom/mojom/parse/lexer_unittest.py b/utils/codegen/ipc/mojo/public/tools/mojom/mojom/parse/lexer_unittest.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/mojom/parse/lexer_unittest.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/mojom/parse/lexer_unittest.py
diff --git a/utils/ipc/mojo/public/tools/mojom/mojom/parse/parser.py b/utils/codegen/ipc/mojo/public/tools/mojom/mojom/parse/parser.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/mojom/parse/parser.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/mojom/parse/parser.py
diff --git a/utils/ipc/mojo/public/tools/mojom/mojom/parse/parser_unittest.py b/utils/codegen/ipc/mojo/public/tools/mojom/mojom/parse/parser_unittest.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/mojom/parse/parser_unittest.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/mojom/parse/parser_unittest.py
diff --git a/utils/ipc/mojo/public/tools/mojom/mojom_parser.py b/utils/codegen/ipc/mojo/public/tools/mojom/mojom_parser.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/mojom_parser.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/mojom_parser.py
diff --git a/utils/ipc/mojo/public/tools/mojom/mojom_parser_test_case.py b/utils/codegen/ipc/mojo/public/tools/mojom/mojom_parser_test_case.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/mojom_parser_test_case.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/mojom_parser_test_case.py
diff --git a/utils/ipc/mojo/public/tools/mojom/mojom_parser_unittest.py b/utils/codegen/ipc/mojo/public/tools/mojom/mojom_parser_unittest.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/mojom_parser_unittest.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/mojom_parser_unittest.py
diff --git a/utils/ipc/mojo/public/tools/mojom/stable_attribute_unittest.py b/utils/codegen/ipc/mojo/public/tools/mojom/stable_attribute_unittest.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/stable_attribute_unittest.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/stable_attribute_unittest.py
diff --git a/utils/ipc/mojo/public/tools/mojom/union_unittest.py b/utils/codegen/ipc/mojo/public/tools/mojom/union_unittest.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/union_unittest.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/union_unittest.py
diff --git a/utils/ipc/mojo/public/tools/mojom/version_compatibility_unittest.py b/utils/codegen/ipc/mojo/public/tools/mojom/version_compatibility_unittest.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/mojom/version_compatibility_unittest.py
rename to utils/codegen/ipc/mojo/public/tools/mojom/version_compatibility_unittest.py
diff --git a/utils/ipc/mojo/public/tools/run_all_python_unittests.py b/utils/codegen/ipc/mojo/public/tools/run_all_python_unittests.py
similarity index 100%
rename from utils/ipc/mojo/public/tools/run_all_python_unittests.py
rename to utils/codegen/ipc/mojo/public/tools/run_all_python_unittests.py
diff --git a/utils/ipc/parser.py b/utils/codegen/ipc/parser.py
similarity index 100%
rename from utils/ipc/parser.py
rename to utils/codegen/ipc/parser.py
diff --git a/utils/ipc/tools/README b/utils/codegen/ipc/tools/README
similarity index 100%
rename from utils/ipc/tools/README
rename to utils/codegen/ipc/tools/README
diff --git a/utils/ipc/tools/diagnosis/crbug_1001171.py b/utils/codegen/ipc/tools/diagnosis/crbug_1001171.py
similarity index 100%
rename from utils/ipc/tools/diagnosis/crbug_1001171.py
rename to utils/codegen/ipc/tools/diagnosis/crbug_1001171.py
diff --git a/utils/codegen/meson.build b/utils/codegen/meson.build
new file mode 100644
index 000000000000..7dd312e16559
--- /dev/null
+++ b/utils/codegen/meson.build
@@ -0,0 +1,13 @@
+# SPDX-License-Identifier: CC0-1.0
+
+## Code generation
+
+py_modules += ['jinja2', 'yaml']
+
+gen_controls = files('gen-controls.py')
+gen_formats = files('gen-formats.py')
+gen_header = files('gen-header.sh')
+gen_ipa_pub_key = files('gen-ipa-pub-key.py')
+gen_tracepoints = files('gen-tp-header.py')
+
+subdir('ipc')
diff --git a/utils/meson.build b/utils/meson.build
index 8e28ada7165a..95d657ac965f 100644
--- a/utils/meson.build
+++ b/utils/meson.build
@@ -1,15 +1,7 @@
 # SPDX-License-Identifier: CC0-1.0
 
-subdir('ipc')
+subdir('codegen')
 subdir('ipu3')
-subdir('tracepoints')
-
-## Code generation
-py_modules += ['yaml']
-gen_controls = files('gen-controls.py')
-gen_formats = files('gen-formats.py')
-gen_header = files('gen-header.sh')
 
 ## Module signing
 gen_ipa_priv_key = files('gen-ipa-priv-key.sh')
-gen_ipa_pub_key = files('gen-ipa-pub-key.py')
diff --git a/utils/tracepoints/meson.build b/utils/tracepoints/meson.build
deleted file mode 100644
index 807230fc092d..000000000000
--- a/utils/tracepoints/meson.build
+++ /dev/null
@@ -1,5 +0,0 @@
-# SPDX-License-Identifier: CC0-1.0
-
-py_modules += ['jinja2']
-
-gen_tracepoints_header = find_program('./gen-tp-header.py')
