On Mon, Sep 16, 2019 at 11:52:42AM -0400, Andrew F. Davis wrote:
> On 9/16/19 11:43 AM, Denys Dmytriyenko wrote:
> > Andrew,
> > 
> > Thanks for pushing this forward! I'll give it some thought and more 
> > thorough 
> > review, but the first comment I had so far is that bbappend won't work for 
> > this purpose, as it would modify Mesa recipe unconditionally and BSP layers 
> > are not allowed to do that.
> 
> It wouldn't have to be unconditional would it, how do others change a
> packages URL to a forked version?

It's harder to make bbappends unconditional. The Yocto Project Compatible 
requirement states that a mere inclusion of a layer should not alter core 
recipes in unconditional way. Any such changes should be explicitly enabled by 
either a separate variable, or only applicable to those platforms defined by 
the layer. This requirement was originally for BSP layers (which meta-ti is) 
and later extended to other layers, including Distros. That's why a lot of 
forking and customizations was done in meta-arago, and not in meta-ti. As an 
example, here's a proper bbappend in meta-ti, that only makes alterations for 
our platforms - note that every variable uses ti-soc override, which was added 
to easily address all TI platforms:
http://git.yoctoproject.org/cgit/cgit.cgi/meta-ti/tree/recipes-core/udev/eudev_%25.bbappend

This means that adding meta-ti layer into your setup, but building for non-TI 
platform, won't change SRC_URI and PR variables, as well, as do_install() task 
for core eudev recipe.

Actually, instead of using a bbappend, having a modified mesa-pvr recipe that 
PROVIDES="mesa" is a better alternative, as setting PREFERRED_PROVIDER easily 
satisfies the above requirement.


> > Also, can the dependency between Mesa and DDK be 
> > the other way around?
> > 
> 
> I'm not sure what you mean here, DDK depend on Mesa? If so I'm not sure
> how that would work, Mesa provides the front-end libs, it has a link
> time dependency on the backend driver (pvr_dri_support.so).
> 
> Well thinking a bit more I probably could make them build independently,
> as Mesa dlopens the backend and relies on it exporting an interface that
> Mesa defines, so really there is no built-time inter-dependency at all..
> but what would that do for us?

Are there any other precedents for Mesa to have a separate backend driver that 
gets built on its own? Making generic Mesa (if we ever want to upstream this 
support) build-depend on platform-specific component would be questionable.

-- 
Denys


> Andrew
> 
> > Denys
> > 
> > 
> > On Sat, Sep 14, 2019 at 09:51:51AM -0400, Andrew F. Davis wrote:
> >> Signed-off-by: Andrew F. Davis <a...@ti.com>
> >> ---
> >>
> >> Hello all,
> >>
> >> This is a preview change of our GPU driver stack. Mesa can now used to
> >> provide the GL frontend libraries (EGL/GBM) for our SGX based systems.
> >> This greatly expands our supported extensions and improves compatibility
> >> with software designed to work with Mesa and Mesa provided tooling. The
> >> existing backend is now confined to just a DRI backend used to provide
> >> the GLES1/2 functions. The extensions/compatibility on this part of the
> >> stack will not change.
> >>
> >> The Mesa-side-glue to interface with the SGX DRI blobs is currently
> >> internal only until we can find the right way to distribute the patches
> >> (recipe patches in meta-ti or as a fork of Mesa hosted on git.ti.com).
> >> Currently they are on my internal only bitbucket, so those outside TI
> >> will not be able to test just yet :( but can review this recipe patch
> >> just the same.
> >>
> >> What you need to do right now for this to have an effect is to change
> >> your preferred provider of GL libs over in your distro layer to the
> >> new mesa-pvr.
> >>
> >> -PREFERRED_PROVIDER_virtual/egl = "ti-sgx-ddk-um"
> >> -PREFERRED_PROVIDER_virtual/libgles1 = "ti-sgx-ddk-um"
> >> -PREFERRED_PROVIDER_virtual/libgles2 = "ti-sgx-ddk-um"
> >> -PREFERRED_PROVIDER_virtual/libgbm = "ti-sgx-ddk-um"
> >> +PREFERRED_PROVIDER_virtual/egl = "mesa-pvr"
> >> +PREFERRED_PROVIDER_virtual/libgles1 = "mesa-pvr"
> >> +PREFERRED_PROVIDER_virtual/libgles2 = "mesa-pvr"
> >> +PREFERRED_PROVIDER_virtual/libgbm = "mesa-pvr"
> >>
> >> At some point I'd like this to just be "mesa" but with some bbappends to
> >> change the repo and some per platform PACKAGECONFIG magic set so it
> >> builds the same as this recipe.
> >>
> >> All comments, opinions, and concerns welcome :)
> >>
> >> Andrew
> >>
> >>  recipes-graphics/libgles/mesa-pvr_git.bb      | 46 +++++++++++++++++++
> >>  .../libgles/ti-sgx-ddk-um_1.17.4948957.bb     | 28 ++---------
> >>  2 files changed, 49 insertions(+), 25 deletions(-)
> >>  create mode 100644 recipes-graphics/libgles/mesa-pvr_git.bb
> >>
> >> diff --git a/recipes-graphics/libgles/mesa-pvr_git.bb 
> >> b/recipes-graphics/libgles/mesa-pvr_git.bb
> >> new file mode 100644
> >> index 00000000..f66197c5
> >> --- /dev/null
> >> +++ b/recipes-graphics/libgles/mesa-pvr_git.bb
> >> @@ -0,0 +1,46 @@
> >> +SUMMARY = "Mesa with IMG PVR DRI driver"
> >> +
> >> +HOMEPAGE = "http://mesa3d.org";
> >> +LICENSE = "MIT"
> >> +LIC_FILES_CHKSUM = 
> >> "file://docs/license.html;md5=725f991a1cc322aa7a0cd3a2016621c4"
> >> +
> >> +PV = "0.0+${PR}+gitr${SRCREV}"
> >> +
> >> +SRC_URI = 
> >> "git://g...@bitbucket.itg.ti.com/~a0226330/mesa.git;protocol=ssh;branch=${BRANCH}"
> >> +BRANCH = "mesa-19.1.6-pvr-buildup"
> >> +SRCREV = "ea27ae6fdaf9d813dc484113661afa6276cdd5da"
> >> +
> >> +S = "${WORKDIR}/git"
> >> +
> >> +DEPENDS = "expat makedepend-native flex-native bison-native 
> >> libxml2-native zlib chrpath-replacement-native python3-mako-native 
> >> gettext-native wayland-native wayland libdrm wayland-protocols xorgproto 
> >> libdrm ti-sgx-ddk-um"
> >> +RDEPENDS_${PN} = "ti-sgx-ddk-um"
> >> +EXTRANATIVEPATH += "chrpath-native"
> >> +PROVIDES = "virtual/libgles1 virtual/libgles2 virtual/egl virtual/libgbm"
> >> +
> >> +inherit meson pkgconfig python3native gettext distro_features_check
> >> +
> >> +BBCLASSEXTEND = "native nativesdk"
> >> +
> >> +ANY_OF_DISTRO_FEATURES_class-target = "opengl vulkan"
> >> +
> >> +EXTRA_OEMESON = " \
> >> +    -Dshared-glapi=true \
> >> +    -Dgallium-opencl=disabled \
> >> +    -Dglx-read-only-text=true \
> >> +    -Dplatforms=wayland,drm \
> >> +    -Dglx=disabled \
> >> +    -Ddri-drivers=pvr \
> >> +    -Ddri3=false \
> >> +    -Dgles1=true \
> >> +    -Dgles2=true \
> >> +    -Degl=true \
> >> +    -Dgallium-drivers='' \
> >> +    -Dvulkan-drivers='' \
> >> +    -Dllvm=false \
> >> +    -Dlibunwind=false \
> >> +"
> >> +
> >> +# mesa tries to run cross-built gen_matypes on build machine to get 
> >> struct size information
> >> +EXTRA_OEMESON_append = " -Dasm=false"
> >> +
> >> +FILES_${PN} += " ${libdir}/dri/*"
> >> diff --git a/recipes-graphics/libgles/ti-sgx-ddk-um_1.17.4948957.bb 
> >> b/recipes-graphics/libgles/ti-sgx-ddk-um_1.17.4948957.bb
> >> index 7a6f013e..f063e455 100644
> >> --- a/recipes-graphics/libgles/ti-sgx-ddk-um_1.17.4948957.bb
> >> +++ b/recipes-graphics/libgles/ti-sgx-ddk-um_1.17.4948957.bb
> >> @@ -6,12 +6,12 @@ LIC_FILES_CHKSUM = 
> >> "file://TI-Linux-Graphics-DDK-UM-Manifest.doc;md5=b17390502bc
> >>  PACKAGE_ARCH = "${MACHINE_ARCH}"
> >>  COMPATIBLE_MACHINE = "ti33x|ti43x|omap-a15|k3"
> >>  
> >> -PR = "r34"
> >> +PR = "r35"
> >>  
> >> -BRANCH = "ti-img-sgx/thud/${PV}"
> >> +BRANCH = "ti-img-sgx/thud/${PV}-mesa-experimental"
> >>  
> >>  SRC_URI = 
> >> "git://git.ti.com/graphics/omap5-sgx-ddk-um-linux.git;protocol=git;branch=${BRANCH}"
> >> -SRCREV = "87d7e5c1e4db1bab048939c9719059d549c1e8dd"
> >> +SRCREV = "a6c033f992d124cfc4ee1488b2565c20116f653c"
> >>  
> >>  TARGET_PRODUCT_omap-a15 = "jacinto6evm"
> >>  TARGET_PRODUCT_ti33x = "ti335x"
> >> @@ -23,23 +23,9 @@ INITSCRIPT_PARAMS = "defaults 8"
> >>  
> >>  inherit update-rc.d
> >>  
> >> -PROVIDES += "virtual/egl virtual/libgles1 virtual/libgles2 virtual/libgbm"
> >> -
> >>  DEPENDS += "libdrm udev wayland wayland-protocols libffi expat"
> >>  RDEPENDS_${PN} += "libdrm libdrm-omap udev wayland wayland-protocols 
> >> libffi expat"
> >>  
> >> -RPROVIDES_${PN} = "libegl libgles1 libgles2 libgbm"
> >> -RPROVIDES_${PN}-dev = "libegl-dev libgles1-dev libgles2-dev libgbm-dev"
> >> -RPROVIDES_${PN}-dbg = "libegl-dbg libgles1-dbg libgles2-dbg libgbm-dbg"
> >> -
> >> -RREPLACES_${PN} = "libegl libgles1 libgles2 libgbm"
> >> -RREPLACES_${PN}-dev = "libegl-dev libgles1-dev libgles2-dev libgbm-dev"
> >> -RREPLACES_${PN}-dbg = "libegl-dbg libgles1-dbg libgles2-dbg libgbm-dbg"
> >> -
> >> -RCONFLICTS_${PN} = "libegl libgles1 libgles2 libgbm"
> >> -RCONFLICTS_${PN}-dev = "libegl-dev libgles1-dev libgles2-dev libgbm-dev"
> >> -RCONFLICTS_${PN}-dbg = "libegl-dbg libgles1-dbg libgles2-dbg libgbm-dbg"
> >> -
> >>  # The actual SONAME is libGLESv2.so.2, so need to explicitly specify 
> >> RPROVIDES for .so.1 here
> >>  RPROVIDES_${PN} += "libGLESv2.so.1"
> >>  
> >> @@ -54,20 +40,12 @@ do_install () {
> >>  
> >>  FILES_${PN} =  "${bindir}/*"
> >>  FILES_${PN} += " ${libdir}/*"
> >> -FILES_${PN} +=  "${includedir}/*"
> >>  FILES_${PN} +=  "${sysconfdir}/*"
> >>  
> >> -PACKAGES =+ "${PN}-plugins"
> >> -FILES_${PN}-plugins = "${libdir}/libsrv_init.so ${libdir}/libsrv_um.so 
> >> ${libdir}/libglslcompiler.so ${libdir}/libPVRScopeServices.so 
> >> ${libdir}/libGLESv2.so ${libdir}/libEGL.so ${libdir}/libGLES_CM.so 
> >> ${libdir}/libpvrDRMWSEGL.so  ${libdir}/libpvrGBMWSEGL.so  
> >> ${libdir}/libpvrws_WAYLAND.so"
> >> -RDEPENDS_${PN} += "${PN}-plugins"
> >> -
> >> -ALLOW_EMPTY_${PN}-plugins = "1"
> >> -
> >>  INHIBIT_PACKAGE_STRIP = "1"
> >>  INHIBIT_SYSROOT_STRIP = "1"
> >>  
> >>  INSANE_SKIP_${PN} += "dev-so ldflags useless-rpaths"
> >> -INSANE_SKIP_${PN}-plugins = "dev-so"
> >>  INSANE_SKIP_${PN} += "already-stripped"
> >>  
> >>  CLEANBROKEN = "1"
> >> -- 
> >> 2.17.1
> >>
-- 
_______________________________________________
meta-ti mailing list
meta-ti@yoctoproject.org
https://lists.yoctoproject.org/listinfo/meta-ti

Reply via email to