diff options
Diffstat (limited to 'recipes-graphics/imx-gpu-viv/imx-gpu-viv-6.inc')
-rw-r--r-- | recipes-graphics/imx-gpu-viv/imx-gpu-viv-6.inc | 257 |
1 files changed, 174 insertions, 83 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 8d014259..e33df444 100644 --- a/recipes-graphics/imx-gpu-viv/imx-gpu-viv-6.inc +++ b/recipes-graphics/imx-gpu-viv/imx-gpu-viv-6.inc @@ -1,12 +1,12 @@ # Copyright (C) 2012-2016 Freescale Semiconductor # Copyright (C) 2012-2018 O.S. Systems Software LTDA. -# Copyright 2017-2021 NXP +# Copyright 2017-2024 NXP # Released under the MIT license (see COPYING.MIT for the terms) DESCRIPTION = "GPU driver and apps for i.MX" SECTION = "libs" LICENSE = "Proprietary" -LIC_FILES_CHKSUM = "file://COPYING;md5=be5ff43682ed6c57dfcbeb97651c2829" +LIC_FILES_CHKSUM = "file://COPYING;md5=ea25d099982d035af85d193c88a1b479" DEPENDS += " \ ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland', \ @@ -20,45 +20,58 @@ DEPENDS += " \ DEPENDS:append:imxdrm = " libdrm wayland" DEPENDS:append:mx8-nxp-bsp = " patchelf-native" -# imx-gpu-viv does not provide everything it needs to for virtual/libgl -# on x11 backend or on Wayland backend with XWayland support. -# We depend on mesa to fill in what is missing. -DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'mesa', '', d)}" +DEPENDS:append:libc-musl = " gcompat" -EXTRA_PROVIDES = "" +PROVIDES += " \ + imx-gpu-viv \ + libgal-imx \ + virtual/egl \ + virtual/libopenvg \ + ${EXTRA_PROVIDES} \ +" +EXTRA_PROVIDES = " \ + ${PROVIDES_OPENCL} \ + ${PROVIDES_OPENGLES3} \ + ${PROVIDES_OPENVX} \ +" EXTRA_PROVIDES:append:imxgpu3d = " \ - virtual/libgl \ virtual/libgles1 \ virtual/libgles2 \ " EXTRA_PROVIDES:append:mx8-nxp-bsp = " \ virtual/libgbm \ " -PROVIDES_OPENVX = "" -PROVIDES_OPENVX:mx8-nxp-bsp = "virtual/libopenvx" -PROVIDES_OPENVX:mx8mm-nxp-bsp = "" -PROVIDES += " \ - imx-gpu-viv \ - libgal-imx \ + +PROVIDES_OPENCL = " \ opencl-headers \ opencl-clhpp \ opencl-icd-loader \ - virtual/egl \ - virtual/libopenvg \ virtual/opencl-icd \ - ${PROVIDES_OPENVX} \ - ${EXTRA_PROVIDES} \ " +PROVIDES_OPENCL:mx7-nxp-bsp = "" +PROVIDES_OPENCL:mx8mm-nxp-bsp = "" + +PROVIDES_OPENGLES3 = "" +PROVIDES_OPENGLES3:mx8-nxp-bsp = "virtual/libgles3" + +# Note: OpenVX is fully supported on i.MX 8 QuadMax and 8 QuadPlus. +# However, only limited support is provided on other i.MX 8 machines +# as needed for i.MX machine learning packages. +PROVIDES_OPENVX = "" +PROVIDES_OPENVX:mx8-nxp-bsp = "virtual/libopenvx" +PROVIDES_OPENVX:mx8mm-nxp-bsp = "" RPROVIDES:${PN}:imxgpu3d += "imx-gpu-viv" PE = "1" -inherit fsl-eula-unpack features_check +inherit fsl-eula-unpack -REQUIRED_DISTRO_FEATURES:mx8-nxp-bsp = "wayland" +FILESEXTRAPATHS:append := "${THISDIR}/imx-gpu-viv:" +SRC_URI = "${FSL_MIRROR}/${BPN}-${PV}-${IMX_SRCREV_ABBREV}.bin;fsl-eula=true \ + file://imx_icd.json" -SRC_URI = "${FSL_MIRROR}/${BPN}-${PV}.bin;fsl-eula=true" +S = "${WORKDIR}/${BPN}-${PV}-${IMX_SRCREV_ABBREV}" PACKAGECONFIG ?= "" @@ -66,27 +79,41 @@ PACKAGECONFIG ?= "" PACKAGECONFIG[valgrind] = "" # Note : If you add a package here, to prevent a naming conflict see the python_anonymous() futher below -IMX_PACKAGES_GBM = "" -IMX_PACKAGES_GBM:mx8-nxp-bsp = "libgbm-imx libgbm-imx-dev" -PACKAGES =+ "libclc-imx libclc-imx-dev \ - libgl-imx libgl-imx-dev \ +PACKAGES =+ " \ libgles1-imx libgles1-imx-dev \ libgles2-imx libgles2-imx-dev \ libgles3-imx-dev \ libglslc-imx libglslc-imx-dev \ - libopencl-imx libopencl-imx-dev \ + ${PACKAGES_OPENCL} \ libopenvg-imx libopenvg-imx-dev \ libvdk-imx libvdk-imx-dev \ libegl-imx libegl-imx-dev \ libgal-imx libgal-imx-dev \ libvsc-imx \ - ${IMX_PACKAGES_GBM} \ + ${PACKAGES_GBM} \ imx-gpu-viv-tools \ imx-gpu-viv-demos \ - libvulkan-imx libvulkan-imx-dev \ - libopenvx-imx libopenvx-imx-dev \ + ${PACKAGES_VULKAN} \ + ${PACKAGES_OPENVX} \ libnn-imx \ + libspirv-imx \ " + +PACKAGES_GBM = "" +PACKAGES_GBM:mx8-nxp-bsp = "libgbm-imx libgbm-imx-dev" + +PACKAGES_OPENCL = "libclc-imx libopencl-imx libopencl-imx-dev" +PACKAGES_OPENCL:mx7-nxp-bsp = "" +PACKAGES_OPENCL:mx8mm-nxp-bsp = "" + +PACKAGES_OPENVX = \ + "${@bb.utils.contains("PROVIDES_OPENVX", "virtual/libopenvx", \ + "libopenvx-imx libopenvx-imx-dev", "", d)}" + +PACKAGES_VULKAN = "" +PACKAGES_VULKAN:imxvulkan = "libvulkan-imx libvulkan-imx-dev" +PACKAGES_VULKAN:mx8mm-nxp-bsp = "libvulkan-imx libvulkan-imx-dev" + python __anonymous () { has_vivante_kernel_driver_support = (d.getVar('MACHINE_HAS_VIVANTE_KERNEL_DRIVER_SUPPORT') or '0') if has_vivante_kernel_driver_support != '1': @@ -115,7 +142,7 @@ python __anonymous() { # For the packages that make up the OpenGL interfaces, inject variables so that # they don't get Debian-renamed (which would remove the -imx suffix). - for p in (("libegl", "libegl1"), ("libgl", "libgl1"), + for p in (("libegl", "libegl1"), ("libgles1", "libglesv1-cm1"), ("libgles2", "libglesv2-2"), ("libgles3",), ("libgbm",)): fullp = p[0] + "-imx" @@ -154,8 +181,7 @@ IMX_SOC:mx8mq-nxp-bsp = "mx8mq" IMX_SOC:mx8mn-nxp-bsp = "mx8mn" IMX_SOC:mx8ulp-nxp-bsp = "mx8ulp" -LIBVULKAN_VERSION_MAJOR = "1" -LIBVULKAN_VERSION = "${LIBVULKAN_VERSION_MAJOR}.2.1" +LIBVULKAN_API_VERSION = "1.3.239" do_install () { install -d ${D}${libdir} @@ -170,6 +196,7 @@ do_install () { # Use vulkan header from vulkan-headers recipe to support vkmark rm -rf ${D}${includedir}/vulkan/ + # Install SOC-specific drivers if [ -d ${S}/gpu-core/usr/lib/${IMX_SOC} ]; then cp -r ${S}/gpu-core/usr/lib/${IMX_SOC}/* ${D}${libdir} fi @@ -179,46 +206,84 @@ do_install () { install -m 0644 ${S}/gpu-core/usr/lib/pkgconfig/gbm.pc ${D}${libdir}/pkgconfig/gbm.pc fi + install -m 0644 ${S}/gpu-core/usr/lib/pkgconfig/glesv1_cm.pc ${D}${libdir}/pkgconfig/glesv1_cm.pc + install -m 0644 ${S}/gpu-core/usr/lib/pkgconfig/glesv2.pc ${D}${libdir}/pkgconfig/glesv2.pc + install -m 0644 ${S}/gpu-core/usr/lib/pkgconfig/vg.pc ${D}${libdir}/pkgconfig/vg.pc + + # Install backend-specific drivers if [ "${BACKEND}" = "wayland" ]; then + # Wayland backend + if ! ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'true', 'false', d)}; then + install -m 0644 ${S}/gpu-core/usr/lib/pkgconfig/gl.pc ${D}${libdir}/pkgconfig/gl.pc + fi install -m 0644 ${S}/gpu-core/usr/lib/pkgconfig/egl_wayland.pc ${D}${libdir}/pkgconfig/egl.pc - install -m 0644 ${S}/gpu-core/usr/lib/pkgconfig/glesv1_cm.pc ${D}${libdir}/pkgconfig/glesv1_cm.pc - install -m 0644 ${S}/gpu-core/usr/lib/pkgconfig/glesv2.pc ${D}${libdir}/pkgconfig/glesv2.pc - install -m 0644 ${S}/gpu-core/usr/lib/pkgconfig/vg.pc ${D}${libdir}/pkgconfig/vg.pc - else - install -m 0644 ${S}/gpu-core/usr/lib/pkgconfig/glesv1_cm.pc ${D}${libdir}/pkgconfig/glesv1_cm.pc - install -m 0644 ${S}/gpu-core/usr/lib/pkgconfig/glesv2.pc ${D}${libdir}/pkgconfig/glesv2.pc - install -m 0644 ${S}/gpu-core/usr/lib/pkgconfig/vg.pc ${D}${libdir}/pkgconfig/vg.pc + cp -r ${S}/gpu-core/usr/lib/wayland/* ${D}${libdir} + elif [ "${IS_MX8}" != "1" ]; then + # Framebuffer backend for i.MX 6 and 7 install -m 0644 ${S}/gpu-core/usr/lib/pkgconfig/egl_linuxfb.pc ${D}${libdir}/pkgconfig/egl.pc + cp -r ${S}/gpu-core/usr/lib/fb/* ${D}${libdir} + else + # Framebuffer backend for i.MX 8 and beyond + install -m 0644 ${S}/gpu-core/usr/lib/pkgconfig/egl.pc ${D}${libdir}/pkgconfig/egl.pc + cp -r ${S}/gpu-core/usr/lib/wayland/* ${D}${libdir} + set -f + for f in ${FILES:libvdk-imx} ${FILES:libvdk-imx-dev}; do + set +f + rm -rf ${D}/$f + done + rm -rf \ + ${D}/opt/viv_samples/es20 \ + ${D}/opt/viv_samples/tiger \ + ${D}/opt/viv_samples/vdk fi - - # Install Vendor ICDs for OpenCL's installable client driver loader (ICDs Loader) - install -d ${D}${sysconfdir}/OpenCL/vendors/ - install -m 0644 ${S}/gpu-core/etc/Vivante.icd ${D}${sysconfdir}/OpenCL/vendors/Vivante.icd - - # Handle backend specific drivers - cp -r ${S}/gpu-core/usr/lib/${BACKEND}/* ${D}${libdir} if [ "${BACKEND}" = "wayland" ] && [ "${IS_MX8}" != "1" ]; then # Special case for libVDK on Wayland backend, deliver fb library as well. cp ${S}/gpu-core/usr/lib/fb/libVDK.so.1.2.0 ${D}${libdir}/libVDK-fb.so.1.2.0 fi + + if [ -z "${PACKAGES_OPENCL}" ]; then + set -f + for f in ${FILES:libopencl-imx} ${FILES:libopencl-imx-dev} ${FILES:libclc-imx}; do + set +f + rm -rf ${D}$f + done + rm -rf ${D}/opt/viv_samples/cl11 + else + # Install Vendor ICDs for OpenCL's installable client driver loader (ICDs Loader) + install -d ${D}${sysconfdir}/OpenCL/vendors/ + install -m 0644 ${S}/gpu-core/etc/Vivante.icd ${D}${sysconfdir}/OpenCL/vendors/Vivante.icd + + if [ "${OPENCL_VX_INTRINSIC_EXTENSION_PACKAGES}" = "" ]; then + rm -f ${D}${includedir}/CL/cl_viv_vx_ext.h + fi + fi + + if [ -z "${PACKAGES_OPENVX}" ]; then + set -f + for f in ${FILES:libopenvx-imx} ${FILES:libopenvx-imx-dev}; do + set +f + rm -rf ${D}$f + done + fi + if [ "${IS_MX8}" = "1" ]; then - # Rename the vulkan implementation library which is wrapped by the vulkan-loader - # library of the same name - MAJOR=${LIBVULKAN_VERSION_MAJOR} - FULL=${LIBVULKAN_VERSION} - mv ${D}${libdir}/libvulkan.so.$FULL ${D}${libdir}/libvulkan_VSI.so.$FULL - patchelf --set-soname libvulkan_VSI.so.$MAJOR ${D}${libdir}/libvulkan_VSI.so.$FULL - rm ${D}${libdir}/libvulkan.so.$MAJOR ${D}${libdir}/libvulkan.so - ln -s libvulkan_VSI.so.$FULL ${D}${libdir}/libvulkan_VSI.so.$MAJOR - ln -s libvulkan_VSI.so.$FULL ${D}${libdir}/libvulkan_VSI.so + if [ -z "${PACKAGES_VULKAN}" ]; then + set -f + for f in ${FILES:libvulkan-imx} ${FILES:libvulkan-imx-dev}; do + set +f + rm -rf ${D}$f + done + else + install -Dm 0644 ${WORKDIR}/imx_icd.json ${D}${sysconfdir}/vulkan/icd.d/imx_icd.json + sed -i "s,%libdir%,${libdir}," ${D}${sysconfdir}/vulkan/icd.d/imx_icd.json + sed -i "s,%api_version%,${LIBVULKAN_API_VERSION}," ${D}${sysconfdir}/vulkan/icd.d/imx_icd.json + fi fi # FIXME: MX6SL does not have 3D support; hack it for now if [ "${IS_MX6SL}" = "1" ]; then rm -rf ${D}${libdir}/libCLC* ${D}${includedir}/CL \ \ - ${D}${libdir}/libGL* ${D}${includedir}/GL* ${D}${libdir}/pkgconfig/gl.pc \ - \ ${D}${libdir}/libGLES* ${D}${libdir}/pkgconfig/gles*.pc \ \ ${D}${libdir}/libOpenCL* ${D}${includedir}/CL \ @@ -239,18 +304,35 @@ do_install () { chown -R root:root "${D}" } +do_install:append:libc-musl() { + # libs + for f in `find ${D}${libdir} -name '*.so*' -type f` + do + patchelf --add-needed libgcompat.so.0 $f + done + # binaries + for f in `find ${D}/opt ${D}${bindir} -name '*' -type f -executable` + do + # prune scripts + if `patchelf --print-interpreter $f 2>&1 > /dev/null` + then + patchelf --set-interpreter ${root_prefix}`patchelf --print-interpreter $f` $f + patchelf --add-needed libgcompat.so.0 $f + fi + done +} + ALLOW_EMPTY:${PN} = "1" -FILES:libclc-imx = "${libdir}/libCLC${SOLIBS} ${includedir}/CL/cl_viv_vx_ext.h" -FILES:libclc-imx-dev = "${includedir}/CL ${libdir}/libCLC${SOLIBSDEV}" +FILES:libclc-imx = "${libdir}/libCLC${SOLIBS}" +FILES:libegl-imx = "${libdir}/libEGL${REALSOLIBS} ${libdir}/libEGL${SOLIBS} " +FILES:libegl-imx-dev = "${includedir}/EGL ${includedir}/KHR ${libdir}/pkgconfig/egl.pc" # libEGL.so is used by some demo apps from Freescale INSANE_SKIP:libegl-imx += "dev-so" -FILES:libegl-imx = "${libdir}/libEGL${REALSOLIBS} ${libdir}/libEGL${SOLIBSDEV} " -FILES:libegl-imx-dev = "${includedir}/EGL ${includedir}/KHR ${libdir}/pkgconfig/egl.pc" FILES:libgal-imx = "${libdir}/libGAL${SOLIBS} ${libdir}/libGAL_egl${SOLIBS}" -FILES:libgal-imx-dev = "${libdir}/libGAL${SOLIBSDEV} ${includedir}/HAL" +FILES:libgal-imx-dev = "${includedir}/HAL" RDEPENDS:libgal-imx += "${@bb.utils.contains('PACKAGECONFIG', 'valgrind', 'valgrind', '', d)}" RPROVIDES:libgal-imx += "libgal-imx" RRECOMMENDS:libgal-imx += "kernel-module-imx-gpu-viv" @@ -258,14 +340,20 @@ INSANE_SKIP:libgal-imx += "build-deps" FILES:libvsc-imx = "${libdir}/libVSC${SOLIBS}" -FILES:libgbm-imx:mx8-nxp-bsp = "${libdir}/libgbm*${REALSOLIBS} ${libdir}/libgbm${SOLIBSDEV} ${libdir}/libgbm_viv${SOLIBSDEV}" -FILES:libgbm-imx-dev:mx8-nxp-bsp = "${libdir}/pkgconfig/gbm.pc ${includedir}/gbm.h" -RDEPENDS:libgbm-imx:append:mx8-nxp-bsp = " libdrm" +FILES:libgbm-imx = "${libdir}/libgbm*${REALSOLIBS} ${libdir}/libgbm${SOLIBS} ${libdir}/libgbm_viv${SOLIBS}" +FILES:libgbm-imx-dev = "${libdir}/pkgconfig/gbm.pc ${includedir}/gbm.h" +RDEPENDS:libgbm-imx:append = " libdrm" INSANE_SKIP:libgbm-imx += "dev-so" -FILES:libvulkan-imx = "${libdir}/libvulkan_VSI${REALSOLIBS} ${libdir}/libSPIRV_viv${SOLIBS}" +FILES:libvulkan-imx = "\ + ${libdir}/libvulkan_VSI${REALSOLIBS} \ + ${sysconfdir}/vulkan" FILES:libvulkan-imx-dev = "${includedir}/vulkan ${libdir}/libvulkan_VSI${SOLIBSDEV}" +FILES:libspirv-imx = " \ + ${libdir}/libSPIRV_viv${SOLIBS} \ +" + FILES:libopenvx-imx = " \ ${libdir}/libOpenVX${REALSOLIBS} \ ${libdir}/libOpenVXC${SOLIBS} \ @@ -274,27 +362,24 @@ FILES:libopenvx-imx = " \ ${libdir}/libArchModelSw${SOLIBS} \ " FILES:libopenvx-imx-dev = "${includedir}/VX ${libdir}/libOpenVX${SOLIBSDEV}" -RDEPENDS:libopenvx-imx = "libnn-imx" - -# libGL is only targeting X11 backend, and in case if Wayland-only is used - -# package QA complains on missing RDEPENDS, which are only available for X11. -# Skip "file-rdeps" QA for this package. -FILES:libgl-imx = "${libdir}/libGL${REALSOLIBS}" -FILES:libgl-imx-dev = "${libdir}/libGL${SOLIBSDEV} ${includedir}/GL" -INSANE_SKIP:libgl-imx += "file-rdeps" +RDEPENDS:libopenvx-imx = "libnn-imx ${OPENCL_VX_INTRINSIC_EXTENSION_PACKAGES}" +OPENCL_VX_INTRINSIC_EXTENSION_PACKAGES = "" +OPENCL_VX_INTRINSIC_EXTENSION_PACKAGES:mx8qm-nxp-bsp = "libclc-imx libopencl-imx-dev" +OPENCL_VX_INTRINSIC_EXTENSION_PACKAGES:mx8mp-nxp-bsp = "libclc-imx libopencl-imx-dev" +INSANE_SKIP:libopenvx-imx += "dev-deps" -# libEGL needs to open libGLESv1.so -INSANE_SKIP:libgles1-imx += "dev-so" FILES:libgles1-imx = "${libdir}/libGLESv1*${REALSOLIBS} ${libdir}/libGLESv1*${SOLIBS} ${libdir}/libGLES_*${REALSOLIBS} ${libdir}/libGLES_*${SOLIBS}" -FILES:libgles1-imx-dev = "${includedir}/GLES ${libdir}/libGLESv1*${SOLIBS} ${libdir}/libGLES_*${SOLIBSDEV} ${libdir}/pkgconfig/glesv1_cm.pc" +FILES:libgles1-imx-dev = "${includedir}/GLES ${libdir}/pkgconfig/glesv1_cm.pc" RPROVIDES:libgles1-imx = "libgles-imx" RPROVIDES:libgles1-imx-dev = "libgles-imx-dev" +# libEGL does dlopen of libGLESv1.so +INSANE_SKIP:libgles1-imx += "dev-so" -# libEGL needs to open libGLESv2.so -INSANE_SKIP:libgles2-imx += "dev-so" FILES:libgles2-imx = "${libdir}/libGLESv2${REALSOLIBS} ${libdir}/libGLESv2${SOLIBS}" -FILES:libgles2-imx-dev = "${includedir}/GLES2 ${libdir}/libGLESv2${SOLIBSDEV} ${libdir}/pkgconfig/glesv2.pc" +FILES:libgles2-imx-dev = "${includedir}/GLES2 ${libdir}/pkgconfig/glesv2.pc" RDEPENDS:libgles2-imx = "libglslc-imx" +# libEGL does dlopen of libGLESv2.so +INSANE_SKIP:libgles2-imx += "dev-so" FILES:libgles3-imx-dev = "${includedir}/GLES3" # as long as there is no libgles3: ship libgles3-dev along with @@ -302,7 +387,6 @@ FILES:libgles3-imx-dev = "${includedir}/GLES3" RDEPENDS:libgles2-imx-dev += "libgles3-imx-dev" FILES:libglslc-imx = "${libdir}/libGLSLC${SOLIBS}" -FILES:libglslc-imx-dev = "${includedir}/CL ${libdir}/libGLSLC${SOLIBSDEV}" FILES:libopencl-imx = "${libdir}/libOpenCL${REALSOLIBS} \ ${libdir}/libVivanteOpenCL${SOLIBS} \ @@ -311,8 +395,10 @@ FILES:libopencl-imx = "${libdir}/libOpenCL${REALSOLIBS} \ FILES:libopencl-imx-dev = "${includedir}/CL ${libdir}/libOpenCL${SOLIBSDEV}" RDEPENDS:libopencl-imx= "libclc-imx" -FILES:libopenvg-imx = "${libdir}/libOpenVG*${REALSOLIBS}" -FILES:libopenvg-imx-dev = "${includedir}/VG ${libdir}/libOpenVG*${SOLIBSDEV} ${libdir}/pkgconfig/vg.pc" +FILES:libopenvg-imx = "${libdir}/libOpenVG*${REALSOLIBS} ${libdir}/libOpenVG*${SOLIBS}" +FILES:libopenvg-imx-dev = "${includedir}/VG ${libdir}/pkgconfig/vg.pc" +# libEGL does dlopen of libOpenVG.so +INSANE_SKIP:libopenvg-imx += "dev-so" FILES:libvdk-imx = "${libdir}/libVDK*${REALSOLIBS}" FILES:libvdk-imx-dev = "${includedir}/*vdk*.h ${libdir}/libVDK${SOLIBSDEV}" @@ -323,3 +409,8 @@ FILES:imx-gpu-viv-demos = "/opt" INSANE_SKIP:imx-gpu-viv-demos += "rpaths dev-deps" FILES:libnn-imx = "${libdir}/libNN*${SOLIBS}" + +# It will use gcompat at runtime therefore checking for these at compile time wont be useful as +# they dont match musl/gcompat but it should run fine +INSANE_SKIP:append:libc-musl = " file-rdeps" + |