build: ipa: Fix bug in building multiple IPA interfaces with the same mojom file

In the existing meson scripts, an IPA mojom interface file may not be
built if:

- There are duplicate entries for the mojom file shared by different
  pipeline handlers in pipeline_ipa_mojom_mapping, and
- The IPA is not listed first in pipeline_ipa_mojom_mapping, and
- The first listed IPA for the given mojom file is not selected in the
  build.

Fix this by using a separate list of already built mojom files
(mojoms_built) instead of overloading use of the existing
ipa_mojom_files list.  Now, ipa_mojom_files gets filled in outside of
the IPA list enumeration loop, this also guarantees the IPA
documentation gets built even if the pipeline is not selected.

Fixes: 312e9910ba ("meson: ipa: Add mapping for pipeline handler to mojom interface file")
Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
Naushir Patuck 2023-10-13 08:48:34 +01:00 committed by Kieran Bingham
parent 9535f2c745
commit 2ec7f2fede

View file

@ -68,29 +68,28 @@ pipeline_ipa_mojom_mapping = {
'vimc': 'vimc.mojom',
}
ipa_mojom_files = []
ipa_mojoms = []
#
# Generate headers from templates.
#
# TODO Define per-pipeline ControlInfoMap with yaml?
ipa_mojoms = []
mojoms_built = []
foreach pipeline, file : pipeline_ipa_mojom_mapping
name = file.split('.')[0]
# Ensure we do not build duplicate mojom modules
if file in ipa_mojom_files
# Avoid building duplicate mojom interfaces with the same interface file
if name in mojoms_built
continue
endif
ipa_mojom_files += file
if pipeline not in pipelines
continue
endif
mojoms_built += name
# {interface}.mojom-module
mojom = custom_target(name + '_mojom_module',
input : file,
@ -155,6 +154,12 @@ foreach pipeline, file : pipeline_ipa_mojom_mapping
libcamera_generated_ipa_headers += [header, serializer, proxy_header]
endforeach
ipa_mojom_files = []
foreach pipeline, file : pipeline_ipa_mojom_mapping
if file not in ipa_mojom_files
ipa_mojom_files += file
endif
endforeach
ipa_mojom_files = files(ipa_mojom_files)
# Pass this to the documentation generator in src/libcamera/ipa