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 <joel.winar...@gmail.com> wrote: > https://github.com/vkmark/vkmark/blob/master/src/meson.build#L9 > > On Tue, Nov 30, 2021 at 10:53 AM Alexander Kanavin <alex.kana...@gmail.com> > 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 <joel.winar...@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.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 < >>> alex.kana...@gmail.com> wrote: >>> >>>> On Tue, 30 Nov 2021 at 18:20, Joel Winarske <joel.winar...@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 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 (#158990): https://lists.openembedded.org/g/openembedded-core/message/158990 Mute This Topic: https://lists.openembedded.org/mt/87407703/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-