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>
166 lines
6.0 KiB
Meson
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'])
|