Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
To: buildroot@busybox.net
Subject: [Buildroot] Build reproducibility
Date: Tue, 3 Sep 2013 19:13:06 +0200	[thread overview]
Message-ID: <20130903191306.601a2be0@skate> (raw)
In-Reply-To: <CAAXf6LUdJgRVK-BJJdJeH9QyutP_daHktchXMkTQ8M=R3U95mw@mail.gmail.com>

Dear Thomas De Schampheleire,

On Mon, 2 Sep 2013 15:18:09 +0200, Thomas De Schampheleire wrote:
> > Of course, if within the Buildroot project we are interested in
> > fixing such missing dependencies, then we can find a way of adding
> > randomness into the build order in our autobuilders. But clearly,
> > we do want to expose this randomness to our users.
> 
> I think indeed we should try to set the dependencies right some way
> or another.
> 
> If we assume that a package does not have any configurable options
> that would change its dependencies, a simple way to check if all
> dependencies are properly expressed is through:
> make clean toolchain foo

This is already done by the autobuilders. Thanks to the randomness of
the configuration, if a package fails to express a mandatory
dependency, sooner or later the autobuilders will generate a
configuration that has the package enabled but not one of its unknown
dependencies. The autobuilders have triggered such cases very quickly
in the past when a new package was added, so I'm pretty confident we
have good coverage on this one.

However, I think this suggestion misses the point of the current
discussion: we are talking about *optional* dependencies, i.e
functionality of a given package that are enabled if OpenSSL is
available, or disabled if OpenSSL is not available. Those optional
dependencies cannot be checked/discovered by a build such as "make
clean toolchain foo".

> Also, it's not necessary that each package gets build every night:
> once the dependencies are correct, they will stay correct until a
> version bump. This means we can spread out the execution of this type
> of tests over time, interleaving them with the already existing
> autobuilds with random configurations.

As stated above, for the mandatory dependencies, the autobuilders are
already finding them very quickly. Introduce a new package that lacks a
mandatory dependency expressed in its .mk file, and you'll see it very
quickly in the autobuilders.

> The make targets of buildroot itself are executed sequentially.
> Suppose that we keep a list of all targets executed, something like:
> python-source
> python-extract
> python-patch
> python-configure
> python-build
> python-install-target
> pyfoo-source
> pyfoo-extract
> pyfoo-build
> ...
> 
> To reproduce a build, we can explicitly pass this list on the make
> command-line, roughly like:
> cat <target-list> | xargs make clean toolchain

Could be doable.

I've lost track. Are we talking about all of this to use "include
package/*/*.mk" in make 3.82 which doesn't guarantee sorting, or to be
able to do top-level parallel build?

Seeing how simple it is to get make 3.82 to behave like make 3.81 by
sorting the "include package/*/*.mk" inclusions, I don't think it's
worth doing anything but the fix that J?r?me has suggested.

Only the top-level parallel build would be a good enough to worry about
reproducibility of more complicated builds (and therefore the need to
list in which order the targets were built).

Best regards,

Thomas
-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

  reply	other threads:[~2013-09-03 17:13 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-30  8:31 [Buildroot] Build reproducibility Jérôme Pouiller
2013-08-30  8:31 ` [Buildroot] [PATCH] Fix build reproducibility in Make 3.82 Jérôme Pouiller
2013-09-03  6:13   ` Arnout Vandecappelle
2013-09-03  8:45     ` [Buildroot] [PATCH v2] " Jérôme Pouiller
2013-09-03  9:31       ` Arnout Vandecappelle
2013-09-07  6:06       ` Peter Korsgaard
2013-08-30 11:59 ` [Buildroot] Build reproducibility Thomas De Schampheleire
2013-08-30 12:44   ` Jérôme Pouiller
2013-08-30 12:52     ` Thomas Petazzoni
2013-09-02  8:44       ` Thomas De Schampheleire
2013-09-02  8:53         ` Thomas Petazzoni
2013-09-02 13:18           ` Thomas De Schampheleire
2013-09-03 17:13             ` Thomas Petazzoni [this message]
2013-09-05 19:56               ` Thomas De Schampheleire
2013-09-05 20:49                 ` Jérôme Pouiller
2013-09-02 16:11         ` Arnout Vandecappelle
2013-09-03  6:26           ` Peter Korsgaard
2013-09-03  7:16             ` Thomas Petazzoni
2013-09-03  7:47               ` Peter Korsgaard
2013-09-03 16:48                 ` Thomas Petazzoni
2013-09-03  8:15             ` Jérôme Pouiller
2013-09-03 16:54               ` Thomas Petazzoni

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20130903191306.601a2be0@skate \
    --to=thomas.petazzoni@free-electrons.com \
    --cc=buildroot@busybox.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox