[yocto] [meta-raspberrypi][PATCH V4 1/5] userland: Fix install prefix and generate pkgconfigs

Andrei Gherzan andrei at gherzan.ro
Wed Oct 21 05:05:00 PDT 2015


Hello,

On Thu, Oct 15, 2015 at 04:57:13PM +0200, Joachim Schiele wrote:
> On 13.10.2015 19:13, Andrei Gherzan wrote:
> > On Tue, Oct 13, 2015 at 02:14:28AM +0200, Joachim Schiele wrote:
> >> On 03.10.2015 23:53, Andrei Gherzan wrote:
> >>> On Sat, Oct 03, 2015 at 02:47:24PM -0700, Khem Raj wrote:
> >>>> On Sat, Oct 3, 2015 at 2:27 PM, Andrei Gherzan <andrei at gherzan.ro> wrote:
> >>>>> On Sat, Oct 03, 2015 at 10:46:07PM +0200, Andrei Gherzan wrote:
> >>>>>> On Sat, Oct 03, 2015 at 10:40:50PM +0200, Andrei Gherzan wrote:
> >>>>>>> On Sat, Oct 03, 2015 at 10:33:12PM +0200, Andrei Gherzan wrote:
> >>>>>>>> On Sat, Oct 03, 2015 at 01:31:24PM -0700, Khem Raj wrote:
> >>>>>>>>> On Sat, Oct 3, 2015 at 1:11 PM, Andrei Gherzan <andrei at gherzan.ro> wrote:
> >>>>>>>>>> On Sat, Oct 03, 2015 at 01:06:55PM -0700, Khem Raj wrote:
> >>>>>>>>>>> On Sat, Oct 3, 2015 at 12:18 PM, Andrei Gherzan <andrei at gherzan.ro> wrote:
> >>>>>>>>>>>> I tested with and without - same result.
> >>>>>>>>>>>> DISTRO_FEATURES="alsa argp bluetooth ext2 irda largefile pcmcia usbgadget
> >>>>>>>>>>>> usbhost wifi xattr nfs zeroconf pci 3g nfc x11 ipv4 ipv6 libc-backtrace
> >>>>>>>>>>>> libc-big-macros libc-bsd libc-cxx-tests libc-catgets libc-charsets libc-crypt
> >>>>>>>>>>>> libc-crypt-ufc libc-db-aliases libc-envz libc-fcvt libc-fmtmsg libc-fstab
> >>>>>>>>>>>> libc-ftraverse                  libc-getlogin libc-idn libc-inet-anl libc-libm
> >>>>>>>>>>>> libc-locales libc-locale-code                   libc-memusage libc-nis
> >>>>>>>>>>>> libc-nsswitch libc-rcmd libc-rtld-debug libc-spawn libc-streams libc-sunrpc
> >>>>>>>>>>>> libc-utmp libc-utmpx libc-wordexp libc-posix-clang-wchar libc-posix-regexp
> >>>>>>>>>>>> libc-posix-regexp-glibc                     libc-posix-wchar-io largefile
> >>>>>>>>>>>> opengl ptest multiarch wayland pulseaudio sysvinit bluez5"
> >>>>>>>>>>>>
> >>>>>>>>>>>> No modification to the default poky distro.
> >>>>>>>>>>>
> >>>>>>>>>>> hmm I am using angstrom and it works there and for verification I now
> >>>>>>>>>>> tried with OE-Core ( alone ) it works there too, can you check some
> >>>>>>>>>>> other parameters that are there in your sandbox ? here is my build
> >>>>>>>>>>>
> >>>>>>>>>>>  MACHINE=raspberrypi2 bitbake userland
> >>>>>>>>>>> Parsing recipes: 100%
> >>>>>>>>>>> |######################################################################################################################################################################################################|
> >>>>>>>>>>> ETA:  00:00:00
> >>>>>>>>>>> Parsing of 918 .bb files complete (0 cached, 918 parsed). 1350
> >>>>>>>>>>> targets, 59 skipped, 0 masked, 0 errors.
> >>>>>>>>>>> NOTE: Resolving any missing task queue dependencies
> >>>>>>>>>>>
> >>>>>>>>>>> Build Configuration:
> >>>>>>>>>>> BB_VERSION        = "1.28.0"
> >>>>>>>>>>> BUILD_SYS         = "x86_64-linux"
> >>>>>>>>>>> NATIVELSBSTRING   = "Ubuntu-14.04"
> >>>>>>>>>>> TARGET_SYS        = "arm-oe-linux-gnueabi"
> >>>>>>>>>>> MACHINE           = "raspberrypi2"
> >>>>>>>>>>> DISTRO            = "nodistro"
> >>>>>>>>>>> DISTRO_VERSION    = "nodistro.0"
> >>>>>>>>>>> TUNE_FEATURES     = "arm armv7a vfp thumb neon callconvention-hard
> >>>>>>>>>>> vfpv4 cortexa7"
> >>>>>>>>>>> TARGET_FPU        = "vfp-vfpv4-neon"
> >>>>>>>>>>> meta-raspberrypi  = "kraj/master:a903a9cd18ae556121265da93ed74f857944a0da"
> >>>>>>>>>>> meta              = "kraj/master:602e512b92bcc78403144fedeb4211bbf56ff1c8"
> >>>>>>>>>>>
> >>>>>>>>>>> NOTE: Preparing RunQueue
> >>>>>>>>>>> NOTE: Executing SetScene Tasks
> >>>>>>>>>>> NOTE: Executing RunQueue Tasks
> >>>>>>>>>>> NOTE: Tasks Summary: Attempted 454 tasks of which 315 didn't need to
> >>>>>>>>>>> be rerun and all succeeded.
> >>>>>>>>>>
> >>>>>>>>>> Here is my build configuration.
> >>>>>>>>>>
> >>>>>>>>>> Build Configuration:
> >>>>>>>>>> BB_VERSION        = "1.28.0"
> >>>>>>>>>> BUILD_SYS         = "x86_64-linux"
> >>>>>>>>>> NATIVELSBSTRING   = "Arch-rolling"
> >>>>>>>>>> TARGET_SYS        = "arm-poky-linux-gnueabi"
> >>>>>>>>>> MACHINE           = "raspberrypi2"
> >>>>>>>>>> DISTRO            = "poky"
> >>>>>>>>>> DISTRO_VERSION    = "2.0"
> >>>>>>>>>> TUNE_FEATURES     = "arm armv7a vfp thumb neon callconvention-hard vfpv4
> >>>>>>>>>> cortexa7"
> >>>>>>>>>> TARGET_FPU        = "vfp-vfpv4-neon"
> >>>>>>>>>> meta
> >>>>>>>>>> meta-yocto
> >>>>>>>>>> meta-yocto-bsp    = "master:eac61f37e36099f74485dab398b57f3812826d17"
> >>>>>>>>>> meta-raspberrypi  = "master:48da0cdc5fb147a20b41a77b2dfeef4efd483b32"
> >>>>>>>>>> meta-oe
> >>>>>>>>>> meta-multimedia   = "master:f4533380c8a5c1d229f692222ee0c2ef9d187ef8"
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> But anyway can you please check in your userland install dir for the header I'm
> >>>>>>>>>> missing? Or in sysroot.
> >>>>>>>>>
> >>>>>>>>> its part of userland itself so no other package should be needed and
> >>>>>>>>> not required in sysroot
> >>>>>>>>>
> >>>>>>>>> ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/package/usr/src/debug/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
> >>>>>>>>> ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/packages-split/userland-dbg/usr/src/debug/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
> >>>>>>>>> ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/build/interface/khronos/wayland-dispmanx-server-protocol.h
> >>>>>>>>> ./work/raspberrypi2-oe-linux-gnueabi/userland/git-r5/build/interface/vmcs_host/wayland-dispmanx-server-protocol.h
> >>>>>>>>
> >>>>>>>> This is odd... what revision of userland are you using? The one on current
> >>>>>>>> meta-rpi master?
> >>>>>>>>
> >>>>>>>> --
> >>>>>>>> Andrei Gherzan
> >>>>>>>
> >>>>>>> This is not even in the current HEAD of master in userland official repository:
> >>>>>>> https://github.com/raspberrypi/userland/tree/master/interface/vmcs_host
> >>>>>>>
> >>>>>>> Are you sure you don't inject the file somehow? I really don't know what's
> >>>>>>> going on.
> >>>>>>>
> >>>>>>> --
> >>>>>>> Andrei Gherzan
> >>>>>>
> >>>>>> I found the mistery. It gets generated in another path:
> >>>>>> ./build/interface/khronos/wayland-dispmanx-server-protocol.h
> >>>>>>
> >>>>>> Figuring out why.
> >>>>>>
> >>>>>> --
> >>>>>> Andrei Gherzan
> >>>>>
> >>>>> I managed to get to the bottom of this. It's a racing issue. Basically, with
> >>>>> MAKE_PARALLEL high enough, the
> >>>>>
> >>>>> add_library(EGL ${SHARED} ${EGL_SOURCE})
> >>>>>
> >>>>> in git/interface/khronos/CMakeLists.txt gets to run before the header is
> >>>>> generated. No dependency configured for that. And in the sources of EGL there
> >>>>> is egl_wayland.c which includes the generated header by the call:
> >>>>>
> >>>>> wayland_add_protocol_server(
> >>>>>        EGL_SOURCE
> >>>>>        ../../interface/wayland/dispmanx.xml
> >>>>>        dispmanx
> >>>>> )
> >>>>>
> >>>>> Any idea how to define this dependency? What is the value of your PARALLEL_MAKE
> >>>>
> >>>> I use -j16, can you add the .h file with path to EGL_SOURCE
> >>>
> >>> Adding the path to EGL_SOURCE won't work because cmake will complain that the
> >>> header is not in place. We need a dependency definition.
> >>>
> >>> --
> >>> Andrei Gherzan
> >>>
> >>
> >> in this file:
> >> ./tmp/work/raspberrypi-poky-linux-gnueabi/userland/git-r5/egl.pc"
> >>
> >> i replaced
> >>
> >> Cflags: -I${includedir}/vc -I${includedir}/interface
> >> -I${includedir}/interface/vcos -I${includedir}/interface/vcos/pthreads
> >>
> >> with that
> >>
> >> Cflags: -I${includedir}/vc -I${includedir}/interface
> >> -I${includedir}/interface/vcos -I${includedir}/interface/vcos/pthreads
> >> -I../build/interface/khronos/
> >>
> >> (basically adding -I../build/interface/khronos/)
> >>
> >> IIRC that worked for me. you can give that a try at least ;-)
> >>
> >>
> >> --
> >> _______________________________________________
> >> yocto mailing list
> >> yocto at yoctoproject.org
> >> https://lists.yoctoproject.org/listinfo/yocto
> >
> > Hi Joachim,
> >
> > I'm not sure how would this help as long as the pc file is generated by
> > userland and the error I'm facing is while compiling userland.
> >
> > --
> > Andrei Gherzan
> >
>
> hi andrei,
>
> you are right, my last answer was actually fror a different problem.
> after looking into this issue, which is basically finding a way to make
> -j n (with n > 1) work:
>
> --- in short ---
> so add a custom dependency:
>
> ######### interface/vmcs_host/CMakeLists.txt #########
> if (BUILD_WAYLAND)
> wayland_add_protocol_server(
>     VCHOSTIF_SOURCE
>     ../../interface/wayland/dispmanx.xml
>     dispmanx
> )
> + add_custom_target (myVmcs_hostTarget DEPENDS
> wayland-dispmanx-server-protocol.h)
>
> ######### interface/khronos/CMakeLists.txt #########
>    add_library(wayland-egl ${SHARED} ${WAYLAND_EGL_SOURCE})
>    + add_dependencies(wayland-egl myVmcs_hostTarget)
>    install(TARGETS wayland-egl DESTINATION lib)
>
>
> note: i consider this a rather hacky solution. it works but assumes the
> filename to be wayland-dispmanx-server-protocol.h even though if someone
> changes the cmake function called 'wayland_add_protocol_server' (which
> comes with the patch) to use a different filename, it will break.
>
> the cmake background is described here:
> #
> http://stackoverflow.com/questions/4010212/cmake-struggling-with-add-custom-command-dependencies
>
> tested with: conf/local.conf:
> BB_NUMBER_THREADS = "4"
> PARALLEL_MAKE = "-j 4"
>

I tried defining a custom dep too but the error persisted. As well, I recreated
the patch using exactly your changes (for the sake of being on the same code)

Index: git/interface/khronos/CMakeLists.txt
===================================================================
--- git.orig/interface/khronos/CMakeLists.txt
+++ git/interface/khronos/CMakeLists.txt
@@ -95,6 +95,7 @@ if (BUILD_WAYLAND)
    )
.
    add_library(wayland-egl ${SHARED} ${WAYLAND_EGL_SOURCE})
+   add_dependencies(wayland-egl myVmcs_hostTarget)
    install(TARGETS wayland-egl DESTINATION lib)
.
    configure_file ("wayland-egl/wayland-egl.pc.in" "wayland-egl/wayland-egl.pc" @ONLY)
Index: git/interface/vmcs_host/CMakeLists.txt
===================================================================
--- git.orig/interface/vmcs_host/CMakeLists.txt
+++ git/interface/vmcs_host/CMakeLists.txt
@@ -23,6 +23,7 @@ wayland_add_protocol_server(
    ../../interface/wayland/dispmanx.xml
    dispmanx
)
+add_custom_target (myVmcs_hostTarget DEPENDS
wayland-dispmanx-server-protocol.h)
endif ()
.
add_library(vchostif ${VCHOSTIF_SOURCE})

Now. Even with this patch, the compile fails sometimes with:
tmp/work/raspberrypi2-poky-linux-gnueabi/userland/git-r
5/git/interface/vmcs_host/vc_vchi_dispmanx.h:72:66: fatal error:
interface/vmcs_host/wayland-dispm
anx-server-protocol.h: No such file or directory

I use autodetection of BB_NUMBER_THREADS and PARALLEL_MAKE. They end up:
BB_NUMBER_THREADS="4"
PARALLEL_MAKEINST="-j 4"

Regards,
--
Andrei Gherzan



More information about the yocto mailing list