Date: Sat, 31 Dec 1994 14:45:50 +0100 From: Wolfram Schneider <wosch@cs.tu-berlin.de> To: hackers@freebsd.org Subject: optimized mkdep Message-ID: <199412311345.OAA07627@beryll.cs.tu-berlin.de>
next in thread | raw e-mail | index | archive | help
``make depend'' use to much processes. The following patches save 12 processes for every ``make depend''. ``Make world'' call ``make depend'' ~500x => 6000 processes!!! Tested in /usr/src/usr.sbin/sa Current, without optimization: 20 processes $ make depend rm -f .depend files=""; if [ "$files" != "" ]; then mkdep -a $files; fi files="main.c pdb.c usrdb.c"; if [ "$files" != "" ]; then mkdep -a $files; fi files=" "; if [ "$files" != " " ]; then mkdep -a $files; fi make - w ttyp5 0.53 secs Sat Dec 23 19:57 sh - w ttyp5 0.03 secs Sat Dec 23 19:57 [ - w ttyp5 0.03 secs Sat Dec 23 19:57 sh - w ttyp5 0.05 secs Sat Dec 23 19:57 sh - w ttyp5 0.12 secs Sat Dec 23 19:57 rm - w ttyp5 0.02 secs Sat Dec 23 19:57 cat - w ttyp5 0.03 secs Sat Dec 23 19:57 [ - w ttyp5 0.02 secs Sat Dec 23 19:57 [ - w ttyp5 0.02 secs Sat Dec 23 19:57 sed - w ttyp5 0.17 secs Sat Dec 23 19:57 cc - w ttyp5 0.17 secs Sat Dec 23 19:57 cpp - w ttyp5 0.66 secs Sat Dec 23 19:57 cpp - w ttyp5 0.75 secs Sat Dec 23 19:57 cpp - w ttyp5 0.92 secs Sat Dec 23 19:57 [ - w ttyp5 0.02 secs Sat Dec 23 19:57 [ - w ttyp5 0.05 secs Sat Dec 23 19:57 [ - w ttyp5 0.03 secs Sat Dec 23 19:57 sh - w ttyp5 0.05 secs Sat Dec 23 19:57 [ - w ttyp5 0.02 secs Sat Dec 23 19:57 rm - w ttyp5 0.06 secs Sat Dec 23 19:57 bsd.dep.mk.opt + mkdep: 15 processes $ make depend rm -f .depend; files=""; case "$files" in "");; *) mkdep -a $files;; esac; files="main.c pdb.c usrdb.c"; case "$files" in "");; *) mkdep -a $files; esac; files=" "; case "$files" in " ");; *) mkdep -a $files; esac make - w ttyp5 0.52 secs Sat Dec 23 20:00 sh - w ttyp5 0.08 secs Sat Dec 23 20:00 sh - w ttyp5 0.12 secs Sat Dec 23 20:00 rm - w ttyp5 0.03 secs Sat Dec 23 20:00 cat - w ttyp5 0.02 secs Sat Dec 23 20:00 [ - w ttyp5 0.02 secs Sat Dec 23 20:00 [ - w ttyp5 0.03 secs Sat Dec 23 20:00 sed - w ttyp5 0.16 secs Sat Dec 23 20:00 cc - w ttyp5 0.17 secs Sat Dec 23 20:00 cpp - w ttyp5 0.69 secs Sat Dec 23 20:00 cpp - w ttyp5 0.75 secs Sat Dec 23 20:00 cpp - w ttyp5 0.89 secs Sat Dec 23 20:00 [ - w ttyp5 0.02 secs Sat Dec 23 20:00 [ - w ttyp5 0.06 secs Sat Dec 23 20:00 rm - w ttyp5 0.02 secs Sat Dec 23 20:00 bsd.dep.mk.opt + mkdep.perl: 8 processes $ make depend rm -f .depend; files=""; case "$files" in "");; *) mkdep.perl -a $files;; esac; files="main.c pdb.c usrdb.c"; case "$files" in "");; *) mkdep.perl -a $files; esac; files=" "; case "$files" in " ");; *) mkdep.perl -a $files; esac make - w ttyp5 0.53 secs Sat Dec 23 20:02 sh - w ttyp5 0.03 secs Sat Dec 23 20:02 perl - w ttyp5 0.19 secs Sat Dec 23 20:02 cc - w ttyp5 0.17 secs Sat Dec 23 20:02 cpp - w ttyp5 0.66 secs Sat Dec 23 20:02 cpp - w ttyp5 0.75 secs Sat Dec 23 20:02 cpp - w ttyp5 0.92 secs Sat Dec 23 20:02 rm - w ttyp5 0.03 secs Sat Dec 23 20:02 Gruß Wolfram #!/bin/sh # This is a shell archive (produced by shar 3.49) # To extract the files from this archive, save it to a file, remove # everything above the "!/bin/sh" line above, and type "sh file_name". # # made 12/31/1994 13:41 UTC by wosch@beryll # Source directory /tmp_amd/fiesta/export/all3/w/wosch/tmp/send # # existing files will NOT be overwritten unless -c is specified # # This shar contains: # length mode name # ------ ---------- ------------------------------------------ # 3217 -rwxr-xr-x mkdep.perl # 1061 -rwxr-xr-x bsd.dep.mk.opt # # ============= mkdep.perl ============== if test -f 'mkdep.perl' -a X"$1" != X"-c"; then echo 'x - skipping mkdep.perl (File already exists)' else echo 'x - extracting mkdep.perl (Text)' sed 's/^X//' << 'SHAR_EOF' > 'mkdep.perl' && #!/usr/bin/perl # # Copyright (c) 1994 Wolfram Schneider. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All advertising materials mentioning features or use of this software # must display the following acknowledgement: # This product includes software developed by Wolfram Schneider # 4. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # # mkdep - construct Makefile dependency list # Email: Wolfram Schneider <wosch@cs.tu-berlin.de> X $depend=".depend"; # default dependency file is .depend $append=0; # $pflag=0; # X sub usage { X warn <<EOF; usage: mkdep [-p] [-f depend_file] [cc_flags] file ... EOF X exit 1; } X @argv=''; while ($_ = $ARGV[0], /^-/) { X shift @ARGV; X last if /^--$/; X X # -a appends to the depend file X if (/^-a$/) { $append = 1 } X # -f allows you to select a makefile name X elsif (/^-f$/) { $depend=$_; shift @ARGV } X # the -p flag produces "program: program.c" style dependencies X # so .o's don't get produced X elsif (/^-p$/) { $pflag = 1 } X else { push(@argv, $_); last; } } &usage if $#ARGV < 0; # push(@argv, @ARGV); X X # For C sources, mkdep must use exactly the same cpp and predefined flags # as the compiler would. This is easily arranged by letting the compiler # pick the cpp. mkdep must be told the cpp to use for exceptional cases. if ($ENV{'MKDEP_CPP'}) { X $cpp = $ENV{'MKDEP_CPP'}; } else { X $cpp="cc -E"; } X X # Quote metacharacters for sh -c (exec, open etc.) $a = join($", @argv); $a =~ s|([^\w /.-])|\\$1|g; X open(CPP, "$cpp -M $a |"); X @array=''; if ($pflag) { X while(<CPP>) { X s|\.o:|:|; X s| \./| |g; X push(@array, $_); X } } else { X while(<CPP>) { X s| \./| |g; X push(@array, $_); X } } close CPP; X if(($? >> 8) != 0) { X warn "mkdep: compile failed.\n"; X exit 1; } X if ($append) { X open(D, ">> $depend"); } else { X open(D, "> $depend"); } X print D @array; close D; X Xexit 0; SHAR_EOF chmod 0755 mkdep.perl || echo 'restore of mkdep.perl failed' Wc_c="`wc -c < 'mkdep.perl'`" test 3217 -eq "$Wc_c" || echo 'mkdep.perl: original size 3217, current size' "$Wc_c" fi # ============= bsd.dep.mk.opt ============== if test -f 'bsd.dep.mk.opt' -a X"$1" != X"-c"; then echo 'x - skipping bsd.dep.mk.opt (File already exists)' else echo 'x - extracting bsd.dep.mk.opt (Text)' sed 's/^X//' << 'SHAR_EOF' > 'bsd.dep.mk.opt' && # $Id: bsd.dep.mk,v 1.1 1994/08/04 21:10:07 wollman Exp $ X # some of the rules involve .h sources, so remove them from mkdep line MD=mkdep.perl .if !target(depend) depend: beforedepend .depend afterdepend .if defined(SRCS) .depend: ${SRCS} X rm -f .depend; \ X files="${.ALLSRC:M*.[sS]}"; \ X case "$$files" in "");; *) \ X ${MD} -a ${MKDEP} ${CFLAGS:M-[ID]*} ${AINC} $$files;; esac; \ X files="${.ALLSRC:M*.c}"; \ X case "$$files" in "");; *) \ X ${MD} -a ${MKDEP} ${CFLAGS:M-[ID]*} $$files; esac; \ X files="${.ALLSRC:M*.cc} ${.ALLSRC:M*.C} ${.ALLSRC:M*.cxx}"; \ X case "$$files" in " ");; *) \ X ${MD} -a ${MKDEP} ${CXXFLAGS:M-nostd*} ${CXXFLAGS:M-[ID]*} $$files;\ X esac .else .depend: .endif .if !target(beforedepend) beforedepend: .endif .if !target(afterdepend) afterdepend: .endif .endif X .if !target(tags) .if defined(SRCS) tags: ${SRCS} X -cd ${.CURDIR}; ctags -f /dev/stdout ${.ALLSRC:N*.h} | \ X sed "s;\${.CURDIR}/;;" > tags .else tags: .endif .endif X .if defined(SRCS) clean: cleandir: cleandepend cleandepend: X rm -f .depend ${.CURDIR}/tags .endif SHAR_EOF chmod 0755 bsd.dep.mk.opt || echo 'restore of bsd.dep.mk.opt failed' Wc_c="`wc -c < 'bsd.dep.mk.opt'`" test 1061 -eq "$Wc_c" || echo 'bsd.dep.mk.opt: original size 1061, current size' "$Wc_c" fi exit 0
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199412311345.OAA07627>