[libcamera-devel,v4,0/2] Introduce libyuv to subprojects
mbox series

Message ID 20210204012731.1942112-1-hiroh@chromium.org
Headers show
Series
  • Introduce libyuv to subprojects
Related show

Message

Hirokazu Honda Feb. 4, 2021, 1:27 a.m. UTC
This patch series enables using libyuv library in libcamera.
As a libyuv doesn't likely exist as a native library, the libyuv
code is downloaded into subprojects and is built with. For the
environment where the wrap-based solution is prohibited, the
meson file first tries building a local libyuv library first,
and if it fails, does the wra-based download solution.

Change in v4
- Adopt the fallback solution suggested by Laurent
- Revert the meson option solution.

Hirokazu Honda (2):
  subprojects: Add libyuv and built if -Dandroid=enabled
  android: Try build with a local libyuv first

 README.rst              |  2 +-
 meson.build             |  2 +-
 src/android/meson.build | 23 +++++++++++++++++++++++
 subprojects/.gitignore  |  1 +
 subprojects/libyuv.wrap |  4 ++++
 5 files changed, 30 insertions(+), 2 deletions(-)
 create mode 100644 subprojects/.gitignore
 create mode 100644 subprojects/libyuv.wrap

--
2.30.0.365.g02bc693789-goog

Comments

Laurent Pinchart Feb. 4, 2021, 3:01 a.m. UTC | #1
Hi Hiro,

Thank you for the patch.

On Thu, Feb 04, 2021 at 01:27:31AM +0000, Hirokazu Honda wrote:
> There is an environment where the wrap-based download is
> prohibited by "--wrap-mode nodownload". The local libyuv
> library needs to be built with in such a build environment.

I'd say "In such cases, libyuv needs to be provided by the build
environments".

> For the environment, this changes the meson file to first
> try building a local libyuv, and if it fails, download libyuv

s/For the environment/To support this/
s/building/using/

> code and build with it as a fallback.
> 
> Signed-off-by: Hirokazu Honda <hiroh@chromium.org>
> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

Could you please let me know if you're fine with the changes to the
commit message ? If so there's no need to resubmit, I'll apply the
patches with the above changes.

> ---
>  src/android/meson.build | 34 ++++++++++++++++++++--------------
>  1 file changed, 20 insertions(+), 14 deletions(-)
> 
> diff --git a/src/android/meson.build b/src/android/meson.build
> index 7619517a..95d0f420 100644
> --- a/src/android/meson.build
> +++ b/src/android/meson.build
> @@ -15,20 +15,26 @@ foreach dep : android_deps
>  endforeach
> 
>  if android_enabled
> -    cmake = import('cmake')
> -
> -    libyuv_vars = cmake.subproject_options()
> -    libyuv_vars.add_cmake_defines({'CMAKE_POSITION_INDEPENDENT_CODE': 'ON'})
> -    libyuv_vars.set_override_option('cpp_std', 'c++17')
> -    libyuv_vars.append_compile_args('cpp',
> -         '-Wno-sign-compare',
> -         '-Wno-unused-variable',
> -         '-Wno-unused-parameter')
> -    libyuv_vars.append_link_args('-ljpeg')
> -    libyuv = cmake.subproject('libyuv', options : libyuv_vars)
> -    libyuv_dep = libyuv.dependency('yuv')
> -
> -    android_deps += [ libyuv_dep, ]
> +    libyuv_dep = dependency('libyuv', required : false)
> +
> +    # Fallback to a subproject if libyuv isn't found, as it's typically not
> +    # provided by distributions.
> +    if not libyuv_dep.found()
> +        cmake = import('cmake')
> +
> +        libyuv_vars = cmake.subproject_options()
> +        libyuv_vars.add_cmake_defines({'CMAKE_POSITION_INDEPENDENT_CODE': 'ON'})
> +        libyuv_vars.set_override_option('cpp_std', 'c++17')
> +        libyuv_vars.append_compile_args('cpp',
> +             '-Wno-sign-compare',
> +             '-Wno-unused-variable',
> +             '-Wno-unused-parameter')
> +        libyuv_vars.append_link_args('-ljpeg')
> +        libyuv = cmake.subproject('libyuv', options : libyuv_vars)
> +        libyuv_dep = libyuv.dependency('yuv')
> +   endif
> +
> +   android_deps += [ libyuv_dep, ]
>  endif
> 
>  android_hal_sources = files([
Hirokazu Honda Feb. 4, 2021, 3:03 a.m. UTC | #2
On Thu, Feb 4, 2021 at 12:01 PM Laurent Pinchart
<laurent.pinchart@ideasonboard.com> wrote:
>
> Hi Hiro,
>
> Thank you for the patch.
>
> On Thu, Feb 04, 2021 at 01:27:31AM +0000, Hirokazu Honda wrote:
> > There is an environment where the wrap-based download is
> > prohibited by "--wrap-mode nodownload". The local libyuv
> > library needs to be built with in such a build environment.
>
> I'd say "In such cases, libyuv needs to be provided by the build
> environments".
>
> > For the environment, this changes the meson file to first
> > try building a local libyuv, and if it fails, download libyuv
>
> s/For the environment/To support this/
> s/building/using/
>
> > code and build with it as a fallback.
> >
> > Signed-off-by: Hirokazu Honda <hiroh@chromium.org>
> > Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
>
> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
>
> Could you please let me know if you're fine with the changes to the
> commit message ? If so there's no need to resubmit, I'll apply the
> patches with the above changes.
>

The changes look ok.
I appreciate if you submit with applying them.

Thanks.
-Hiro

> > ---
> >  src/android/meson.build | 34 ++++++++++++++++++++--------------
> >  1 file changed, 20 insertions(+), 14 deletions(-)
> >
> > diff --git a/src/android/meson.build b/src/android/meson.build
> > index 7619517a..95d0f420 100644
> > --- a/src/android/meson.build
> > +++ b/src/android/meson.build
> > @@ -15,20 +15,26 @@ foreach dep : android_deps
> >  endforeach
> >
> >  if android_enabled
> > -    cmake = import('cmake')
> > -
> > -    libyuv_vars = cmake.subproject_options()
> > -    libyuv_vars.add_cmake_defines({'CMAKE_POSITION_INDEPENDENT_CODE': 'ON'})
> > -    libyuv_vars.set_override_option('cpp_std', 'c++17')
> > -    libyuv_vars.append_compile_args('cpp',
> > -         '-Wno-sign-compare',
> > -         '-Wno-unused-variable',
> > -         '-Wno-unused-parameter')
> > -    libyuv_vars.append_link_args('-ljpeg')
> > -    libyuv = cmake.subproject('libyuv', options : libyuv_vars)
> > -    libyuv_dep = libyuv.dependency('yuv')
> > -
> > -    android_deps += [ libyuv_dep, ]
> > +    libyuv_dep = dependency('libyuv', required : false)
> > +
> > +    # Fallback to a subproject if libyuv isn't found, as it's typically not
> > +    # provided by distributions.
> > +    if not libyuv_dep.found()
> > +        cmake = import('cmake')
> > +
> > +        libyuv_vars = cmake.subproject_options()
> > +        libyuv_vars.add_cmake_defines({'CMAKE_POSITION_INDEPENDENT_CODE': 'ON'})
> > +        libyuv_vars.set_override_option('cpp_std', 'c++17')
> > +        libyuv_vars.append_compile_args('cpp',
> > +             '-Wno-sign-compare',
> > +             '-Wno-unused-variable',
> > +             '-Wno-unused-parameter')
> > +        libyuv_vars.append_link_args('-ljpeg')
> > +        libyuv = cmake.subproject('libyuv', options : libyuv_vars)
> > +        libyuv_dep = libyuv.dependency('yuv')
> > +   endif
> > +
> > +   android_deps += [ libyuv_dep, ]
> >  endif
> >
> >  android_hal_sources = files([
>
> --
> Regards,
>
> Laurent Pinchart
Laurent Pinchart Feb. 4, 2021, 3:31 a.m. UTC | #3
Hi Hiro,

On Thu, Feb 04, 2021 at 12:03:04PM +0900, Hirokazu Honda wrote:
> On Thu, Feb 4, 2021 at 12:01 PM Laurent Pinchart wrote:
> > On Thu, Feb 04, 2021 at 01:27:31AM +0000, Hirokazu Honda wrote:
> > > There is an environment where the wrap-based download is
> > > prohibited by "--wrap-mode nodownload". The local libyuv
> > > library needs to be built with in such a build environment.
> >
> > I'd say "In such cases, libyuv needs to be provided by the build
> > environments".
> >
> > > For the environment, this changes the meson file to first
> > > try building a local libyuv, and if it fails, download libyuv
> >
> > s/For the environment/To support this/
> > s/building/using/
> >
> > > code and build with it as a fallback.
> > >
> > > Signed-off-by: Hirokazu Honda <hiroh@chromium.org>
> > > Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
> >
> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> >
> > Could you please let me know if you're fine with the changes to the
> > commit message ? If so there's no need to resubmit, I'll apply the
> > patches with the above changes.
> 
> The changes look ok.
> I appreciate if you submit with applying them.

Pushed to the master branch :-) Thank you for your work.

> > > ---
> > >  src/android/meson.build | 34 ++++++++++++++++++++--------------
> > >  1 file changed, 20 insertions(+), 14 deletions(-)
> > >
> > > diff --git a/src/android/meson.build b/src/android/meson.build
> > > index 7619517a..95d0f420 100644
> > > --- a/src/android/meson.build
> > > +++ b/src/android/meson.build
> > > @@ -15,20 +15,26 @@ foreach dep : android_deps
> > >  endforeach
> > >
> > >  if android_enabled
> > > -    cmake = import('cmake')
> > > -
> > > -    libyuv_vars = cmake.subproject_options()
> > > -    libyuv_vars.add_cmake_defines({'CMAKE_POSITION_INDEPENDENT_CODE': 'ON'})
> > > -    libyuv_vars.set_override_option('cpp_std', 'c++17')
> > > -    libyuv_vars.append_compile_args('cpp',
> > > -         '-Wno-sign-compare',
> > > -         '-Wno-unused-variable',
> > > -         '-Wno-unused-parameter')
> > > -    libyuv_vars.append_link_args('-ljpeg')
> > > -    libyuv = cmake.subproject('libyuv', options : libyuv_vars)
> > > -    libyuv_dep = libyuv.dependency('yuv')
> > > -
> > > -    android_deps += [ libyuv_dep, ]
> > > +    libyuv_dep = dependency('libyuv', required : false)
> > > +
> > > +    # Fallback to a subproject if libyuv isn't found, as it's typically not
> > > +    # provided by distributions.
> > > +    if not libyuv_dep.found()
> > > +        cmake = import('cmake')
> > > +
> > > +        libyuv_vars = cmake.subproject_options()
> > > +        libyuv_vars.add_cmake_defines({'CMAKE_POSITION_INDEPENDENT_CODE': 'ON'})
> > > +        libyuv_vars.set_override_option('cpp_std', 'c++17')
> > > +        libyuv_vars.append_compile_args('cpp',
> > > +             '-Wno-sign-compare',
> > > +             '-Wno-unused-variable',
> > > +             '-Wno-unused-parameter')
> > > +        libyuv_vars.append_link_args('-ljpeg')
> > > +        libyuv = cmake.subproject('libyuv', options : libyuv_vars)
> > > +        libyuv_dep = libyuv.dependency('yuv')
> > > +   endif
> > > +
> > > +   android_deps += [ libyuv_dep, ]
> > >  endif
> > >
> > >  android_hal_sources = files([