Building the libcamera Android layer currently makes use of features from meson 0.55. The core libcamera framework in the default configuration without android enabled uses the 'summary' feature available in 0.53, and is the lowest supportable meson version if the Android HAL is excluded. Ubuntu 20.04 LTS currently provides meson 0.53 and represents an acceptable minimum version to support. Platforms utilising the Android component will have full control over their build environment and can ensure that they provide a more recent version of meson. Reduce the supported meson version for the project to 0.53 to facilitate building on more distributions without having to manually update the meson package. Meson will output a warning that features not available in 0.53 are used if the Android HAL is enabled. This is considered as an acceptable middleground to improve the experience on the latest Ubuntu LTS, until 22.04 LTS is released and provides a newer meson version. Signed-off-by: Christian Rauch <Rauch.Christian@gmx.de> [Kieran: Add comment about the android meson requirements] Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
190 lines
6.2 KiB
Meson
190 lines
6.2 KiB
Meson
# SPDX-License-Identifier: CC0-1.0
|
|
|
|
project('libcamera', 'c', 'cpp',
|
|
# Use of the Android component requires meson 0.55, but Ubuntu 20.04 LTS
|
|
# ships meson 0.53. Improve the Ubuntu experience at the expense of
|
|
# Android as the former is a much more common use case than the latter at
|
|
# this point. This should be fixed after Ubuntu releases 22.04 LTS.
|
|
meson_version : '>= 0.53',
|
|
version : '0.0.0',
|
|
default_options : [
|
|
'werror=true',
|
|
'warning_level=2',
|
|
'cpp_std=c++17',
|
|
],
|
|
license : 'LGPL 2.1+')
|
|
|
|
# Generate version information. The libcamera_git_version variable contains the
|
|
# full version with git patch count and SHA1 (e.g. 1.2.3+211-c94a24f4), while
|
|
# the libcamera_version variable contains the major.minor.patch (e.g. 1.2.3)
|
|
# only. If the source tree isn't under git control, or if it matches the last
|
|
# git version tag, the build metadata (e.g. +211-c94a24f4) is omitted from
|
|
# libcamera_git_version.
|
|
libcamera_git_version = run_command('utils/gen-version.sh',
|
|
meson.build_root(),
|
|
meson.source_root()).stdout().strip()
|
|
if libcamera_git_version == ''
|
|
libcamera_git_version = meson.project_version()
|
|
endif
|
|
|
|
libcamera_version = libcamera_git_version.split('+')[0]
|
|
|
|
# This script gererates the .tarball-version file on a 'meson dist' command.
|
|
meson.add_dist_script('utils/run-dist.sh')
|
|
|
|
# Configure the build environment.
|
|
cc = meson.get_compiler('c')
|
|
cxx = meson.get_compiler('cpp')
|
|
config_h = configuration_data()
|
|
|
|
if cc.has_header_symbol('unistd.h', 'issetugid')
|
|
config_h.set('HAVE_ISSETUGID', 1)
|
|
endif
|
|
|
|
if cc.has_header_symbol('stdlib.h', 'secure_getenv', prefix : '#define _GNU_SOURCE')
|
|
config_h.set('HAVE_SECURE_GETENV', 1)
|
|
endif
|
|
|
|
common_arguments = [
|
|
'-Wshadow',
|
|
'-include', 'config.h',
|
|
]
|
|
|
|
c_arguments = []
|
|
cpp_arguments = []
|
|
|
|
if cc.get_id() == 'clang'
|
|
if cc.version().version_compare('<9')
|
|
error('clang version is too old, libcamera requires 9.0 or newer')
|
|
endif
|
|
|
|
# Turn _FORTIFY_SOURCE by default on optimised builds (as it requires -O1
|
|
# or higher). This is needed on clang only as gcc enables it by default.
|
|
if get_option('optimization') != '0'
|
|
common_arguments += [
|
|
'-D_FORTIFY_SOURCE=2',
|
|
]
|
|
endif
|
|
|
|
# Use libc++ by default if available instead of libstdc++ when compiling
|
|
# with clang.
|
|
if cc.find_library('libc++', required: false).found()
|
|
cpp_arguments += [
|
|
'-stdlib=libc++',
|
|
]
|
|
endif
|
|
|
|
cpp_arguments += [
|
|
'-Wextra-semi',
|
|
'-Wthread-safety',
|
|
]
|
|
endif
|
|
|
|
if cc.get_id() == 'gcc'
|
|
if cc.version().version_compare('<7')
|
|
error('gcc version is too old, libcamera requires 7.0 or newer')
|
|
endif
|
|
|
|
# On gcc 7 and 8, the file system library is provided in a separate static
|
|
# library.
|
|
if cc.version().version_compare('<9')
|
|
cpp_arguments += [
|
|
'-lstdc++fs',
|
|
]
|
|
endif
|
|
|
|
# gcc 7.1 introduced processor-specific ABI breakages related to parameter
|
|
# passing on ARM platforms. This generates a large number of messages
|
|
# during compilation with gcc >=7.1. Silence them.
|
|
if (host_machine.cpu_family() == 'arm' and
|
|
cc.version().version_compare('>=7.1'))
|
|
cpp_arguments += [
|
|
'-Wno-psabi',
|
|
]
|
|
endif
|
|
endif
|
|
|
|
# We use C99 designated initializers for arrays as C++ has no equivalent
|
|
# feature. Both gcc and clang support this extension, but recent
|
|
# versions of clang generate a warning that needs to be disabled.
|
|
if cc.has_argument('-Wno-c99-designator')
|
|
common_arguments += [
|
|
'-Wno-c99-designator',
|
|
]
|
|
endif
|
|
|
|
c_arguments += common_arguments
|
|
cpp_arguments += common_arguments
|
|
|
|
add_project_arguments(c_arguments, language : 'c')
|
|
add_project_arguments(cpp_arguments, language : 'cpp')
|
|
add_project_link_arguments(cpp_arguments, language : 'cpp')
|
|
|
|
libcamera_includes = include_directories('include')
|
|
|
|
# Sub-directories fill py_modules with their dependencies.
|
|
py_modules = []
|
|
|
|
# Libraries used by multiple components
|
|
liblttng = cc.find_library('lttng-ust', required : get_option('tracing'))
|
|
|
|
# Pipeline handlers
|
|
#
|
|
# Tests require the vimc pipeline handler, include it automatically when tests
|
|
# are enabled.
|
|
pipelines = get_option('pipelines')
|
|
|
|
if get_option('test') and 'vimc' not in pipelines
|
|
message('Enabling vimc pipeline handler to support tests')
|
|
pipelines += ['vimc']
|
|
endif
|
|
|
|
# Utilities are parsed first to provide support for other components.
|
|
subdir('utils')
|
|
|
|
subdir('include')
|
|
subdir('src')
|
|
|
|
# The documentation and test components are optional and can be disabled
|
|
# through configuration values. They are enabled by default.
|
|
|
|
subdir('Documentation')
|
|
subdir('test')
|
|
|
|
if not meson.is_cross_build()
|
|
kernel_version_req = '>= 5.0.0'
|
|
kernel_version = run_command('uname', '-r').stdout().strip()
|
|
if not kernel_version.version_compare(kernel_version_req)
|
|
warning('The current running kernel version @0@ is too old to run libcamera.'
|
|
.format(kernel_version))
|
|
warning('If you intend to use libcamera on this machine, please upgrade to a kernel @0@.'
|
|
.format(kernel_version_req))
|
|
endif
|
|
endif
|
|
|
|
# Create a symlink from the build root to the source root. This is used when
|
|
# running libcamera from the build directory to locate resources in the source
|
|
# directory (such as IPA configuration files).
|
|
run_command('ln', '-fsT', meson.source_root(), meson.build_root() / 'source')
|
|
|
|
configure_file(output : 'config.h', configuration : config_h)
|
|
|
|
# Check for python installation and modules.
|
|
py_mod = import('python')
|
|
py_mod.find_installation('python3', modules: py_modules)
|
|
|
|
## Summarise Configurations
|
|
summary({
|
|
'Enabled pipelines': pipelines,
|
|
'Enabled IPA modules': ipa_modules,
|
|
'Tracing support': tracing_enabled,
|
|
'Android support': android_enabled,
|
|
'GStreamer support': gst_enabled,
|
|
'V4L2 emulation support': v4l2_enabled,
|
|
'cam application': cam_enabled,
|
|
'qcam application': qcam_enabled,
|
|
'lc-compliance application': lc_compliance_enabled,
|
|
'Unit tests': test_enabled,
|
|
},
|
|
section : 'Configuration',
|
|
bool_yn : true)
|