Python scripts run as part of the build process need to take a few actions specific to the environment in which they operate. One of those is disabling the Python bytecode cache, to avoid writing .pyc files to the source tree. This is done manually in the IPC generate.py and parser.py scripts. The current implementation is not ideal because it hardcodes in the scripts information related to the environment in which they operate. As those scripts are part of libcamera this is more of a theoretical issue than a practical one. A second issue is that future Python scripts will need to duplicate similar mechanisms, resulting in a higher maintenance burden. Address the issue with a different approach, by creating a meson environment for the Python scripts, and passing it to the custom_target() functions. The environment only disables the bytecode cache for now. The diffstat shows an increase in code size. This is expected to be offset by usage of the environment for more Python scripts, as well as support of more variables in the environment. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
172 lines
6.3 KiB
Meson
172 lines
6.3 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@'
|
|
],
|
|
env : py_build_env)
|
|
|
|
# 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@'
|
|
],
|
|
env : py_build_env)
|
|
|
|
# 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@'
|
|
],
|
|
env : py_build_env)
|
|
|
|
# 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@'
|
|
],
|
|
env : py_build_env)
|
|
|
|
# {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@'
|
|
],
|
|
env : py_build_env)
|
|
|
|
# {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@'
|
|
],
|
|
env : py_build_env)
|
|
|
|
# {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@'
|
|
],
|
|
env : py_build_env)
|
|
|
|
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'])
|