[Buildroot] [PATCH] package/meson: support cmake exported packages

Yann E. MORIN yann.morin.1998 at free.fr
Thu Jan 2 18:34:38 UTC 2020


Marcin, All,

On 2019-08-06 10:28 +0200, Marcin Niestroj spake thusly:
> So far meson was not able to find CMake modules in cross compiled
> environments such as Buildroot. Added patch allows to do that
> now. Additionally meson needs to know path to cmake binary in order to
> finalize CMake module import.
> 
> Signed-off-by: Marcin Niestroj <m.niestroj at grinn-global.com>

Thanks for the patch. However, it took too long to review it, and now we
have a newer meson. 0.52.1, which already includes your changes, right?

As such, I've marked this patch as "Not applicable" in Patchwork.

Thanks you! :-)

Regards,
Yann E. MORIN.

> ---
>  ...port-for-crosscompiled-CMake-modules.patch | 60 +++++++++++++++++++
>  package/meson/cross-compilation.conf.in       |  1 +
>  package/pkg-meson.mk                          |  1 +
>  3 files changed, 62 insertions(+)
>  create mode 100644 package/meson/0002-Improve-support-for-crosscompiled-CMake-modules.patch
> 
> diff --git a/package/meson/0002-Improve-support-for-crosscompiled-CMake-modules.patch b/package/meson/0002-Improve-support-for-crosscompiled-CMake-modules.patch
> new file mode 100644
> index 0000000000..eeeab4962b
> --- /dev/null
> +++ b/package/meson/0002-Improve-support-for-crosscompiled-CMake-modules.patch
> @@ -0,0 +1,60 @@
> +From 61edbcf60e20dbf730e6074f055f78e0e217f4ed Mon Sep 17 00:00:00 2001
> +From: Marcin Niestroj <m.niestroj at grinn-global.com>
> +Date: Thu, 1 Aug 2019 11:01:49 +0200
> +Subject: [PATCH] Improve support for crosscompiled CMake modules
> +
> +commit 987539e2331f2c78e94cbcf3623a82a66dd52267 upstream.
> +
> +There are two variables that CMake takes into account during
> +find_package() in cross-compiled environments, which are: CMAKE_SYSROOT
> +and CMAKE_FIND_ROOT_PATH. Those are used in cmFindCommon::RerootPaths()
> +function, which blindly prepends all search paths with those specified
> +via CMAKE_SYSROOT and CMAKE_FIND_ROOT_PATH.
> +
> +Extend search paths by using CMAKE_SYSROOT and CMAKE_FIND_ROOT_PATH in a
> +similar way as CMake does, so we successfully find CMake packages
> +information in cross-compiled environments.
> +
> +Signed-off-by: Marcin Niestroj <m.niestroj at grinn-global.com>
> +---
> + mesonbuild/dependencies/base.py                | 11 ++++++++++-
> + mesonbuild/dependencies/data/CMakePathInfo.txt |  2 ++
> + 2 files changed, 12 insertions(+), 1 deletion(-)
> +
> +diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py
> +index 21da8e24..98b02ff7 100644
> +--- a/mesonbuild/dependencies/base.py
> ++++ b/mesonbuild/dependencies/base.py
> +@@ -1178,7 +1178,16 @@ class CMakeDependency(ExternalDependency):
> +             return None
> + 
> +         # Extract the variables and sanity check them
> +-        module_paths = sorted(set(self.get_cmake_var('MESON_PATHS_LIST')))
> ++        root_paths = set(self.get_cmake_var('MESON_FIND_ROOT_PATH'))
> ++        root_paths.update(set(self.get_cmake_var('MESON_CMAKE_SYSROOT')))
> ++        root_paths = sorted(root_paths)
> ++        root_paths = list(filter(lambda x: os.path.isdir(x), root_paths))
> ++        module_paths = set(self.get_cmake_var('MESON_PATHS_LIST'))
> ++        rooted_paths = []
> ++        for j in [Path(x) for x in root_paths]:
> ++            for i in [Path(x) for x in module_paths]:
> ++                rooted_paths.append(str(j / i.relative_to(i.anchor)))
> ++        module_paths = sorted(module_paths.union(rooted_paths))
> +         module_paths = list(filter(lambda x: os.path.isdir(x), module_paths))
> +         archs = self.get_cmake_var('MESON_ARCH_LIST')
> + 
> +diff --git a/mesonbuild/dependencies/data/CMakePathInfo.txt b/mesonbuild/dependencies/data/CMakePathInfo.txt
> +index 713c2da3..662ec583 100644
> +--- a/mesonbuild/dependencies/data/CMakePathInfo.txt
> ++++ b/mesonbuild/dependencies/data/CMakePathInfo.txt
> +@@ -25,5 +25,7 @@ endif()
> + set(MESON_ARCH_LIST ${LIB_ARCH_LIST})
> + set(MESON_PATHS_LIST ${TMP_PATHS_LIST})
> + set(MESON_CMAKE_ROOT ${CMAKE_ROOT})
> ++set(MESON_CMAKE_SYSROOT ${CMAKE_SYSROOT})
> ++set(MESON_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH})
> + 
> + message(STATUS ${TMP_PATHS_LIST})
> +-- 
> +2.22.0
> +
> diff --git a/package/meson/cross-compilation.conf.in b/package/meson/cross-compilation.conf.in
> index fc8e27f7eb..cd466dbd05 100644
> --- a/package/meson/cross-compilation.conf.in
> +++ b/package/meson/cross-compilation.conf.in
> @@ -9,6 +9,7 @@ cpp = '@TARGET_CROSS at g++'
>  ar = '@TARGET_CROSS at ar'
>  strip = '@TARGET_CROSS at strip'
>  pkgconfig = '@HOST_DIR@/usr/bin/pkg-config'
> +cmake = ['@BR2_CMAKE@', '-DCMAKE_TOOLCHAIN_FILE=@HOST_DIR@/share/buildroot/toolchainfile.cmake']
>  
>  [properties]
>  needs_exe_wrapper = true
> diff --git a/package/pkg-meson.mk b/package/pkg-meson.mk
> index 0b811d1cc0..ec3e89dc1a 100644
> --- a/package/pkg-meson.mk
> +++ b/package/pkg-meson.mk
> @@ -79,6 +79,7 @@ define $(2)_CONFIGURE_CMDS
>  	    -e "s%@TARGET_LDFLAGS@%$$($(2)_MESON_SED_LDFLAGS)%g" \
>  	    -e "s%@TARGET_CXXFLAGS@%$$($(2)_MESON_SED_CXXFLAGS)%g" \
>  	    -e "s%@HOST_DIR@%$$(HOST_DIR)%g" \
> +	    -e "s%@BR2_CMAKE@%$$(BR2_CMAKE)%g" \
>  	    package/meson/cross-compilation.conf.in \
>  	    > $$($$(PKG)_SRCDIR)/build/cross-compilation.conf
>  	PATH=$$(BR_PATH) $$($$(PKG)_CONF_ENV) $$(MESON) \
> -- 
> 2.22.0
> 
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 561 099 427 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'


More information about the buildroot mailing list