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] -=-=-=-=-=-=-=-=-=-=-=-