[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openembedded-core
Subject:    Re: [OE-core] trying to create simple example of "externalsrc" recipe
From:       "Robert P. J. Day" <rpjday () crashcourse ! ca>
Date:       2024-01-27 9:36:29
Message-ID: 01a1aa4-7c38-a478-5ae5-d0c17ed4215 () crashcourse ! ca
[Download RAW message or body]

On Fri, 26 Jan 2024, Khem Raj wrote:

> On Fri, Jan 26, 2024 at 4:46 AM Robert P. J. Day <rpjday@crashcourse.ca> wrote:
> > 
> > 
> > i've been trying to put together a really basic example of a recipe
> > using "externalsrc" that refers to some local source, and cannot get
> > it to work. so here's what i'm trying.
> > 
> > as a demo, i selected a random simple OE recipe -- in this case,
> > "dmidecode", whose recipe you can see here (and which seems
> > conveniently simple for demonstration purposes):
> > 
> > https://git.openembedded.org/openembedded-core/tree/meta/recipes-devtools/dmidecode/dmidecode_3.5.bb?h=master
> >  
> > so to start, since the SRC_URI is a tarball, i downloaded the tarball
> > so that i have the equivalent local source here:
> > 
> > $ ls /home/rpjday/oe/srcs/dmidecode-3.5
> > AUTHORS       dmioem.h     Makefile     util.c
> > biosdecode.c  dmiopt.c     man          util.h
> > config.h      dmiopt.h     NEWS         version.h
> > dmidecode.c   dmioutput.c  ownership.c  vpddecode.c
> > dmidecode.h   dmioutput.h  README       vpdopt.c
> > dmioem.c      LICENSE      types.h      vpdopt.h
> > $
> > 
> > as my first test, i set the build to the source directory in my
> > dmid_1.0.bb recipe file:
> > 
> > inherit externalsrc
> > EXTERNALSRC = "/home/rpjday/oe/srcs/dmidecode-3.5"
> > EXTERNALSRC_BUILD = "${EXTERNALSRC}"
> > 
> > do_install() {
> > oe_runmake \
> > DESTDIR="${D}" \
> > prefix="${prefix}" \
> > sbindir="${sbindir}" \
> > docdir="${docdir}/${BPN}" \
> > mandir="${mandir}" \
> > install
> > 
> > then ran:
> > 
> > $ bitbake dmid
> > 
> > sure enough, that build in the source directory, generating:
> > 
> > AUTHORS       dmidecode.o  dmioutput.h  ownership*   version.h
> > biosdecode*   dmioem.c     dmioutput.o  ownership.c  vpddecode*
> > biosdecode.c  dmioem.h     LICENSE      ownership.o  vpddecode.c
> > biosdecode.o  dmioem.o     Makefile     README       vpddecode.o
> > config.h      dmiopt.c     man/         types.h      vpdopt.c
> > dmidecode*    dmiopt.h     NEWS         util.c       vpdopt.h
> > dmidecode.c   dmiopt.o     oe-logs@     util.h       vpdopt.o
> > dmidecode.h   dmioutput.c  oe-workdir@  util.o
> > 
> > great, but i really want to build out-of-tree to preserve the
> > pristine state of the source, so i followed the instructions and
> > allowed EXTERNALSRC_BUILD to default to ${WORKDIR}/${BPN}-${PV}:
> > 
> > inherit externalsrc
> > EXTERNALSRC = "/home/rpjday/oe/srcs/dmidecode-3.5"
> > # EXTERNALSRC_BUILD = "${EXTERNALSRC}"
> > 
> > so I did a "make clean" in the source directory to start with the
> > pristine source (also deleted the "oe-" symlinks), then:
> > 
> > $ bitbake dmid
> > ... snip ...
> > > NOTE: make -j 8
> > DESTDIR=/home/rpjday/oe/builds/qemux86/tmp/work/core2-64-poky-linux/dmid/1.0/image
> >  prefix=/usr sbindir=/usr/sbin docdir=/usr/share/doc/dmid
> > mandir=/usr/share/man install
> > > make: *** No rule to make target 'install'.  Stop.
> > > ERROR: oe_runmake failed
> > 
> > from "bitbake -e dmid", i can see:
> > 
> > S="/home/rpjday/oe/srcs/dmidecode-3.5"
> > WORKDIR="/home/rpjday/oe/builds/qemux86/tmp/work/core2-64-poky-linux/dmid/1.0"
> > B="/home/rpjday/oe/builds/qemux86/tmp/work/core2-64-poky-linux/dmid/1.0/dmid-1.0"
> > 
> > but there is nothing unloaded into the B directory; hence, the
> > failure. in fact, the log file for the compile step is:
> > 
> > DEBUG: Executing python function externalsrc_compile_prefunc
> > NOTE: dmid: compiling from external source tree
> > /home/rpjday/oe/srcs/dmidecode-3.5
> > DEBUG: Python function externalsrc_compile_prefunc finished
> > DEBUG: Executing python function fetcher_hashes_dummyfunc
> > DEBUG: Python function fetcher_hashes_dummyfunc finished
> > DEBUG: Executing shell function do_compile
> > NOTE: nothing to compile
> > DEBUG: Shell function do_compile finished
> > 
> > so ... what have i overlooked? did i grab an inappropriate sample
> > recipe that does not support building out-of-tree? the build directory
> > is empty, so i'm perusing the externalsrc.bbclass to see what i have
> > misunderstood.
> 
> externalsrc is as good as the components build system since that's
> what it relies on
> so if the makery for that component does not support building out of
> source tree then
> externalsrc will fail doing so too, in such cases you set
> EXTERNALSRC_BUILD = "${EXTERNALSRC}"
> which is what you did in step 1.
> 
> Default is B = S in bitbake.conf, so that's what will be used for bare
> make based recipes like dmidecode.
> 
> The example you chose, does require you to build inside the source
> tree. If you want a
> sample where S != B then use something other than dmidecode, maybe
> something like
> https://github.com/jameskbride/cmake-hello-world

  thanks for clarifying that i picked a bad example -- that's what i
suspected, and thanks for pointing me at an appropriate demo.

rday



-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#194433): https://lists.openembedded.org/g/openembedded-core/message/194433
Mute This Topic: https://lists.openembedded.org/mt/103974993/4454766
Group Owner: openembedded-core+owner@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [openembedded-core@marc.info]
-=-=-=-=-=-=-=-=-=-=-=-



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic