This is my approach (which is not more than a horrible hack) DESCRIPTION = "Tegra replacements for mesa libraries" require recipes-bsp/tegra-binaries/tegra-glvnd.inc RDEPENDS_libgl-mesa = "tegra-lib-common libegl-mesa libxcb-glx libxxf86vm libxdamage libxcb-xfixes" RDEPENDS_libegl-mesa = "zlib libxcb-xfixes libxcb-present libdrm libxshmfence libxcb-sync libglapi expat libxcb-dri2 libgbm libxcb-dri3 libx11 libx11-xcb" RDEPENDS_libgles2-mesa = "libdrm libglapi" RDEPENDS_libgles1-mesa = "libdrm libglapi" RPROVIDES_libgl-mesa += "gl-proprietary libgl" RPROVIDES_libegl-mesa += "libegl" RPROVIDES_libgles2-mesa += "libgles2" RPROVIDES_libgles1-mesa += "libgles1" PV = "${L4T_RELEASE}" PE = "5" PACKAGES = "libgl-mesa libegl-mesa libgles2-mesa libgles1-mesa" L4T_GLVND_DIR = "${WORKDIR}/Linux_for_Tegra/libglvnd" L4T_GL_LIBRARIES = "${L4T_GLVND_DIR}/usr/lib/aarch64-linux-gnu/tegra" L4T_EGL_LIBRARIES = "${L4T_GLVND_DIR}/usr/lib/aarch64-linux-gnu/tegra-egl" do_unpack_append() { bb.build.exec_func("unpack_l4t_tar", d) } unpack_l4t_tar() { install -d ${L4T_GLVND_DIR} tar -C ${L4T_GLVND_DIR} -x -f \ ${WORKDIR}/Linux_for_Tegra/nv_tegra/nvidia_drivers.tbz2 \ usr/lib/aarch64-linux-gnu/tegra \ usr/lib/aarch64-linux-gnu/tegra-egl } do_compile[noexec] = "1" PACKAGEFUNCS_append = " rm_pkgdata_runtime" rm_pkgdata_runtime() { rm -rf ${WORKDIR}/pkgdata/runtime/* rm -rf ${WORKDIR}/pkgdata/shlibs2/* } do_install() { install -d ${D}${libdir} # Install NVIDIA mesa libraries (libglvnd) install -m755 ${L4T_GL_LIBRARIES}/libGL.so.1 ${D}${libdir}/libGL.so.1.2.0 install -m755 ${L4T_EGL_LIBRARIES}/libEGL.so.1 ${D}${libdir}/libEGL.so.1.0.0 install -m755 ${L4T_EGL_LIBRARIES}/libGLESv1_CM.so.1 ${D}${libdir}/libGLESv1_CM.so.1.1.0 install -m755 ${L4T_EGL_LIBRARIES}/libGLESv2.so.2 ${D}${libdir}/libGLESv2.so.2.0.0 ln -sf libGL.so.1.2.0 ${D}${libdir}/libGL.so.1 ln -sf libEGL.so.1.0.0 ${D}${libdir}/libEGL.so.1 ln -sf libGLESv1_CM.so.1.1.0 ${D}${libdir}/libGLESv1_CM.so.1 ln -sf libGLESv1_CM.so.1.1.0 ${D}${libdir}/libGLESv1_CM.so ln -sf libGLESv2.so.2.0.0 ${D}${libdir}/libGLESv2.so.2 # Install extra NVIDIA libglvnd libraries install -m755 ${L4T_GL_LIBRARIES}/libGLX.so.0 ${D}${libdir}/ install -m755 ${L4T_GL_LIBRARIES}/libGLdispatch.so.0 ${D}${libdir}/ ln -sf libGLX.so.0 ${D}${libdir}/libGLX.so ln -sf libGLdispatch.so.0 ${D}${libdir}/libGLdispatch.so # Install extra EGL NVIDIA libraries install -m755 ${L4T_EGL_LIBRARIES}/libGLESv1_CM_nvidia.so.1 ${D}${libdir}/ install -m755 ${L4T_EGL_LIBRARIES}/libGLESv1_CM.so.1 ${D}${libdir}/ install -m755 ${L4T_EGL_LIBRARIES}/libGLESv2_nvidia.so.2 ${D}${libdir}/ # Install extra GL NVIDIA libraries install -m755 ${L4T_GL_LIBRARIES}/libGLX_nvidia.so.0 ${D}${libdir}/ # Install libraries dependent on libglvnd libs install -m755 ${L4T_EGL_LIBRARIES}/libEGL_nvidia.so.0 ${D}${libdir}/ install -m755 ${L4T_GL_LIBRARIES}/libnvidia-glsi.so.28.2.1 ${D}${libdir}/ install -m755 ${L4T_GL_LIBRARIES}/libnvbuf_utils.so.1.0.0 ${D}${libdir}/ ln -sf libnvbuf_utils.so.1.0.0 ${D}${libdir}/libnvbuf_utils.so.1 ln -sf libnvbuf_utils.so.1.0.0 ${D}${libdir}/libnvbuf_utils.so install -m755 ${L4T_GL_LIBRARIES}/libnvddk_vic.so ${D}${libdir}/ install -m755 ${L4T_GL_LIBRARIES}/libnvddk_2d_v2.so ${D}${libdir}/ # nvcamera_daemon and argus_daemon have hard-coded path for this install -d ${D}${nonarch_libdir}/aarch64-linux-gnu/tegra-egl ln -sf ${libdir}/libEGL.so.1.0.0 ${D}${nonarch_libdir}/aarch64-linux-gnu/tegra-egl/libEGL.so } PACKAGE_ARCH = "${MACHINE_ARCH}" FILES_libgles1-mesa += "\ ${libdir}/libGLESv1* \ " FILES_libgles2-mesa += "\ ${libdir}/libGLESv2* \ " FILES_libegl-mesa += "\ ${libdir}/libEGL* \ ${nonarch_libdir}/aarch64-linux-gnu/tegra-egl/libEGL.so \ " FILES_libgl-mesa += "\ ${libdir}/libGL.* \ ${libdir}/libGLX* \ ${libdir}/libGLdispatch.so* \ ${libdir}/libnvidia-glsi.so.28.2.1 \ ${libdir}/libnvbuf_utils.so* \ ${libdir}/libnvddk_vic.so \ ${libdir}/libnvddk_2d_v2.so \ " INSANE_SKIP_${PN} = "already-stripped" INSANE_SKIP_libegl-mesa = "ldflags dev-so" INSANE_SKIP_libgles1-mesa = "ldflags dev-so" INSANE_SKIP_libgles2-mesa = "ldflags" INSANE_SKIP_libgl-mesa = "ldflags dev-so textrel" PRIVATE_LIBS = "libGL.so.1 libEGL.so.1 libGLESv2.so.2 libGLESv1_CM.so.1" read_subpackage_metadata () { }
This is as Richard suggested: DESCRIPTION = "Tegra replacements for mesa libraries" require recipes-bsp/tegra-binaries/tegra-glvnd.inc RDEPENDS_libgl-tegra = "tegra-lib-common libegl-tegra libxcb-glx libxxf86vm libxdamage libxcb-xfixes" RDEPENDS_libegl-tegra = "zlib libxcb-xfixes libxcb-present libdrm libxshmfence libxcb-sync libglapi expat libxcb-dri2 libgbm libxcb-dri3 libx11 libx11-xcb" RDEPENDS_libgles2-tegra = "libdrm libglapi" RDEPENDS_libgles1-tegra = "libdrm libglapi" PV = "${L4T_RELEASE}" PE = "5" PACKAGES = "libgl-tegra libegl-tegra libgles2-tegra libgles1-tegra" L4T_GLVND_DIR = "${WORKDIR}/Linux_for_Tegra/libglvnd" L4T_GL_LIBRARIES = "${L4T_GLVND_DIR}/usr/lib/aarch64-linux-gnu/tegra" L4T_EGL_LIBRARIES = "${L4T_GLVND_DIR}/usr/lib/aarch64-linux-gnu/tegra-egl" do_unpack_append() { bb.build.exec_func("unpack_l4t_tar", d) } unpack_l4t_tar() { install -d ${L4T_GLVND_DIR} tar -C ${L4T_GLVND_DIR} -x -f \ ${WORKDIR}/Linux_for_Tegra/nv_tegra/nvidia_drivers.tbz2 \ usr/lib/aarch64-linux-gnu/tegra \ usr/lib/aarch64-linux-gnu/tegra-egl } do_compile[noexec] = "1" do_install() { install -d ${D}${libdir} # Install NVIDIA mesa libraries (libglvnd) install -m755 ${L4T_GL_LIBRARIES}/libGL.so.1 ${D}${libdir}/libGL.so.1.2.0 install -m755 ${L4T_EGL_LIBRARIES}/libEGL.so.1 ${D}${libdir}/libEGL.so.1.0.0 install -m755 ${L4T_EGL_LIBRARIES}/libGLESv1_CM.so.1 ${D}${libdir}/libGLESv1_CM.so.1.1.0 install -m755 ${L4T_EGL_LIBRARIES}/libGLESv2.so.2 ${D}${libdir}/libGLESv2.so.2.0.0 ln -sf libGL.so.1.2.0 ${D}${libdir}/libGL.so.1 ln -sf libEGL.so.1.0.0 ${D}${libdir}/libEGL.so.1 ln -sf libGLESv1_CM.so.1.1.0 ${D}${libdir}/libGLESv1_CM.so.1 ln -sf libGLESv1_CM.so.1.1.0 ${D}${libdir}/libGLESv1_CM.so ln -sf libGLESv2.so.2.0.0 ${D}${libdir}/libGLESv2.so.2 # Install extra NVIDIA libglvnd libraries install -m755 ${L4T_GL_LIBRARIES}/libGLX.so.0 ${D}${libdir}/ install -m755 ${L4T_GL_LIBRARIES}/libGLdispatch.so.0 ${D}${libdir}/ ln -sf libGLX.so.0 ${D}${libdir}/libGLX.so ln -sf libGLdispatch.so.0 ${D}${libdir}/libGLdispatch.so # Install extra EGL NVIDIA libraries install -m755 ${L4T_EGL_LIBRARIES}/libGLESv1_CM_nvidia.so.1 ${D}${libdir}/ install -m755 ${L4T_EGL_LIBRARIES}/libGLESv1_CM.so.1 ${D}${libdir}/ install -m755 ${L4T_EGL_LIBRARIES}/libGLESv2_nvidia.so.2 ${D}${libdir}/ # Install extra GL NVIDIA libraries install -m755 ${L4T_GL_LIBRARIES}/libGLX_nvidia.so.0 ${D}${libdir}/ # Install libraries dependent on libglvnd libs install -m755 ${L4T_EGL_LIBRARIES}/libEGL_nvidia.so.0 ${D}${libdir}/ install -m755 ${L4T_GL_LIBRARIES}/libnvidia-glsi.so.28.2.1 ${D}${libdir}/ install -m755 ${L4T_GL_LIBRARIES}/libnvbuf_utils.so.1.0.0 ${D}${libdir}/ ln -sf libnvbuf_utils.so.1.0.0 ${D}${libdir}/libnvbuf_utils.so.1 ln -sf libnvbuf_utils.so.1.0.0 ${D}${libdir}/libnvbuf_utils.so install -m755 ${L4T_GL_LIBRARIES}/libnvddk_vic.so ${D}${libdir}/ install -m755 ${L4T_GL_LIBRARIES}/libnvddk_2d_v2.so ${D}${libdir}/ # nvcamera_daemon and argus_daemon have hard-coded path for this install -d ${D}${nonarch_libdir}/aarch64-linux-gnu/tegra-egl ln -sf ${libdir}/libEGL.so.1.0.0 ${D}${nonarch_libdir}/aarch64-linux-gnu/tegra-egl/libEGL.so } PACKAGE_ARCH = "${MACHINE_ARCH}" FILES_libgles1-tegra += "\ ${libdir}/libGLESv1* \ " FILES_libgles2-tegra += "\ ${libdir}/libGLESv2* \ " FILES_libegl-tegra += "\ ${libdir}/libEGL* \ ${nonarch_libdir}/aarch64-linux-gnu/tegra-egl/libEGL.so \ " FILES_libgl-tegra += "\ ${libdir}/libGL.* \ ${libdir}/libGLX* \ ${libdir}/libGLdispatch.so* \ ${libdir}/libnvidia-glsi.so.28.2.1 \ ${libdir}/libnvbuf_utils.so* \ ${libdir}/libnvddk_vic.so \ ${libdir}/libnvddk_2d_v2.so \ " INSANE_SKIP_${PN} = "already-stripped" INSANE_SKIP_libegl-tegra = "ldflags dev-so" INSANE_SKIP_libgles1-tegra = "ldflags dev-so" INSANE_SKIP_libgles2-tegra = "ldflags" INSANE_SKIP_libgl-tegra = "ldflags dev-so textrel" RREPLACES_libgl-tegra = "libgl-mesa" RREPLACES_libegl-tegra = "libegl-mesa" RREPLACES_libgles1-tegra = "libgles1-mesa" RREPLACES_libgles2-tegra = "libgles2-mesa" RCONFLICTS_libgl-tegra = "libgl-mesa" RCONFLICTS_libegl-tegra = "libegl-mesa" RCONFLICTS_libgles1-tegra = "libgles1-mesa" RCONFLICTS_libgles2-tegra = "libgles2-mesa" RPROVIDES_libgl-tegra += "gl-proprietary libgl libgl-mesa" RPROVIDES_libegl-tegra += "libegl libegl-mesa" RPROVIDES_libgles2-tegra += "libgles2 libgles2-tegra" RPROVIDES_libgles1-tegra += "libgles1 libgles1-tegra" PRIVATE_LIBS = "libGL.so.1 libEGL.so.1 libGLESv2.so.2 libGLESv1_CM.so.1" On Tue, Mar 5, 2019 at 12:06 PM Burton, Ross <ross.bur...@intel.com> wrote: > > That is horrible and they should be ashamed. Can you share the > complete recipe, as this *should* be a fairly trivial switcharoony. > > Ross > > On Tue, 5 Mar 2019 at 11:00, Ricardo Ribalda Delgado > <ricardo.riba...@gmail.com> wrote: > > > > HI Ross > > On Tue, Mar 5, 2019 at 11:58 AM Burton, Ross <ross.bur...@intel.com> wrote: > > > > > > Does they literally just provide a libgl.so and no headers, etc? > > > > It provides: > > > > /usr/lib/libGL.so.1.2.0 > > /usr/lib/libGL.so.1 > > > > > > > > > > Ross > > > > > > On Fri, 1 Mar 2019 at 11:29, Ricardo Ribalda Delgado > > > <ricardo.riba...@gmail.com> wrote: > > > > > > > > Hello > > > > > > > > I have a build system that supports some aarch64 machines. For most of > > > > the them, the only difference is the kernel configuration, kernel > > > > version. > > > > > > > > I am using multiconfig on my build server and the build goes really > > > > fast thanks to all the shared binaries/artifacts. > > > > > > > > But I have a problem adding a new machine. This machine is also > > > > aarch64, with a special kernel (nothing new here), but in this case > > > > the vendor provides a binary .so for libgl that is required to get > > > > hardware acceleation. > > > > > > > > I could .bbappend mesa and on the installation part replace libgl with > > > > the new .so. But then everything that depends on mesa needs to be > > > > rebuilt for that machine and I could not use multiconfig. > > > > > > > > Instead I have created a new recipe: mesa-gl-replace.bb that has the > > > > file. This breakes completely the design of OE, but works. > > > > > > > > Some snipsets of the "magic" to make it work: > > > > > > > > #Force that the version is allways higher than the one from mesa: > > > > PE = "5" > > > > > > > > #Rprovide the same as mesa > > > > RPROVIDES_libgl-mesa += "libgl" > > > > > > > > #Do not overwrite pkgdata of mesa > > > > PACKAGEFUNCS_append = " rm_pkgdata_runtime" > > > > rm_pkgdata_runtime() { > > > > rm -rf ${WORKDIR}/pkgdata/runtime/* > > > > rm -rf ${WORKDIR}/pkgdata/shlibs2/* > > > > } > > > > > > > > #Keep this on machine > > > > PACKAGE_ARCH = "${MACHINE_ARCH}" > > > > > > > > #Make sure we are not saved as providers for libgl > > > > PRIVATE_LIBS = "libGL.so.1" > > > > > > > > #Avoid sanity checks > > > > read_subpackage_metadata () { > > > > } > > > > > > > > > > > > If your eyes have not fallen as this point, this means you have a lot > > > > of tolerance for crappy code, congrats :) > > > > > > > > Now the question. Is there a better way to do this? > > > > > > > > PS: I already tried and failed with update_alternatives > > > > > > > > > > > > Best regards! > > > > > > > > > > > > -- > > > > Ricardo Ribalda > > > > -- > > > > _______________________________________________ > > > > Openembedded-core mailing list > > > > Openembedded-core@lists.openembedded.org > > > > http://lists.openembedded.org/mailman/listinfo/openembedded-core > > > > > > > > -- > > Ricardo Ribalda -- Ricardo Ribalda -- _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core