Date: Thu, 5 Feb 2004 21:09:06 +0200 From: Ruslan Ermilov <ru@FreeBSD.org> To: Bruce Evans <bde@zeta.org.au> Cc: current@FreeBSD.org Subject: Re: Very long SRCS list with unusually long src/ prefix Message-ID: <20040205190906.GD20227@FreeBSD.org.ua> In-Reply-To: <20040206030956.F11456@gamplex.bde.org> References: <20040205091634.GC13932@FreeBSD.org.ua> <20040206012805.N8113@gamplex.bde.org> <20040205151425.GA18523@FreeBSD.org.ua> <20040206030956.F11456@gamplex.bde.org>
next in thread | previous in thread | raw e-mail | index | archive | help
--XuV1QlJbYrcVoo+x
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
On Fri, Feb 06, 2004 at 03:19:46AM +1100, Bruce Evans wrote:
> On Thu, 5 Feb 2004, Ruslan Ermilov wrote:
>=20
> > On Fri, Feb 06, 2004 at 01:40:45AM +1100, Bruce Evans wrote:
> > > On Thu, 5 Feb 2004, Ruslan Ermilov wrote:
> > [...]
> > > % +.for f in ${DPSRCS:M*.[cS]} ${DPSRCS:M*.cc} ${DPSRCS:M*.C} ${DPSRC=
S:M*.cpp} \
> > > % + ${DPSRCS:M*.cxx} ${DPSRCS:M*.m}
> > > % +_mkdep_${f}: ${f}
> > > % + @echo ${.ALLSRC}
> > > % +.endfor
> > >
> > > This seems to run echo once for each file separately. It should be d=
eemed
> > > inefficient :-).
> > >
> > But that's what this patch basically does: it splits possibly very
> > long ${.ALLSRC} list into pieces. It's very inefficient only in
> > traditional mode. Run this with and without -j1 to see the diff:
> >
> > : COUNT!=3D jot 1000
> > :
> > : all:
> > : .for foo in ${COUNT}
> > : @echo $$$$ >/dev/null
> > : .endfor
>=20
> That is slow too. I get 12.12 seconds with make, 2.36 with make -j1,
> 1.37 with a shell loop and bash-1, 1.35 with a shell loop and /bin/sh,
> and 0.0042 with jot 1000 >/dev/null.
>=20
Shell loops aren't an option here. I realize that we loose speed here,
but we gain a feature.
> I wonder about all those little dependencies too. make already takes
> a noticeable amount of time to handle large subdirs (here it takes 0.48
> seconds for a null "make depend").
>=20
I see the 0.18 secs increase for "make depend" in bin/cat. I see no
increase when .depend is not stale (since this code is not run then).
What do you mean by a ``null "make depend"''?
> > > % ${DEPENDFILE}: ${DPSRCS}
> > > % rm -f ${DEPENDFILE}
> > > % .if !empty(DPSRCS:M*.[cS])
> > > % - ${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \
> > > % - ${CFLAGS:M-nostdinc*} ${CFLAGS:M-[BID]*} \
> > > % - ${.ALLSRC:M*.[cS]}
> > > % + (cd ${.CURDIR}; ${MAKE} _mkdep_cS) | xargs env \
> > > % + ${MKDEPCMD} -f ${DEPENDFILE} -a ${MKDEP} \
> > > % + ${CFLAGS:M-nostdinc*} ${CFLAGS:M-[BID]*}
> > >
> > > make uses a real shell, so the env shouldn't be needed.
> > >
> > $ echo foo.c | xargs CC=3Dcc mkdep
> > xargs: CC=3Dcc: No such file or directory
>=20
> $ echo foo.c | CC=3Dcc xargs mkdep
>=20
Yes, but ``grep ^MKDEPCMD bsd.dep.mk'' to see what I'm talking
about.
Cheers,
--=20
Ruslan Ermilov
FreeBSD committer
ru@FreeBSD.org
--XuV1QlJbYrcVoo+x
Content-Type: application/pgp-signature
Content-Disposition: inline
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (FreeBSD)
iD8DBQFAIpTSUkv4P6juNwoRAnsPAJ4jrJhm1X1HOA11UrBuNTCt1HidSgCdFBwI
otqorp5EtFAO+FiwDpZQEOc=
=zOeb
-----END PGP SIGNATURE-----
--XuV1QlJbYrcVoo+x--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040205190906.GD20227>
