* [Buildroot] how to repopulate /output/target/lib? @ 2012-06-25 11:46 Aras Vaichas 2012-06-25 11:55 ` Thomas Petazzoni 0 siblings, 1 reply; 4+ messages in thread From: Aras Vaichas @ 2012-06-25 11:46 UTC (permalink / raw) To: buildroot Hello, I'm currently moving a project to Buildroot. So I'm configuring Buildroot to create an identical fs tree to my existing tree. My workflow is: * run make * compare output/target against my original fs (using xxdiff) * adjust Buildroot settings. e.g. skeleton, post build script, etc * clear out output/target * repeat I have a helper script that does some of the dirty work: #!/bin/sh find -name .stamp_target_installed | xargs rm rm -rf output/target rm output/build/.root echo now run make My problem is that "make" no longer populates output/target/lib or output/target/usr/lib at this stage of the build and I don't know why. I understand that output/staging holds all the libraries, but how do the correct libraries get copied to output/target? How can I trigger this action without having to do a "make clean; make"? Thanks in advance, Aras Vaichas ^ permalink raw reply [flat|nested] 4+ messages in thread
* [Buildroot] how to repopulate /output/target/lib? 2012-06-25 11:46 [Buildroot] how to repopulate /output/target/lib? Aras Vaichas @ 2012-06-25 11:55 ` Thomas Petazzoni [not found] ` <CAJkQPOm=27BykDt-jkfFExR6bSKJhtgK-TUFQbZ=bDkyOi38pA@mail.gmail.com> 2012-06-25 14:09 ` Luca Ceresoli 0 siblings, 2 replies; 4+ messages in thread From: Thomas Petazzoni @ 2012-06-25 11:55 UTC (permalink / raw) To: buildroot Hello Aras, Le Mon, 25 Jun 2012 12:46:50 +0100, Aras Vaichas <aras.vaichas@gmail.com> a ?crit : > I understand that output/staging holds all the libraries, but how do > the correct libraries get copied to output/target? How can I trigger > this action without having to do a "make clean; make"? So far, we have no supported mechanism other than "make clean; make" to rebuild the target root filesystem. That's part of the Buildroot simplicity: we don't try to support partial rebuilds, because it is very complicated to get 100% right, and we don't want to support something that is right 90% of the time, but is known to have an incorrect behavior 10% of the time. To answer your question, the libraries are installed in output/target/{usr/,}lib by: * The toolchain installation procedure. This one depends on whether you're using the internal, external or crosstool-ng backend for your toolchain. This part installs the C library and related basic libraries (thread, math, rt, etc.). * The package installation steps, which should be replayed if you remove .stamp_target_installed files, as you did. Basically, my suggestions to do what you're trying to do is: * Don't use a custom skeleton, do your customization in a post-build script, because it gets re-run at every build, while the skeleton copy is only done once at the beginning of a clean build; * When you make a change to a package, just remove this package build directory (rm -rf output/build/<pkg>-<version>). This is generally enough to check that the new installation results are correct. * Use an external toolchain so that doing "make clean; make" is not too painful. * Ensure you have a fast enough build machine (i.e, not a slow Windows laptop that runs Linux inside a VMWare) I'm applying all those suggestions, and I'm a fairly happy Buildroot user :) Regards, Thomas -- Thomas Petazzoni, Free Electrons Kernel, drivers, real-time and embedded Linux development, consulting, training and support. http://free-electrons.com ^ permalink raw reply [flat|nested] 4+ messages in thread
[parent not found: <CAJkQPOm=27BykDt-jkfFExR6bSKJhtgK-TUFQbZ=bDkyOi38pA@mail.gmail.com>]
* [Buildroot] how to repopulate /output/target/lib? [not found] ` <CAJkQPOm=27BykDt-jkfFExR6bSKJhtgK-TUFQbZ=bDkyOi38pA@mail.gmail.com> @ 2012-06-25 13:10 ` Thomas Petazzoni 0 siblings, 0 replies; 4+ messages in thread From: Thomas Petazzoni @ 2012-06-25 13:10 UTC (permalink / raw) To: buildroot Hello Aras, Please keep the list Cc'ed for replies. Le Mon, 25 Jun 2012 13:55:03 +0100, Aras Vaichas <aras.vaichas@gmail.com> a ?crit : > > ?* The toolchain installation procedure. This one depends on whether > > ? you're using the internal, external or crosstool-ng backend for your > > ? toolchain. This part installs the C library and related basic > > ? libraries (thread, math, rt, etc.). > > Thank you for this hint. I found the Makefile responsible and I am now > able to repopulate the entire output/target directory. I had to remove > output/stamps/ct-ng-toolchain-installed in order to trigger the > library copying code. I wasn't sure if removing this file would > retrigger the entire toolchain build so I was wary of removing it. > > To summarise, this is what I do to recreate output/target (reinstall > all packages) from scratch: > > # find -name .stamp_target_installed | xargs rm > # rm -rf output/target > # rm output/build/.root > # rm output/stamps/ct-ng-toolchain-installed > # make > > As you mentioned before, Buildroot doesn't support partial rebuilds so > I don't guarantee what I did will work in 100% of cases, but it > certainly does make life a little easier. :) Sure. The thing is that such a workflow might generate an inconsistent target root filesystem: you reinstall into the target only the libraries that are enabled now, but if some libraries previously selected are installed in the staging/ directory, but have been removed from menuconfig in the mean time, they are no longer installed in the target, giving you an inconsistent target root filesystem. > > > ?* Ensure you have a fast enough build machine (i.e, not a slow Windows > > ? laptop that runs Linux inside a VMWare) > > Unfortunately that is what I have been given for my development, so > building the toolchain is a day lost. You should request a more powerful machine. > I have seen some previous posts about building two copies of Buildroot - > one for the toolchain, the other for development. I think I will re-read > them and implement an external toolchain. If you use the ct-ng backend, then just use Crosstool-NG outside of Buildroot to generate your toolchain, and import it into Buildroot using the external toolchain backend. Regards, Thomas -- Thomas Petazzoni, Free Electrons Kernel, drivers, real-time and embedded Linux development, consulting, training and support. http://free-electrons.com ^ permalink raw reply [flat|nested] 4+ messages in thread
* [Buildroot] how to repopulate /output/target/lib? 2012-06-25 11:55 ` Thomas Petazzoni [not found] ` <CAJkQPOm=27BykDt-jkfFExR6bSKJhtgK-TUFQbZ=bDkyOi38pA@mail.gmail.com> @ 2012-06-25 14:09 ` Luca Ceresoli 1 sibling, 0 replies; 4+ messages in thread From: Luca Ceresoli @ 2012-06-25 14:09 UTC (permalink / raw) To: buildroot Thomas Petazzoni wrote: > Hello Aras, > > Le Mon, 25 Jun 2012 12:46:50 +0100, > Aras Vaichas <aras.vaichas@gmail.com> a ?crit : > >> I understand that output/staging holds all the libraries, but how do >> the correct libraries get copied to output/target? How can I trigger >> this action without having to do a "make clean; make"? > > So far, we have no supported mechanism other than "make clean; make" to > rebuild the target root filesystem. That's part of the Buildroot > simplicity: we don't try to support partial rebuilds, because it is > very complicated to get 100% right, and we don't want to support > something that is right 90% of the time, but is known to have an > incorrect behavior 10% of the time. > > To answer your question, the libraries are installed in > output/target/{usr/,}lib by: > > * The toolchain installation procedure. This one depends on whether > you're using the internal, external or crosstool-ng backend for your > toolchain. This part installs the C library and related basic > libraries (thread, math, rt, etc.). > > * The package installation steps, which should be replayed if you > remove .stamp_target_installed files, as you did. > > Basically, my suggestions to do what you're trying to do is: > > * Don't use a custom skeleton, do your customization in a post-build > script, because it gets re-run at every build, while the skeleton > copy is only done once at the beginning of a clean build; > > * When you make a change to a package, just remove this package build > directory (rm -rf output/build/<pkg>-<version>). This is generally > enough to check that the new installation results are correct. Instead of `rm -rf output/build/<pkg>-<version>`, you can just do `make <pkg>-dirclean`, which is equivalent but a bit cleaner IMHO. > > * Use an external toolchain so that doing "make clean; make" is not > too painful. > > * Ensure you have a fast enough build machine (i.e, not a slow Windows > laptop that runs Linux inside a VMWare) To speed up recompilations, also enable ccache ("Enable compiler cache" in the "Build options" menu). Luca ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2012-06-25 14:09 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-06-25 11:46 [Buildroot] how to repopulate /output/target/lib? Aras Vaichas
2012-06-25 11:55 ` Thomas Petazzoni
[not found] ` <CAJkQPOm=27BykDt-jkfFExR6bSKJhtgK-TUFQbZ=bDkyOi38pA@mail.gmail.com>
2012-06-25 13:10 ` Thomas Petazzoni
2012-06-25 14:09 ` Luca Ceresoli
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox