diff --git a/src/libcamera/include/meson.build b/src/libcamera/include/meson.build
new file mode 100644
index 000000000000..933be8543a8d
--- /dev/null
+++ b/src/libcamera/include/meson.build
@@ -0,0 +1,24 @@
+libcamera_headers = files([
+    'camera_sensor.h',
+    'device_enumerator.h',
+    'device_enumerator_sysfs.h',
+    'device_enumerator_udev.h',
+    'event_dispatcher_poll.h',
+    'formats.h',
+    'ipa_manager.h',
+    'ipa_module.h',
+    'ipa_proxy.h',
+    'ipc_unixsocket.h',
+    'log.h',
+    'media_device.h',
+    'media_object.h',
+    'message.h',
+    'pipeline_handler.h',
+    'process.h',
+    'thread.h',
+    'utils.h',
+    'v4l2_controls.h',
+    'v4l2_device.h',
+    'v4l2_subdevice.h',
+    'v4l2_videodevice.h',
+])
diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build
index 0916bc411360..755149c55c7b 100644
--- a/src/libcamera/meson.build
+++ b/src/libcamera/meson.build
@@ -36,29 +36,7 @@ libcamera_sources = files([
     'v4l2_videodevice.cpp',
 ])
 
-libcamera_headers = files([
-    'include/camera_sensor.h',
-    'include/device_enumerator.h',
-    'include/device_enumerator_sysfs.h',
-    'include/device_enumerator_udev.h',
-    'include/event_dispatcher_poll.h',
-    'include/formats.h',
-    'include/ipa_manager.h',
-    'include/ipa_module.h',
-    'include/ipa_proxy.h',
-    'include/ipc_unixsocket.h',
-    'include/log.h',
-    'include/media_device.h',
-    'include/media_object.h',
-    'include/message.h',
-    'include/pipeline_handler.h',
-    'include/process.h',
-    'include/thread.h',
-    'include/utils.h',
-    'include/v4l2_device.h',
-    'include/v4l2_subdevice.h',
-    'include/v4l2_videodevice.h',
-])
+subdir('include')
 
 libcamera_internal_includes =  include_directories('include')
 
