imx-gpu-viv: fix libvulkan soname issue

Submitted by Ming Liu on Oct. 1, 2019, 8:29 p.m. | Patch ID: 165467

Details

Message ID 1569961748-8311-1-git-send-email-liu.ming50@gmail.com
State New
Headers show

Commit Message

Ming Liu Oct. 1, 2019, 8:29 p.m.
From: Ming Liu <liu.ming50@gmail.com>

Installing the vulkan driver in ${D}${libdir}/vulkan subdirectory is
not a proper fix for the conflict with vulkan-loader. The root cause
of this conflict is that both our libvulkan and vulkan-loader's
libvulkan have a same soname libvulkan.so.1, we should set PRIVATE_LIBS
in this case to fix the conflict. Or else, the soname would still be
detected during package_do_shlibs, and hence will lead to other
dependency problems for the recipes that depending on vulkan-loader.

For instance, this patch fixes a following error:
| ERROR: gstreamer1.0-plugins-bad-1.14.imx-r0 do_package_qa:
| QA Issue: /usr/lib/gstreamer-1.0/libgstvulkan.so contained in package gstreamer1.0-plugins-bad-vulkan requires libvulkan.so.1()(64bit),
| but no providers found in RDEPENDS_gstreamer1.0-plugins-bad-vulkan? [file-rdeps]
| ERROR: gstreamer1.0-plugins-bad-1.14.imx-r0 do_package_qa: QA run found fatal errors. Please consider fixing them.

Signed-off-by: Ming Liu <liu.ming50@gmail.com>
---
 recipes-graphics/imx-gpu-viv/imx-gpu-viv-6.inc | 13 ++++---------
 1 file changed, 4 insertions(+), 9 deletions(-)

Patch hide | download patch | download mbox

diff --git a/recipes-graphics/imx-gpu-viv/imx-gpu-viv-6.inc b/recipes-graphics/imx-gpu-viv/imx-gpu-viv-6.inc
index ef10c96..e75ada0 100644
--- a/recipes-graphics/imx-gpu-viv/imx-gpu-viv-6.inc
+++ b/recipes-graphics/imx-gpu-viv/imx-gpu-viv-6.inc
@@ -233,12 +233,7 @@  do_install () {
     ln -sf libGLESv2.so.2.0.0 ${D}${libdir}/libGLESv2.so
 
     if [ "${IS_MX8}" = "1" ]; then
-        # Install the vulkan driver in a sub-folder. When installed in the same
-        # folder as the vulkan loader layer library, an incorrect linkage is
-        # created from libvulkan.so.1 to our library instead of the loader
-        # layer library.
-        install -d ${D}${libdir}/vulkan
-        mv ${D}${libdir}/libvulkan-${backend}.so ${D}${libdir}/vulkan/libvulkan_VSI.so
+        mv ${D}${libdir}/libvulkan-${backend}.so ${D}${libdir}/libvulkan_VSI${SOLIBS}
     fi
     for header in ${GLES3_HEADER_REMOVALS}; do
         rm -f ${D}${includedir}/GLES3/${header}
@@ -307,9 +302,9 @@  FILES_libgbm-imx_mx8           = "${libdir}/libgbm${SOLIBS} ${libdir}/gbm_viv${S
 FILES_libgbm-imx-dev_mx8       = "${libdir}/pkgconfig/gbm.pc ${includedir}/gbm.h ${libdir}/libgbm${SOLIBSDEV}"
 RDEPENDS_libgbm-imx_append_mx8 = " libdrm"
 
-FILES_libvulkan-imx = "${libdir}/vulkan/libvulkan_VSI${SOLIBS} ${libdir}/libSPIRV_viv${SOLIBS}"
-FILES_libvulkan-imx-dev = "${includedir}/vulkan ${libdir}/vulkan/libvulkan_VSI${SOLIBSDEV}"
-INSANE_SKIP_libvulkan-imx += "dev-deps dev-so"
+FILES_libvulkan-imx = "${libdir}/libvulkan_VSI${SOLIBS} ${libdir}/libSPIRV_viv${SOLIBS}"
+FILES_libvulkan-imx-dev = "${includedir}/vulkan"
+PRIVATE_LIBS_libvulkan-imx = "libvulkan.so.1"
 
 FILES_libopenvx-imx = "${libdir}/libOpenVX${SOLIBS} ${libdir}/libOpenVXC${SOLIBS} ${libdir}/libOpenVXU${SOLIBS}"
 FILES_libopenvx-imx-dev = "${includedir}/VX ${libdir}/libopenVX${SOLIBSDEV}"

Comments

Max Krummenacher Oct. 2, 2019, 7:51 a.m.
Hi Ming

While this fixes the conflict I believe (or hope) that
imx-gpu-viv/libvulkan_VSI provides the vulkan ICD (installable client
driver) for the Vivante GPU while libvulkan from vulkan_loader provides the
vulkan_loader.

So we likely need both shared objects to use vulkan.

I guess the proper fix is to change the soname to something different,
preferably in the upstream binary, until then by patching the shared
object. I sent a pull request on github.

https://github.com/Freescale/meta-freescale/pull/178

Max

Am Di., 1. Okt. 2019 um 22:30 Uhr schrieb <liu.ming50@gmail.com>:

> From: Ming Liu <liu.ming50@gmail.com>
>
> Installing the vulkan driver in ${D}${libdir}/vulkan subdirectory is
> not a proper fix for the conflict with vulkan-loader. The root cause
> of this conflict is that both our libvulkan and vulkan-loader's
> libvulkan have a same soname libvulkan.so.1, we should set PRIVATE_LIBS
> in this case to fix the conflict. Or else, the soname would still be
> detected during package_do_shlibs, and hence will lead to other
> dependency problems for the recipes that depending on vulkan-loader.
>
> For instance, this patch fixes a following error:
> | ERROR: gstreamer1.0-plugins-bad-1.14.imx-r0 do_package_qa:
> | QA Issue: /usr/lib/gstreamer-1.0/libgstvulkan.so contained in package
> gstreamer1.0-plugins-bad-vulkan requires libvulkan.so.1()(64bit),
> | but no providers found in RDEPENDS_gstreamer1.0-plugins-bad-vulkan?
> [file-rdeps]
> | ERROR: gstreamer1.0-plugins-bad-1.14.imx-r0 do_package_qa: QA run found
> fatal errors. Please consider fixing them.
>
> Signed-off-by: Ming Liu <liu.ming50@gmail.com>
> ---
>  recipes-graphics/imx-gpu-viv/imx-gpu-viv-6.inc | 13 ++++---------
>  1 file changed, 4 insertions(+), 9 deletions(-)
>
> diff --git a/recipes-graphics/imx-gpu-viv/imx-gpu-viv-6.inc
> b/recipes-graphics/imx-gpu-viv/imx-gpu-viv-6.inc
> index ef10c96..e75ada0 100644
> --- a/recipes-graphics/imx-gpu-viv/imx-gpu-viv-6.inc
> +++ b/recipes-graphics/imx-gpu-viv/imx-gpu-viv-6.inc
> @@ -233,12 +233,7 @@ do_install () {
>      ln -sf libGLESv2.so.2.0.0 ${D}${libdir}/libGLESv2.so
>
>      if [ "${IS_MX8}" = "1" ]; then
> -        # Install the vulkan driver in a sub-folder. When installed in
> the same
> -        # folder as the vulkan loader layer library, an incorrect linkage
> is
> -        # created from libvulkan.so.1 to our library instead of the loader
> -        # layer library.
> -        install -d ${D}${libdir}/vulkan
> -        mv ${D}${libdir}/libvulkan-${backend}.so
> ${D}${libdir}/vulkan/libvulkan_VSI.so
> +        mv ${D}${libdir}/libvulkan-${backend}.so
> ${D}${libdir}/libvulkan_VSI${SOLIBS}
>      fi
>      for header in ${GLES3_HEADER_REMOVALS}; do
>          rm -f ${D}${includedir}/GLES3/${header}
> @@ -307,9 +302,9 @@ FILES_libgbm-imx_mx8           =
> "${libdir}/libgbm${SOLIBS} ${libdir}/gbm_viv${S
>  FILES_libgbm-imx-dev_mx8       = "${libdir}/pkgconfig/gbm.pc
> ${includedir}/gbm.h ${libdir}/libgbm${SOLIBSDEV}"
>  RDEPENDS_libgbm-imx_append_mx8 = " libdrm"
>
> -FILES_libvulkan-imx = "${libdir}/vulkan/libvulkan_VSI${SOLIBS}
> ${libdir}/libSPIRV_viv${SOLIBS}"
> -FILES_libvulkan-imx-dev = "${includedir}/vulkan
> ${libdir}/vulkan/libvulkan_VSI${SOLIBSDEV}"
> -INSANE_SKIP_libvulkan-imx += "dev-deps dev-so"
> +FILES_libvulkan-imx = "${libdir}/libvulkan_VSI${SOLIBS}
> ${libdir}/libSPIRV_viv${SOLIBS}"
> +FILES_libvulkan-imx-dev = "${includedir}/vulkan"
> +PRIVATE_LIBS_libvulkan-imx = "libvulkan.so.1"
>
>  FILES_libopenvx-imx = "${libdir}/libOpenVX${SOLIBS}
> ${libdir}/libOpenVXC${SOLIBS} ${libdir}/libOpenVXU${SOLIBS}"
>  FILES_libopenvx-imx-dev = "${includedir}/VX
> ${libdir}/libopenVX${SOLIBSDEV}"
> --
> 2.7.4
>
> --
> _______________________________________________
> meta-freescale mailing list
> meta-freescale@yoctoproject.org
> https://lists.yoctoproject.org/listinfo/meta-freescale
>
Ming Liu Oct. 2, 2019, 10:05 a.m.
Hi, Max:

Thanks for the review, I think you are absolutely correct, please ignore my
patch.

//Ming Liu

Max Krummenacher <max.oss.09@gmail.com> 於 2019年10月2日 週三 上午9:51寫道:

> Hi Ming
>
> While this fixes the conflict I believe (or hope) that
> imx-gpu-viv/libvulkan_VSI provides the vulkan ICD (installable client
> driver) for the Vivante GPU while libvulkan from vulkan_loader provides the
> vulkan_loader.
>
> So we likely need both shared objects to use vulkan.
>
> I guess the proper fix is to change the soname to something different,
> preferably in the upstream binary, until then by patching the shared
> object. I sent a pull request on github.
>
> https://github.com/Freescale/meta-freescale/pull/178
>
> Max
>
> Am Di., 1. Okt. 2019 um 22:30 Uhr schrieb <liu.ming50@gmail.com>:
>
>> From: Ming Liu <liu.ming50@gmail.com>
>>
>> Installing the vulkan driver in ${D}${libdir}/vulkan subdirectory is
>> not a proper fix for the conflict with vulkan-loader. The root cause
>> of this conflict is that both our libvulkan and vulkan-loader's
>> libvulkan have a same soname libvulkan.so.1, we should set PRIVATE_LIBS
>> in this case to fix the conflict. Or else, the soname would still be
>> detected during package_do_shlibs, and hence will lead to other
>> dependency problems for the recipes that depending on vulkan-loader.
>>
>> For instance, this patch fixes a following error:
>> | ERROR: gstreamer1.0-plugins-bad-1.14.imx-r0 do_package_qa:
>> | QA Issue: /usr/lib/gstreamer-1.0/libgstvulkan.so contained in package
>> gstreamer1.0-plugins-bad-vulkan requires libvulkan.so.1()(64bit),
>> | but no providers found in RDEPENDS_gstreamer1.0-plugins-bad-vulkan?
>> [file-rdeps]
>> | ERROR: gstreamer1.0-plugins-bad-1.14.imx-r0 do_package_qa: QA run found
>> fatal errors. Please consider fixing them.
>>
>> Signed-off-by: Ming Liu <liu.ming50@gmail.com>
>> ---
>>  recipes-graphics/imx-gpu-viv/imx-gpu-viv-6.inc | 13 ++++---------
>>  1 file changed, 4 insertions(+), 9 deletions(-)
>>
>> diff --git a/recipes-graphics/imx-gpu-viv/imx-gpu-viv-6.inc
>> b/recipes-graphics/imx-gpu-viv/imx-gpu-viv-6.inc
>> index ef10c96..e75ada0 100644
>> --- a/recipes-graphics/imx-gpu-viv/imx-gpu-viv-6.inc
>> +++ b/recipes-graphics/imx-gpu-viv/imx-gpu-viv-6.inc
>> @@ -233,12 +233,7 @@ do_install () {
>>      ln -sf libGLESv2.so.2.0.0 ${D}${libdir}/libGLESv2.so
>>
>>      if [ "${IS_MX8}" = "1" ]; then
>> -        # Install the vulkan driver in a sub-folder. When installed in
>> the same
>> -        # folder as the vulkan loader layer library, an incorrect
>> linkage is
>> -        # created from libvulkan.so.1 to our library instead of the
>> loader
>> -        # layer library.
>> -        install -d ${D}${libdir}/vulkan
>> -        mv ${D}${libdir}/libvulkan-${backend}.so
>> ${D}${libdir}/vulkan/libvulkan_VSI.so
>> +        mv ${D}${libdir}/libvulkan-${backend}.so
>> ${D}${libdir}/libvulkan_VSI${SOLIBS}
>>      fi
>>      for header in ${GLES3_HEADER_REMOVALS}; do
>>          rm -f ${D}${includedir}/GLES3/${header}
>> @@ -307,9 +302,9 @@ FILES_libgbm-imx_mx8           =
>> "${libdir}/libgbm${SOLIBS} ${libdir}/gbm_viv${S
>>  FILES_libgbm-imx-dev_mx8       = "${libdir}/pkgconfig/gbm.pc
>> ${includedir}/gbm.h ${libdir}/libgbm${SOLIBSDEV}"
>>  RDEPENDS_libgbm-imx_append_mx8 = " libdrm"
>>
>> -FILES_libvulkan-imx = "${libdir}/vulkan/libvulkan_VSI${SOLIBS}
>> ${libdir}/libSPIRV_viv${SOLIBS}"
>> -FILES_libvulkan-imx-dev = "${includedir}/vulkan
>> ${libdir}/vulkan/libvulkan_VSI${SOLIBSDEV}"
>> -INSANE_SKIP_libvulkan-imx += "dev-deps dev-so"
>> +FILES_libvulkan-imx = "${libdir}/libvulkan_VSI${SOLIBS}
>> ${libdir}/libSPIRV_viv${SOLIBS}"
>> +FILES_libvulkan-imx-dev = "${includedir}/vulkan"
>> +PRIVATE_LIBS_libvulkan-imx = "libvulkan.so.1"
>>
>>  FILES_libopenvx-imx = "${libdir}/libOpenVX${SOLIBS}
>> ${libdir}/libOpenVXC${SOLIBS} ${libdir}/libOpenVXU${SOLIBS}"
>>  FILES_libopenvx-imx-dev = "${includedir}/VX
>> ${libdir}/libopenVX${SOLIBSDEV}"
>> --
>> 2.7.4
>>
>> --
>> _______________________________________________
>> meta-freescale mailing list
>> meta-freescale@yoctoproject.org
>> https://lists.yoctoproject.org/listinfo/meta-freescale
>>
>