On Thu, Mar 12, 2015 at 10:26 AM, Joakim Tjernlund <
joakim.tjernl...@transmode.se> wrote:

> On Thu, 2015-03-12 at 01:27 +0000, Duncan wrote:
> > Zac Medico posted on Wed, 11 Mar 2015 12:03:10 -0700 as excerpted:
> >
> > > On 03/11/2015 11:56 AM, Joakim Tjernlund wrote:
> > > > On Wed, 2015-03-11 at 11:34 -0700, Zac Medico wrote:
> > > > > On 03/11/2015 09:03 AM, Joakim Tjernlund wrote:
> > > > > > When developing code it would be really nice if one could run
> your ebuild on that src tree as is(no
> > > > > > fetch, unpack etc.)
> > > > >
> > > > > The existing convention is to create an ebuild with version 9999
> and use one of the live vcs eclasses
> > > > > such as git-r3 to pull the live sources in the src_unpack
> function. In a future EAPI, we plan to add
> > > > > some features related to this [1].
> > > >
> > > > I think you misunderstand, [1] is not what I want to do(I think):
> > > >
> > > > Got my src working copy and made a few modds, not commitet yet. Now
> I just want build/test etc. before
> > > > committing and to do that I just run
> mytree/overlay/dev-util/myapp/myapp.ebuild compile and voila, my
> > > > code is built which I already have in mytree.
> > >
> > > Well, you can create a -9999 ebuild that copies your sources from
> $directory to $WORKDIR. Maybe use an
> > > environment to configure whether it pulls from a local directory or a
> vcs repository.
> >
> > @ Joakim T:
> >
> > FWIW, a commonly recommended user-level portage optimization is to point
> > $PORTAGE_TMPDIR at a tmpfs mount.  As long as you have sufficient memory,
> > that lets all building take place in the tmpfs and thus in memory,
> eliminating many read-accesses and
> > most/all write accesses to permanent  storage during the build and
> (fake-)install phases.
> >
> > In addition to speeding up emerge itself, this reduces build-time I/O,
> which often becomes the bottleneck
> > on which other processes may be  waiting as well, thus allowing other
> processes more efficient access to
> > permanent storage while emerge is ongoing.  Between this and setting
> PORTAGE_NICENESS=20, emerge is /much/
> > better behaved during builds,  interrupting other processes much less
> and thus letting you carry on with
> > other things while emerge is doing its thing, with far less interruption.
> > =:^)
> >
> > For instance, here I have /tmp as a tmpfs mount (with /var/tmp being a
> bind-mount of the same tmpfs), and
> > in make.conf, have the line:
> >
> > PORTAGE_TMPDIR=/tmp
> >
> > Emerge then creates /tmp/portage, and within it, creates the usual cat/
> pkg/ build trees, etc, as it
> > emerges various packages.
> >
> >
> > Obviously, your sources in permanent storage are going to be cache-copied
> > into memory as you do the build anyway, and pointing PORTAGE_TMPDIR at
> tmpfs then becomes a copy to
> > (tmpfs) memory only.  While that doesn't  technically eliminate the
> copies (since the read into tmpfs will
> > cache  and you'll have the tmpfs copy as well), it DOES mean most of the
> work  beyond the initial read into
> > memory will be memory-only, so you DO  eliminate the permanent-storage
> copies.
> >
> > Is that sufficiently close to what you were looking to do?  Beyond that,
> > as Zac suggests, just have the ebuild grab the sources from wherever you
> > put them as your src_unpack, as at that point it'll be a copy to tmpfs,
> and thus take essentially the same
> > time (or even less since it'll avoid  the build-time writes to permanent
> storage) as doing the in-place
> > build  directly.  Plus, creating a tmpfs mount if necessary, and
> setting  PORTAGE_TMPDIR, is easy, and
> > you'll dramatically speed-up normal builds  as well. =:^)
> >
>
> No, there can be no copy of sources for what I want. It just gets in the
> way having to do that.
> Hacks like this seems to work:
>
>
I wouldn't really call it a hack either, but whichever ;)


> post_src_compile() {
>         # make it compile every time
>         rm -f ${PORTAGE_BUILDDIR}/.compiled
> }
>
> post_src_install() {
>         # make it install every time
>         rm -f ${PORTAGE_BUILDDIR}/.installed
> }
>
> #hmm, doesn't seem to be an post_package function
> #post_package() {
> #       rm -f ${PORTAGE_BUILDDIR}/.packaged
> #}
>
> src_unpack() {
>         #dir need to exist
>         mkdir -p ${S} || die
> }
> src_compile() {
>         EBUILDDIR=$(dirname ${FILESDIR})
>         MYTRUNK=${EBUILDDIR}/../../..
>         # add sandbox exceptions
>         addwrite ${MYTRUNK}
>
>         cd ${MYTRUNK} || die
>         cd "${PN}"
> .....
> }
>
> I'm a bit curious what sort of workflow you are trying to achieve here is.
Which build artifacts are you looking for; the actual built binaries or the
built package that is merged into the livefs?

If the artifacts are packages, then I think this approach makes some
sense...but otherwise I'd just go into trunk and run the build process
(what does the ebuild gain you here?)

-A

Reply via email to