svn commit: r339636 - in head: . share/mk
Alexander Richardson
arichardson at freebsd.org
Mon Nov 5 23:11:07 UTC 2018
On Mon, 5 Nov 2018 at 23:00, Bryan Drewery <bdrewery at freebsd.org> wrote:
>
> On 10/22/2018 11:31 PM, Alex Richardson wrote:
> > Author: arichardson
> > Date: Tue Oct 23 06:31:25 2018
> > New Revision: 339636
> > URL: https://svnweb.freebsd.org/changeset/base/339636
> >
> > Log:
> > Only compute the X_COMPILER_*/X_LINKER_* variables when needed
> >
> > When building CheriBSD we have to set XLD/XCC/XCFLAGS on the command line.
> > This triggers the $XCC != $CC case in bsd.compiler.mk (and the same for LD
> > in bsd.linker.mk) which causes it to call ${XCC} --version and
> > ${XLD} --version (plus various awk+sed+echo calls) in every subdirectory.
> > For incremental builds and stages that only walk the source tree this is
> > often the majority of the time spent in that directory.
> >
> ...
>
> > By only computing the value of the X_COMPILER_*/X_LINKER_* variables if
> > _WANT_TOOLCHAIN_CROSS_VARS is set we can reduce the number of cc/ld calls
> > to once per build stage instead of once per recursive make.
>
> This sounds wrong. bsd.compiler.mk *already* handles that kind of thing
> by exporting its computations. Adding a second hack for a similar
> problem isn't the right solution.
>
I added debug .info statements for every time bsd.compiler.mk was
running cc --version and it was always running it for $XCC during make
buildworld.
As far as I can tell this happens because $CC and $XCC no longer match.
I believe the problem is that the toplevel makefile runs the cross
stages with CC="${XCC} ${XCFLAGS}" so if you have XCFLAGS set in your
environment $CC will never be equal to $XCC.
This also means there is not cached variable for $XCC since it was
computed for "${XCC} ${XCFLAGS}" rather than $XCC .
This patch massively reduced the incremental build time for CheriBSD
but if you can suggest I better fix that would be great.
Alex
More information about the svn-src-head
mailing list