Jeremy Huntwork wrote:

Alexander E. Patrakov wrote:
This simplification is important for me because it allows easily
replacing all "chroot" commands with, e.g., invocations of
qemu-system-x86_64.

Do you agree with the proposed changes?


Actually, upon further reflection, no, I don't. It seems that somehow
you're missing something major in how the Makefiles work. When building
regularly, by issuing just 'make', the Makefiles never touch the chroot
targets included in the packages Makefiles. Those are only there for
when you want to build a package separately, ie, for debugging and
testing purposes.
I understand this. There is a command:

chroot "$(MP)" $(chenv-pre-bash) 'set +h && \
        chown -R 0:0 $(WD) $(SRC) $(ROOT) && \
        cd $(ROOT) && make cross-pre-bash $(chbash-pre-bash)'

It runs the whole pre-bash build in one chroot. It uses ch-* targets and doesn't use *-only-ch.

For example, you hit an error on a certain package and you want to
figure out why it's failing. You can run 'make packagename-only-ch' and
it will use the chroot target within the sub-package Makefile and call
itself again once it has chrooted. Look at it a bit more closely -
you'll get it. :)
Yes, and that's what I don't like. Suppose that you want to rebuild only libidn. You run "make libidn-only-ch". This calls "mage -C $(PKG)/libidn chroot", this results in "make ch-libidn" with the right chroot environment.

But I want to call something different instead of the regular chroot command: "qemu-system-x86_64 -user-net -hda /dev/zero -kernel /path/to/cross-compiled-kernel -append "root=/dev/nfs nfsroot=..... init=$(ROOT)/scripts/init-pkg PACKAGE=libidn" which results in "make ch-libidn" inside qemu with the right environment (including distcc pointing to the cross-compiler on the host), and that qemu command is in fact subject to further changes. So it is a good idea to centralize this.

Also please count the packahes that call the wrong target in their chroot command.

I propose to do this by reorganizing the way the "*-only-ch" targets are handled. Instead of calling the package-specific "chroot" target in the individual Makefile, a common "chroot" target is called. This way, all "stage2" targets get a common environment. According to my plan, it's now their responsibility (and not the "chroot" target responsibility) to adjust it (i.e., append /tools/bin to the $PATH) while calling "compile-stage2".

As for the regular way of building packages sequentially, this chroot/qemu duality is probably going to be handled by introducing metapackages, so that the command cited above becomes:

make cross-pre-bash-only-ch

This is not going to trunk, in any case ;)

--
Alexander E. Patrakov
--
http://linuxfromscratch.org/mailman/listinfo/livecd
FAQ: http://www.linuxfromscratch.org/faq/
Unsubscribe: See the above information page

Reply via email to