All of lore.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.