public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Martin Mares <mj@ucw.cz>
To: Keith Owens <kaos@ocs.com.au>
Cc: Mike Touloumtzis <miket@bluemug.com>,
	Larry McVoy <lm@bitmover.com>,
	linux-kernel@vger.kernel.org, kbuild-devel@lists.sourceforge.net
Subject: Re: [kbuild-devel] Re: State of the new config & build system
Date: Sun, 6 Jan 2002 09:55:49 +0100	[thread overview]
Message-ID: <20020106095549.A664@ucw.cz> (raw)
In-Reply-To: <20011231200359.A22497@bluemug.com> <3680.1009873619@ocs3.intra.ocs.com.au>
In-Reply-To: <3680.1009873619@ocs3.intra.ocs.com.au>

Hi Keith,

> That is exactly what kbuild 2.5 does.  The slowdown occurs when
> massaging the -MD dependencies from absolute names to relative path
> names.  To support separate source and object trees, renaming of trees,
> different names in local and NFS mode etc., the massage code needs a
> list of where all the files are before it can convert the absolute
> dependencies produced by gcc.  Reading and indexing that file for every
> compile is _slow_.

I didn't follow the thread from the very beginning nor did I study
your makefiles carefully, because I don't have much time for kernel
hacking these days, but maybe I won't miss the pond :)

Is there any reason for processing all the files for each compile
instead of merging them to a single file once at the start of the make?

I use it in one of my projects, there is the relevant part of the
Makefile:

# Black magic with dependencies. It would be more correct to make "depend.new"
# a prerequisite for "depend", but "depend.new" often has the same timestamp
# as "depend" which would confuse make a lot and either force remaking anyway
# or (as in current versions of GNU make) erroneously skipping the remaking.

-include depend

depend: force
        if [ -s depend.new ] ; then build/mergedeps depend depend.new ; >depend.new ; fi

force:

# Implicit rules

obj/%.o: %.c
        DEPENDENCIES_OUTPUT="depend.new $@" $(CC) $(CFLAGS) -c -o $@ $<

The DEPENDENCIES_OUTPUT mode is much more convenient than gcc -Mx as it
avoids scattering the relevant information over many files. The mergedeps
script is a simple Perl script which takes care of merging the dependencies
gathered during the previous run of make to the depend file for the next
run. It can do a lot of fixups and translations, here is a trivial
example:

#!/usr/bin/perl

@ARGV == 2 or die "Usage: mergedeps <base> <update>";
foreach $a (@ARGV) {
        open F, "$a" or next;
        $t = "";
        while (<F>) {
                $t .= $_;
                if (! /\\$/) {
                        ($t =~ /^(.*):/) || die "Parse error at $t";
                        $rules{$1} = $t;
                        $t = "";
                }
        }
        close F;
}
open(F,">" . $ARGV[0]) || die "Unable to write output file";
foreach $a (sort keys %rules) {
        print F $rules{$a};
}
close F;

				Have a nice fortnight
-- 
Martin `MJ' Mares   <mj@ucw.cz>   http://atrey.karlin.mff.cuni.cz/~mj/
Faculty of Math and Physics, Charles University, Prague, Czech Rep., Earth
Light-year? One-third less calories than a regular year.

  reply	other threads:[~2002-01-06 16:16 UTC|newest]

Thread overview: 138+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-12-28  0:24 State of the new config & build system Eric S. Raymond
2001-12-28  0:54 ` Dave Jones
2001-12-28  0:57   ` Eric S. Raymond
2001-12-28  1:15     ` Larry McVoy
2001-12-28  1:35       ` Keith Owens
2001-12-28  1:37         ` Larry McVoy
2001-12-28  1:41           ` Keith Owens
2001-12-28  1:47             ` Larry McVoy
2001-12-28  1:57               ` Keith Owens
2001-12-28  2:01                 ` Larry McVoy
2001-12-28 14:14                   ` Alan Cox
2001-12-28 14:16                     ` Keith Owens
2001-12-28 17:14                     ` Christer Weinigel
2001-12-28 17:39                       ` Alan Cox
2001-12-29  1:44                         ` Keith Owens
2001-12-29  4:09                           ` Legacy Fishtank
2001-12-30  3:34                             ` Viktor Rosenfeld
2001-12-30  4:24                               ` Dave Jones
2001-12-30 14:37                                 ` Viktor Rosenfeld
2001-12-29 17:11                           ` Christer Weinigel
2001-12-28 17:43                     ` Larry McVoy
2001-12-28 18:17                       ` Alan Cox
2001-12-28 20:54                       ` Larry McVoy
2001-12-29  9:24                       ` Anton Blanchard
2001-12-29 16:28                         ` Larry McVoy
2002-01-01  4:03                 ` Mike Touloumtzis
2002-01-01  8:26                   ` Keith Owens
2002-01-06  8:55                     ` Martin Mares [this message]
2002-01-06 22:19                       ` [kbuild-devel] " Keith Owens
2002-01-09 17:16                         ` Martin Mares
2002-01-01  8:55                   ` Peter Samuelson
2001-12-28 22:31               ` Martin Dalecki
2001-12-28 23:02                 ` Eric S. Raymond
2001-12-28 14:24             ` Alan Cox
2001-12-28 20:56         ` Kai Germaschewski
2001-12-28 21:16           ` Legacy Fishtank
2001-12-28 22:17             ` Linus Torvalds
2001-12-28 23:44               ` Kai Germaschewski
2001-12-30 12:05                 ` [kbuild-devel] " Christoph Hellwig
2001-12-29  1:27               ` Keith Owens
2001-12-29  1:53                 ` Alan Cox
2001-12-29  1:57                   ` Keith Owens
2001-12-29  2:10                     ` Alan Cox
2001-12-29  4:06                 ` Legacy Fishtank
2001-12-29 13:32                 ` Rik van Riel
2001-12-29 20:23                 ` Linus Torvalds
2001-12-29  1:26             ` Keith Owens
2001-12-29  3:58               ` Legacy Fishtank
2001-12-29  4:21                 ` Mike Castle
2001-12-29  4:44                   ` Keith Owens
2001-12-29  4:52                     ` Arnaldo Carvalho de Melo
2001-12-29 11:10                       ` PORTUGUês EM?? Astinus
2001-12-29  6:59                     ` State of the new config & build system Nicholas Knight
2001-12-29  7:42                       ` Miles Lane
2001-12-29  8:02                         ` Nicholas Knight
2001-12-29  8:11                           ` Mike Castle
2001-12-29  7:41                     ` Legacy Fishtank
2001-12-29  8:13                       ` Andrew Morton
2001-12-29  9:40                         ` Daniel Phillips
2002-01-03 10:46                           ` Pavel Machek
2002-01-03 20:29                             ` Dave Jones
2002-01-03 20:35                               ` Alexander Viro
2002-01-03 20:46                                 ` Keith Owens
2002-01-03 21:30                                   ` Alexander Viro
2002-01-03 21:50                                     ` Keith Owens
2002-01-03 22:11                                       ` Alexander Viro
2002-01-03 22:44                                         ` Keith Owens
2002-01-04  1:49                                       ` Andreas Bombe
2002-01-04  2:31                                         ` Keith Owens
2002-01-04 21:40                                           ` Andreas Bombe
2001-12-28 22:51           ` Larry McVoy
2001-12-29  2:54             ` Keith Owens
2001-12-29 12:43               ` Kai Germaschewski
2001-12-28  1:22     ` Dave Jones
2001-12-28  1:36       ` [kbuild-devel] " Tom Rini
2001-12-28  1:36         ` Eric S. Raymond
2001-12-28  1:38       ` Keith Owens
2001-12-28  1:30   ` [kbuild-devel] " Keith Owens
2001-12-28  9:26   ` Legacy Fishtank
2001-12-28  9:42     ` Keith Owens
2001-12-28 16:34       ` Alan Cox
2001-12-28 20:01       ` Larry McVoy
2001-12-28 20:38         ` Richard Gooch
2001-12-29  0:50         ` Keith Owens
2001-12-29  0:55           ` Larry McVoy
2001-12-28 18:02     ` Linus Torvalds
2001-12-28 18:24       ` Alan Cox
2001-12-28 22:06         ` Linus Torvalds
2001-12-28 22:08           ` [kbuild-devel] " Eric S. Raymond
2001-12-28 22:29             ` Larry McVoy
2001-12-28 22:29             ` Linus Torvalds
2001-12-28 22:58               ` Eric S. Raymond
2001-12-29  9:18                 ` Giacomo A. Catenazzi
2001-12-31 22:51         ` Horst von Brand
2001-12-31 22:55           ` Arnaldo Carvalho de Melo
2002-01-01  1:21             ` Peter Samuelson
2001-12-28 19:08       ` Riley Williams
2001-12-28 19:12       ` Eric S. Raymond
2001-12-28 20:26         ` Alexander Viro
2001-12-28 20:39           ` Eric S. Raymond
2001-12-30 13:58             ` [kbuild-devel] " Christoph Hellwig
2001-12-30 17:50               ` Jeff Garzik
2001-12-30 20:53                 ` Hartmut Holz
2001-12-30 20:15               ` Adrian Bunk
2002-01-01  4:29               ` Horst von Brand
2001-12-31 23:32             ` Horst von Brand
2001-12-28 23:20           ` Alan Cox
2001-12-30 11:42             ` [kbuild-devel] " Kai Henningsen
2001-12-31  8:24               ` GOTO Masanori
2001-12-31  6:50           ` GOTO Masanori
2001-12-28 22:11         ` Linus Torvalds
2001-12-28 22:31           ` Eric S. Raymond
2001-12-29 21:24             ` [kbuild-devel] " Tom Rini
2001-12-29 22:43               ` Eric S. Raymond
2001-12-29 23:12                 ` Tom Rini
2001-12-30  0:22                 ` Russell King
2001-12-30  0:11                   ` Eric S. Raymond
2001-12-30  5:39                 ` Rob Landley
2001-12-30 13:59                   ` Alan Cox
2001-12-30 17:14             ` David Woodhouse
2001-12-30 17:32               ` Tom Rini
2001-12-30 17:44               ` Russell King
2001-12-28 20:39       ` Legacy Fishtank
2001-12-28 20:41       ` Legacy Fishtank
2001-12-28 20:45         ` Eric S. Raymond
2001-12-28 21:19           ` Legacy Fishtank
2001-12-28 21:12             ` Eric S. Raymond
2001-12-28 22:27               ` Linus Torvalds
2001-12-28 23:05                 ` Benjamin LaHaise
2001-12-29  0:59                   ` Legacy Fishtank
2001-12-29 19:12                     ` Linus Torvalds
2001-12-29  3:21                 ` [kbuild-devel] " Keith Owens
2001-12-28 23:13           ` Alan Cox
2001-12-28 23:04             ` Eric S. Raymond
2001-12-28 23:10             ` Linus Torvalds
2001-12-28 23:12               ` Martin Dalecki
2001-12-29 13:01               ` Rik van Riel
2001-12-28 22:47       ` Martin Dalecki

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=20020106095549.A664@ucw.cz \
    --to=mj@ucw.cz \
    --cc=kaos@ocs.com.au \
    --cc=kbuild-devel@lists.sourceforge.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lm@bitmover.com \
    --cc=miket@bluemug.com \
    /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