diff --git a/conf/layer.conf b/conf/layer.conf index e78bc2c..c3334a9 100644 --- a/conf/layer.conf +++ b/conf/layer.conf @@ -24,4 +24,4 @@ LAYERSERIES_COMPAT_stm-st-stm32mp = "kirkstone" LAYERDEPENDS_stm-st-stm32mp = "core openembedded-layer meta-python" # OpenSTLinux compatibility version -ST_OSTL_COMPATIBILITY_VERSION_stm-st-stm32mp = "4.0" +ST_OSTL_COMPATIBILITY_VERSION_stm-st-stm32mp = "4.0 4.1" diff --git a/recipes-graphics/gcnano-userland/gcnano-userland-binary.inc b/recipes-graphics/gcnano-userland/gcnano-userland-binary.inc index 85518ba..a54da47 100644 --- a/recipes-graphics/gcnano-userland/gcnano-userland-binary.inc +++ b/recipes-graphics/gcnano-userland/gcnano-userland-binary.inc @@ -6,12 +6,12 @@ LIC_FILES_CHKSUM = "file://${GCNANO_TAR_FILENAME}/LICENSE;md5=dd36864f287701862a DEPENDS += " libdrm wayland " SRC_URI = "git://github.com/STMicroelectronics/gcnano-binaries;protocol=https;branch=gcnano-${GCNANO_VERSION}-binaries" -SRCREV = "a20611434ef048d3d0c04f55b6cd7d75a2156d43" +SRCREV = "787d3311e1bae40805fe2091be653eaadf059611" PV = "${GCNANO_VERSION}+${GCNANO_DATE}" -GCNANO_VERSION = "6.4.7" -GCNANO_DATE = "20220524" +GCNANO_VERSION = "6.4.9" +GCNANO_DATE = "20221020" S = "${WORKDIR}/git" B = "${S}/${GCNANO_TAR_FILENAME}" diff --git a/recipes-graphics/gcnano-userland/gcnano-userland.inc b/recipes-graphics/gcnano-userland/gcnano-userland.inc index 4c230cb..0315b56 100644 --- a/recipes-graphics/gcnano-userland/gcnano-userland.inc +++ b/recipes-graphics/gcnano-userland/gcnano-userland.inc @@ -40,7 +40,7 @@ GCNANO_USERLAND_OUTPUT_LIBDIR ??= "${libdir}" GCNANO_USERLAND_LDCONF ?= "gcnano.conf" # Configure the pkgconfig settings -PKGCONFIG_DV ??= "21.1.1" +PKGCONFIG_DV ??= "22.0.3" PKGCONFIG_PREFIX ??= "${exec_prefix}" do_compile:append() { @@ -68,8 +68,9 @@ gcnano_install_lib() { gcnano_pkgdir=$5 gcnano_pkgdir_install=$6 - # Install libraries + # Install libraries & headers install -m 0755 -d ${gcnano_libdir_install} + install -m 0755 -d ${gcnano_incdir_install} # Install libraries install -m 0555 ${gcnano_libdir}/libGAL.so ${gcnano_libdir_install}/ @@ -82,8 +83,7 @@ gcnano_install_lib() { case ${lib} in "egl") # Install libraries - find ${gcnano_libdir}/* -type f -name libEGL.so* -exec install -m 0555 '{}' ${gcnano_libdir_install}/ \; - find ${gcnano_libdir}/* -type l -name libEGL.so* -exec cp -d '{}' ${gcnano_libdir_install}/ \; + find ${gcnano_libdir}/* -type f -name libEGL.so.* -exec install -m 0555 '{}' ${gcnano_libdir_install}/ \; # Install includes install -m 0755 -d ${gcnano_incdir_install}/EGL install -m 0644 ${gcnano_incdir}/EGL/* ${gcnano_incdir_install}/EGL @@ -93,23 +93,18 @@ gcnano_install_lib() { ;; "gbm") # Install libraries - find ${gcnano_libdir}/* -type f -name libgbm.so* -exec install -m 0555 '{}' ${gcnano_libdir_install}/ \; - find ${gcnano_libdir}/* -type l -name libgbm.so* -exec cp -d '{}' ${gcnano_libdir_install}/ \; + find ${gcnano_libdir}/* -type f -name libgbm.so.* -exec install -m 0555 '{}' ${gcnano_libdir_install}/ \; install -m 0755 ${gcnano_libdir}/libgbm_viv.so ${gcnano_libdir_install}/ # Install includes install -m 0755 -d ${gcnano_incdir_install} - if [ -e "${gcnano_incdir}/gbm/gbm.h" ]; then - install -m 0644 ${gcnano_incdir}/gbm/gbm.h ${gcnano_incdir_install}/ - else - install -m 0644 ${gcnano_incdir}/gbm.h ${gcnano_incdir_install}/ - fi + install -m 0644 ${gcnano_incdir}/gbm.h ${gcnano_incdir_install}/ # Install pkgconfig install -m 0755 -d ${gcnano_pkgdir_install} install -m 644 ${gcnano_pkgdir}/gbm.pc ${gcnano_pkgdir_install}/ ;; "glesv1") # Install libraries - install -m 0555 ${gcnano_libdir}/libGLESv1_CM.so ${gcnano_libdir_install}/ + find ${gcnano_libdir}/* -type f -name libGLESv1_CM.so.* -exec install -m 0555 '{}' ${gcnano_libdir_install}/ \; # Install includes install -m 0755 -d ${gcnano_incdir_install}/GLES install -m 0644 ${gcnano_incdir}/GLES/* ${gcnano_incdir_install}/GLES @@ -120,19 +115,22 @@ gcnano_install_lib() { "glesv2") # Install libraries install -m 0555 ${gcnano_libdir}/libGLSLC.so ${gcnano_libdir_install}/ - find ${gcnano_libdir}/* -type f -name libGLESv2.so* -exec install -m 0555 '{}' ${gcnano_libdir_install}/ \; - find ${gcnano_libdir}/* -type l -name libGLESv2.so* -exec cp -d '{}' ${gcnano_libdir_install}/ \; + find ${gcnano_libdir}/* -type f -name libGLESv2.so.* -exec install -m 0555 '{}' ${gcnano_libdir_install}/ \; # Install includes install -m 0755 -d ${gcnano_incdir_install}/GLES2 install -m 0644 ${gcnano_incdir}/GLES2/* ${gcnano_incdir_install}/GLES2 + # Hack for weston & kmscube compilation + # Weston and kmscube use GLES3 header but the decision to use gles2 or gles3 + # are made a runtime + install -m 0755 -d ${gcnano_incdir_install}/GLES3 + install -m 0644 ${gcnano_incdir}/GLES3/* ${gcnano_incdir_install}/GLES3 # Install pkgconfig install -m 0755 -d ${gcnano_pkgdir_install} install -m 644 ${gcnano_pkgdir}/glesv2.pc ${gcnano_pkgdir_install}/ ;; "vg") # Install libraries - find ${gcnano_libdir}/* -type f -name libOpenVG*.so* -exec install -m 0555 '{}' ${gcnano_libdir_install}/ \; - find ${gcnano_libdir}/* -type l -name libOpenVG*.so* -exec cp -d '{}' ${gcnano_libdir_install}/ \; + find ${gcnano_libdir}/* -type f -name libOpenVG*.so.* -exec install -m 0555 '{}' ${gcnano_libdir_install}/ \; # Install includes install -m 0755 -d ${gcnano_incdir_install}/VG install -m 0644 ${gcnano_incdir}/VG/* ${gcnano_incdir_install}/VG @@ -144,6 +142,45 @@ gcnano_install_lib() { done } +# Install utility for gcano-userland: +# gcnano_install_symlinks +# +# Iterate other installed libraries and create appropriate symlinks if they +# don't exist as symlink or real library at that location. +# For well-formed library with ABI suffix, create a SONAME-suffixed symlink +# and dev-.so-only symlink. +# For .so-only installed library, only create dev-.so-only symlink. +gcnano_install_symlinks() { + # Init for lib dir install + gcnano_libdir=$1 + gcnano_lib_symlink_dir_install=$2 + + bbnote "Create symlinks to shared libs in ${gcnano_lib_symlink_dir_install} folder (mandatory for SDK)" + # Init relative path for symlinks + relative_path=$(realpath -m --relative-to=${gcnano_lib_symlink_dir_install} ${gcnano_libdir}) + # Move to gcnano_lib_symlink_dir_install for symlinks + cd "${gcnano_lib_symlink_dir_install}" + for sharelib in $(find ${gcnano_libdir}/ -type f -name "*.so*"); do + # Get full libname + sharelib_name=$(basename ${sharelib}) + # Get base libname + dev_lib_name=$(echo ${sharelib_name} | awk -F'.so' '{print $1}').so + # Get SONAME + soname_lib_name=$(objdump -x ${sharelib} 2>/dev/null | grep SONAME | awk -F' ' '{print $NF}') + # Create symlink + for link_name in ${soname_lib_name} ${dev_lib_name}; do + if [ -e "${link_name}" ]; then + bbnote "Already existing share lib: ${link_name}. No symlink created in ${gcnano_lib_symlink_dir_install}." + elif [ ! -e "${relative_path}/${sharelib_name}" ]; then + bbnote "Not able to find share lib: ${relative_path}/${sharelib_name}. No symlink created in ${gcnano_lib_symlink_dir_install}." + else + ln -sf ${relative_path}/${sharelib_name} ${link_name} + fi + done + done + cd "${PWD}" +} + do_install() { # Update pkgconfig files info for pkg_file in $(find ${B}/pkgconfig/* -type f -name *.pc); do @@ -155,27 +192,11 @@ do_install() { "${B}/${GCNANO_FLAVOUR}/include" "${D}${includedir}" \ "${B}/pkgconfig" "${D}${libdir}/pkgconfig" - # Manage creation of additional symlinks to solve missing libs issue on SDK side + # Manage creation of additional development symlinks to solve missing libs issue on SDK side # when GCNANO_USERLAND_OUTPUT_LIBDIR differs from libdir + gcnano_install_symlinks "${D}${GCNANO_USERLAND_OUTPUT_LIBDIR}" "${D}${libdir}" if [ "${GCNANO_USERLAND_OUTPUT_LIBDIR}" != "${libdir}" ]; then - bbnote "Create symlinks to shared libs in ${libdir} folder (mandatory for SDK)" - # Init relative path for symlinks - relative_path=$(realpath -m --relative-to=${D}/${libdir} ${D}${GCNANO_USERLAND_OUTPUT_LIBDIR}) - # Move to libdir for symlinks - cwd=${PWD} - cd "${D}${libdir}" - for sharelib in $(find ${D}${GCNANO_USERLAND_OUTPUT_LIBDIR}/* -type f -name "*.so*"); do - # Get SONAME - link_name=$(objdump -x ${sharelib} 2>/dev/null | grep SONAME | awk -F' ' '{print $NF}') - sharelib_name=$(basename ${sharelib}) - # Create symlink - if [ -e "${relative_path}/${sharelib_name}" ]; then - ln -sf ${relative_path}/${sharelib_name} ${link_name} - else - bbnote "Not able to find share lib: ${relative_path}/${sharelib_name}. No symlink created in ${libdir}." - fi - done - cd "${PWD}" + gcnano_install_symlinks "${D}${GCNANO_USERLAND_OUTPUT_LIBDIR}" "${D}${GCNANO_USERLAND_OUTPUT_LIBDIR}" fi if [ -s "${B}/${GCNANO_USERLAND_LDCONF}" ]; then @@ -184,78 +205,77 @@ do_install() { fi } -# Manage install for gcnano-userland libs into specific folder for sysroot as well -gcnano_sysroot() { - if [ "${GCNANO_USERLAND_OUTPUT_LIBDIR}" != "${libdir}" ]; then - # Cleanup targeted folder from unexpected symlinks - rm -f $(find ${SYSROOT_DESTDIR}${libdir}/* -type l -name "*.so*") - install -d ${SYSROOT_DESTDIR}${libdir} - cp -aR ${D}${GCNANO_USERLAND_OUTPUT_LIBDIR}/* ${SYSROOT_DESTDIR}${libdir}/ - fi -} -SYSROOT_PREPROCESS_FUNCS =+ "gcnano_sysroot" +SYSROOT_DIRS:append = " ${GCNANO_USERLAND_OUTPUT_LIBDIR}" # For the packages that make up the OpenGL interfaces, inject variables so that # they don't get Debian-renamed (which would remove the -gcnano suffix), and # RPROVIDEs/RCONFLICTs on the generic libgl name. python __anonymous() { pkgconfig = (d.getVar('GCNANO_PACKAGECONFIG') or "").split() - for p in (("gbm", "libgbm", "libgbm"), + for p in (("gbm", "libgbm",), ("egl", "libegl", "libegl1"), ("glesv1", "libgles1", "libglesv1-cm1"), ("glesv2", "libgles2", "libglesv2-2"), - ("vg", "libopenvg", "libopenvg")): + ("vg", "libopenvg")): if not p[0] in pkgconfig: continue - fullp = p[1] + "-gcnano" - pkgs = " ".join(p[1:]) - d.setVar("DEBIAN_NOAUTONAME_" + fullp, "1") - d.appendVar("RREPLACES:" + fullp, pkgs) - d.appendVar("RPROVIDES:" + fullp, pkgs) - d.appendVar("RCONFLICTS:" + fullp, pkgs) - if d.getVar("GCNANO_USERLAND_OUTPUT_LIBDIR") != d.getVar("libdir"): - d.appendVar("RDEPENDS:" + fullp, " gcnano-ldconf") + pkgs = d.getVar('PACKAGES').split() + + fullp = p[1] + "-gcnano" + if fullp in pkgs: + rpkgs = " ".join(p[1:]) + d.setVar("DEBIAN_NOAUTONAME_" + fullp, "1") + d.appendVar("RREPLACES:" + fullp, rpkgs) + d.appendVar("RPROVIDES:" + fullp, rpkgs) + d.appendVar("RCONFLICTS:" + fullp, rpkgs) + if d.getVar("GCNANO_USERLAND_OUTPUT_LIBDIR") != d.getVar("libdir"): + d.appendVar("RDEPENDS:" + fullp, " gcnano-ldconf") # For -dev, the first element is both the Debian and original name fullp += "-dev" - pkgs = p[1] + "-dev" - d.setVar("DEBIAN_NOAUTONAME_" + fullp, "1") - d.appendVar("RREPLACES:" + fullp, pkgs) - d.appendVar("RPROVIDES:" + fullp, pkgs) - d.appendVar("RCONFLICTS:" + fullp, pkgs) + if fullp not in pkgs: + rpkgs = p[1] + "-dev" + d.setVar("DEBIAN_NOAUTONAME_" + fullp, "1") + d.appendVar("RREPLACES:" + fullp, rpkgs) + d.appendVar("RPROVIDES:" + fullp, rpkgs) + d.appendVar("RCONFLICTS:" + fullp, rpkgs) } +# EGL, GLESv1, GLESv2 and VG run-time packages embed lib*.so to allow +# GPU stack to run properly +# NOTE: it's mandatory to libEGL.so, libGLESv2.so and libOpenVG.so availabale on filesystem +# because gcnano userland library try to make a dlopen on this library (with specific .so extension) FILES:${PN} = "" FILES:gcnano-ldconf = "${sysconfdir}/" FILES:libgal-gcnano = "${GCNANO_USERLAND_OUTPUT_LIBDIR}/libGAL.so" FILES:libgal-gcnano += "${GCNANO_USERLAND_OUTPUT_LIBDIR}/libVSC.so" -FILES:libegl-gcnano = "${GCNANO_USERLAND_OUTPUT_LIBDIR}/libEGL.so*" -FILES:libgbm-gcnano = "${GCNANO_USERLAND_OUTPUT_LIBDIR}/libgbm.so*" +FILES:libegl-gcnano = "${@oe.utils.ifelse(d.getVar('GCNANO_USERLAND_OUTPUT_LIBDIR') != d.getVar('libdir'), '${GCNANO_USERLAND_OUTPUT_LIBDIR}/libEGL.so*','${GCNANO_USERLAND_OUTPUT_LIBDIR}/libEGL.so.*')}" +FILES:libgbm-gcnano = "${@oe.utils.ifelse(d.getVar('GCNANO_USERLAND_OUTPUT_LIBDIR') != d.getVar('libdir'), '${GCNANO_USERLAND_OUTPUT_LIBDIR}/libgbm.so*','${GCNANO_USERLAND_OUTPUT_LIBDIR}/libgbm.so.*')}" FILES:libgbm-gcnano += "${GCNANO_USERLAND_OUTPUT_LIBDIR}/libgbm_viv.so" -FILES:libgles1-gcnano = "${GCNANO_USERLAND_OUTPUT_LIBDIR}/libGLESv1*.so" -FILES:libgles2-gcnano = "${GCNANO_USERLAND_OUTPUT_LIBDIR}/libGLESv2.so" +FILES:libgles1-gcnano = "${@oe.utils.ifelse(d.getVar('GCNANO_USERLAND_OUTPUT_LIBDIR') != d.getVar('libdir'), '${GCNANO_USERLAND_OUTPUT_LIBDIR}/libGLESv1_CM.so*','${GCNANO_USERLAND_OUTPUT_LIBDIR}/libGLESv1_CM.so.*')}" +FILES:libgles2-gcnano = "${@oe.utils.ifelse(d.getVar('GCNANO_USERLAND_OUTPUT_LIBDIR') != d.getVar('libdir'), '${GCNANO_USERLAND_OUTPUT_LIBDIR}/libGLESv2.so*','${GCNANO_USERLAND_OUTPUT_LIBDIR}/libGLESv2.so.*')}" FILES:libgles2-gcnano += "${GCNANO_USERLAND_OUTPUT_LIBDIR}/libGLSLC.so" -FILES:libopenvg-gcnano = "${GCNANO_USERLAND_OUTPUT_LIBDIR}/libOpenVG*.so*" +FILES:libopenvg-gcnano = "${@oe.utils.ifelse(d.getVar('GCNANO_USERLAND_OUTPUT_LIBDIR') != d.getVar('libdir'), '${GCNANO_USERLAND_OUTPUT_LIBDIR}/libOpenVG*.so*','${GCNANO_USERLAND_OUTPUT_LIBDIR}/libOpenVG*.so.*')}" FILES:${PN}-dev = "" FILES:libgal-gcnano-dev = "" FILES:libegl-gcnano-dev = "${includedir}/EGL ${includedir}/KHR ${libdir}/pkgconfig/egl.pc" FILES:libgbm-gcnano-dev = "${includedir}/gbm.h ${libdir}/pkgconfig/gbm.pc" FILES:libgles1-gcnano-dev = "${includedir}/GLES ${libdir}/pkgconfig/glesv1*.pc" -FILES:libgles2-gcnano-dev = "${includedir}/GLES2 ${libdir}/pkgconfig/glesv2.pc" +FILES:libgles2-gcnano-dev = "${includedir}/GLES2 ${includedir}/GLES3 ${libdir}/pkgconfig/glesv2.pc" FILES:libopenvg-gcnano-dev = "${includedir}/VG ${libdir}/pkgconfig/vg.pc" # Append additional symlinks to *-dev packages for delivered shared libs # when GCNANO_USERLAND_OUTPUT_LIBDIR differs from libdir -FILES:libgal-gcnano-dev += "${@bb.utils.contains('GCNANO_USERLAND_OUTPUT_LIBDIR', '${libdir}', '', '${libdir}/libGAL.so', d)}" -FILES:libgal-gcnano-dev += "${@bb.utils.contains('GCNANO_USERLAND_OUTPUT_LIBDIR', '${libdir}', '', '${libdir}/libVSC.so', d)}" -FILES:libegl-gcnano-dev += "${@bb.utils.contains('GCNANO_USERLAND_OUTPUT_LIBDIR', '${libdir}', '', '${libdir}/libEGL.so*', d)}" -FILES:libgbm-gcnano-dev += "${@bb.utils.contains('GCNANO_USERLAND_OUTPUT_LIBDIR', '${libdir}', '', '${libdir}/libgbm.so*', d)}" -FILES:libgbm-gcnano-dev += "${@bb.utils.contains('GCNANO_USERLAND_OUTPUT_LIBDIR', '${libdir}', '', '${libdir}/libgbm_viv.so', d)}" -FILES:libgles1-gcnano-dev += "${@bb.utils.contains('GCNANO_USERLAND_OUTPUT_LIBDIR', '${libdir}', '', '${libdir}/libGLESv1*.so', d)}" -FILES:libgles2-gcnano-dev += "${@bb.utils.contains('GCNANO_USERLAND_OUTPUT_LIBDIR', '${libdir}', '', '${libdir}/libGLESv2.so', d)}" -FILES:libgles2-gcnano-dev += "${@bb.utils.contains('GCNANO_USERLAND_OUTPUT_LIBDIR', '${libdir}', '', '${libdir}/libGLSLC.so', d)}" -FILES:libopenvg-gcnano-dev += "${@bb.utils.contains('GCNANO_USERLAND_OUTPUT_LIBDIR', '${libdir}', '', '${libdir}/libOpenVG*.so*', d)}" +FILES:libgal-gcnano-dev += "${libdir}/libGAL.so" +FILES:libgal-gcnano-dev += "${libdir}/libVSC.so" +FILES:libegl-gcnano-dev += "${@oe.utils.ifelse(d.getVar('GCNANO_USERLAND_OUTPUT_LIBDIR') != d.getVar('libdir'), '${libdir}/libEGL.so*','${libdir}/libEGL.so')}" +FILES:libgbm-gcnano-dev += "${@oe.utils.ifelse(d.getVar('GCNANO_USERLAND_OUTPUT_LIBDIR') != d.getVar('libdir'), '${libdir}/libgbm.so*','${libdir}/libgbm.so')}" +FILES:libgbm-gcnano-dev += "${libdir}/libgbm_viv.so" +FILES:libgles1-gcnano-dev += "${@oe.utils.ifelse(d.getVar('GCNANO_USERLAND_OUTPUT_LIBDIR') != d.getVar('libdir'), '${libdir}/libGLESv1*.so*','${libdir}/libGLESv1*.so')}" +FILES:libgles2-gcnano-dev += "${@oe.utils.ifelse(d.getVar('GCNANO_USERLAND_OUTPUT_LIBDIR') != d.getVar('libdir'), '${libdir}/libGLESv2.so*','${libdir}/libGLESv2.so')}" +FILES:libgles2-gcnano-dev += "${libdir}/libGLSLC.so" +FILES:libopenvg-gcnano-dev += "${@oe.utils.ifelse(d.getVar('GCNANO_USERLAND_OUTPUT_LIBDIR') != d.getVar('libdir'), '${libdir}/libOpenVG*.so*','${libdir}/libOpenVG*.so')}" # Set gcnano-userland package with runtime dependencies on all packages RDEPENDS:${PN} += "\ @@ -279,6 +299,8 @@ INSANE_SKIP:libgles2-gcnano += "ldflags" INSANE_SKIP:libopenvg-gcnano += "ldflags" # Avoid QA Issue: non -dev/-dbg/nativesdk- package contains symlink .so +INSANE_SKIP:libgles1-gcnano += "dev-so" +INSANE_SKIP:libgles2-gcnano += "dev-so" INSANE_SKIP:libegl-gcnano += "dev-so" INSANE_SKIP:libgbm-gcnano += "dev-so" INSANE_SKIP:libopenvg-gcnano += "dev-so"