I am seeing in mesonbuild/dependencies/pkgconfig.pysysroot = environment.properties[for_machine].get_sys_root()
if sysroot:
env['PKG_CONFIG_SYSROOT_DIR'] = sysrooSo we probably need to ensure this 'sys_root' is correctly set, and then things will simply work?AlexOn Tue, 30 Nov 2021 at 20:15, Joel Winarske <joel.winarske@gmail.com> wrote:On Tue, Nov 30, 2021 at 10:53 AM Alexander Kanavin <alex.kanavin@gmail.com> wrote:I do not quite understand the use case. What is being done with the full path to the header?AlexOn Tue, 30 Nov 2021 at 19:26, Joel Winarske <joel.winarske@gmail.com> wrote:This pattern works to get the absolute path of the header:Yocto
EXTRA_OEMESON += "--prefix ${STAGING_DIR_TARGET}/usr"Meson
vulkan_dep = dependency('vulkan')
vulkan_hpp = join_paths([
vulkan_dep.get_pkgconfig_variable('includedir', define_variable: ['prefix', get_option('prefix')]),
'vulkan',
'vulkan.hpp'
])Implementation in build/meson-log.txtCalled `/b/github-ci/_work/meta-flutter/rpi4-drm-honister-latest/rpi4/tmp/work/cortexa72-poky-linux/vkmark/git-r0/recipe-sysroot-native/usr/bin/pkg-config --define-variable=prefix=/b/github-ci/_work/meta-flutter/rpi4-drm-honister-latest/rpi4/tmp/work/cortexa72-poky-linux/vkmark/git-r0/recipe-sysroot/usr --variable=includedir vulkan` -> 0One would expect the following meson to work if STAGING_DIR_TARGET were set, as that's how pkg-config works:vulkan_dep = dependency('vulkan')
vulkan_hpp = join_paths([
vulkan_dep.get_pkgconfig_variable('includedir'),
'vulkan',
'vulkan.hpp'
])This will always return /usr/include/vulkan/vulkan.hpp regardless of PKG_CONFIG_SYSROOT_DIR value. With PKG_CONFIG_SYSROOT_DIR set, it should be /usr/include/vulkan/vulkan.hpp with prepend of PKG_CONFIG_SYSROOT_DIR value.Sandbox testing of pkg-config$ export STAGING_DIR_TARGET=/b/github-ci/_work/meta-flutter/rpi4-drm-honister-latest/raspberrypi4-64/tmp/work/cortexa72-poky-linux/vkmark/git-r0/recipe-sysroot
$ PKG_CONFIG_SYSROOT_DIR=$STAGING_DIR_TARGET pkg-config --define-variable=prefix=/opt --variable=includedir vulkan
/b/github-ci/_work/meta-flutter/rpi4-drm-honister-latest/raspberrypi4-64/tmp/work/cortexa72-poky-linux/vkmark/git-r0/recipe-sysroot/opt/includemeson.crossSetting sys_root in the properties section of meson.cross (patching meson.bbclass) indirectly sets PKG_CONFIG_SYSROOT_DIR. The setting of sys_root is present in nativesdk_meson*.bb, not meson*.bb.The issue for meson is that they are not passing the PKG_CONFIG_SYSROOT_DIR variable to the shell that launches pkg-config.My proposed work around (this email thread) would fix the behavior. I believe the proper fix is for meson to address upstream. Still waiting on a response from them: https://github.com/mesonbuild/meson/issues/9674JoelOn Tue, Nov 30, 2021 at 9:49 AM Alexander Kanavin <alex.kanavin@gmail.com> wrote:On Tue, 30 Nov 2021 at 18:20, Joel Winarske <joel.winarske@gmail.com> wrote:Meson does not expose PKG_CONFIG_SYSROOT_DIR to the pkg-config process.Currently meson.cross as generated in meson.bbclass points directly to the pkg-config executable (no wrapper script).PKG_CONFIG_SYSROOT_DIR behaves like a simple string prepend to all package config variable queries. So if you want to determine the absolute path of a variable in .pc you set PKG_CONFIG_SYSROOT_DIR and make your query. Currently this is not possible with Yocto+Meson.I think a simple wrapper script would resolve this. This is from https://autotools.io/pkgconfig/cross-compiling.html:#!/bin/sh SYSROOT=/build/root export PKG_CONFIG_PATH= export PKG_CONFIG_LIBDIR=${SYSROOT}/usr/lib/pkgconfig:${SYSROOT}/usr/share/pkgconfig export PKG_CONFIG_SYSROOT_DIR=${SYSROOT} exec pkg-config "$@"The wrapper script would be generated per recipe via meson.bbclass, meson.cross would then reference this wrapper instead of the pkg-config executable.Thoughts?I don't think this is correct. Meson's way of doing things is that you are not supposed to get the include/library paths directly from pkg-config, but rather usehttps://mesonbuild.com/Reference-manual_functions.html#dependency and meson will take care of any needed prefixes to the paths.For the custom variables defined in .pc that happen to contain paths, PKG_CONFIG_SYSROOT_DIR has no effect at all, so you need to manually prepend it anyway everywhere where they're used. pkg-config does not know what variable is a path and what isn't.Alex