Yes, if the sys_root key value in meson.cross is present PKG_CONFIG_SYSROOT_DIR gets set. Honister patch I confirmed with: https://github.com/jwinarske/manifests/blob/honister/rpi64/0001-Add-sys_root-to-properties-section.patch
The issue is that meson doesn't pass PKG_CONFIG_SYSROOT_DIR to the shell environment that runs pkg-config, as with the pkg-config sandbox test it does work. On Tue, Nov 30, 2021 at 11:40 AM Alexander Kanavin <[email protected]> wrote: > I am seeing in mesonbuild/dependencies/pkgconfig.py > > sysroot = environment.properties[for_machine].get_sys_root() > if sysroot: > env['PKG_CONFIG_SYSROOT_DIR'] = sysroo > > So we probably need to ensure this 'sys_root' is correctly set, and then > things will simply work? > > Alex > > On Tue, 30 Nov 2021 at 20:15, Joel Winarske <[email protected]> > wrote: > >> https://github.com/vkmark/vkmark/blob/master/src/meson.build#L9 >> >> On Tue, Nov 30, 2021 at 10:53 AM Alexander Kanavin < >> [email protected]> wrote: >> >>> I do not quite understand the use case. What is being done with the full >>> path to the header? >>> >>> Alex >>> >>> On Tue, 30 Nov 2021 at 19:26, Joel Winarske <[email protected]> >>> 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.txt >>>> >>>> Called >>>> `/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` -> 0 >>>> >>>> >>>> One 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/include >>>> >>>> >>>> meson.cross >>>> >>>> Setting 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/9674 >>>> >>>> >>>> Joel >>>> >>>> On Tue, Nov 30, 2021 at 9:49 AM Alexander Kanavin < >>>> [email protected]> wrote: >>>> >>>>> On Tue, 30 Nov 2021 at 18:20, Joel Winarske <[email protected]> >>>>> 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 use >>>>> https://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 >>>>> >>>>
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#158991): https://lists.openembedded.org/g/openembedded-core/message/158991 Mute This Topic: https://lists.openembedded.org/mt/87407703/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
