Files
external_libcamera/include/libcamera/ipa/meson.build
Laurent Pinchart 186d75b10c libcamera: Consolidate all IPA headers in libcamera_ipa_headers
The IPA headers are listed in two different meson variables, one for
generated headers, and one for the other headers. There's no real reason
for this split, consolidate all of them in the libcamera_ipa_headers
variable.

While at it, don't add the IPA headers to the libcamera_internal_sources
variable, but list libcamera_ipa_headers in the sources for the shared
library. This moves the libcamera_internal_sources variable towards
holding source files, not header files, to improve clarity of the build
system.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2024-08-07 17:57:20 +03:00

166 lines
6.0 KiB
Meson

# SPDX-License-Identifier: CC0-1.0
libcamera_ipa_include_dir = libcamera_include_dir / 'ipa'
libcamera_ipa_headers = files([
'ipa_controls.h',
'ipa_interface.h',
'ipa_module_info.h',
])
install_headers(libcamera_ipa_headers,
subdir : libcamera_ipa_include_dir)
ipa_headers_install_dir = get_option('includedir') / libcamera_ipa_include_dir
#
# Prepare IPA/IPC generation components
#
core_mojom_file = 'core.mojom'
ipa_mojom_core = custom_target(core_mojom_file.split('.')[0] + '_mojom_module',
input : core_mojom_file,
output : core_mojom_file + '-module',
command : [
mojom_parser,
'--output-root', meson.project_build_root(),
'--input-root', meson.project_source_root(),
'--mojoms', '@INPUT@'
])
# core_ipa_interface.h
libcamera_ipa_headers += custom_target('core_ipa_interface_h',
input : ipa_mojom_core,
output : 'core_ipa_interface.h',
depends : mojom_templates,
install : true,
install_dir : ipa_headers_install_dir,
command : [
mojom_generator, 'generate',
'-g', 'libcamera',
'--bytecode_path', mojom_templates_dir,
'--libcamera_generate_core_header',
'--libcamera_output_path=@OUTPUT@',
'./' +'@INPUT@'
])
# core_ipa_serializer.h
libcamera_ipa_headers += custom_target('core_ipa_serializer_h',
input : ipa_mojom_core,
output : 'core_ipa_serializer.h',
depends : mojom_templates,
command : [
mojom_generator, 'generate',
'-g', 'libcamera',
'--bytecode_path', mojom_templates_dir,
'--libcamera_generate_core_serializer',
'--libcamera_output_path=@OUTPUT@',
'./' +'@INPUT@'
])
# Mapping from pipeline handler name to mojom file
pipeline_ipa_mojom_mapping = {
'ipu3': 'ipu3.mojom',
'rkisp1': 'rkisp1.mojom',
'rpi/vc4': 'raspberrypi.mojom',
'simple': 'soft.mojom',
'vimc': 'vimc.mojom',
}
#
# 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]
# Avoid building duplicate mojom interfaces with the same interface file
if name in mojoms_built
continue
endif
if pipeline not in pipelines
continue
endif
mojoms_built += name
# {interface}.mojom-module
mojom = custom_target(name + '_mojom_module',
input : file,
output : file + '-module',
depends : ipa_mojom_core,
command : [
mojom_parser,
'--output-root', meson.project_build_root(),
'--input-root', meson.project_source_root(),
'--mojoms', '@INPUT@'
])
# {interface}_ipa_interface.h
header = custom_target(name + '_ipa_interface_h',
input : mojom,
output : name + '_ipa_interface.h',
depends : mojom_templates,
install : true,
install_dir : ipa_headers_install_dir,
command : [
mojom_generator, 'generate',
'-g', 'libcamera',
'--bytecode_path', mojom_templates_dir,
'--libcamera_generate_header',
'--libcamera_output_path=@OUTPUT@',
'./' +'@INPUT@'
])
# {interface}_ipa_serializer.h
serializer = custom_target(name + '_ipa_serializer_h',
input : mojom,
output : name + '_ipa_serializer.h',
depends : mojom_templates,
command : [
mojom_generator, 'generate',
'-g', 'libcamera',
'--bytecode_path', mojom_templates_dir,
'--libcamera_generate_serializer',
'--libcamera_output_path=@OUTPUT@',
'./' +'@INPUT@'
])
# {interface}_ipa_proxy.h
proxy_header = custom_target(name + '_proxy_h',
input : mojom,
output : name + '_ipa_proxy.h',
depends : mojom_templates,
command : [
mojom_generator, 'generate',
'-g', 'libcamera',
'--bytecode_path', mojom_templates_dir,
'--libcamera_generate_proxy_h',
'--libcamera_output_path=@OUTPUT@',
'./' +'@INPUT@'
])
ipa_mojoms += {
'name': name,
'mojom': mojom,
}
libcamera_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
ipa_mojom_files += files(['core.mojom'])