On Fri, 26 Jan 2024, Khem Raj wrote:

> On Fri, Jan 26, 2024 at 4:46 AM Robert P. J. Day <rpj...@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/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to