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.
next prev parent 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