[CFT] Buildworld ccache support
Bryan Drewery
bdrewery at FreeBSD.org
Wed Oct 21 14:01:53 UTC 2015
Why not cc me or even send this re: to the original thread?
On 10/20/2015 6:32 AM, Juan Ramón Molina Menor wrote:
> Hi!
>
> I’m certainly doing it wrong, because CCACHE does not kick in after
> applying the patch and modifying make.conf. CCACHE stats ('ccache -z'
> followed by 'ccache -s') remain at zero during buildworld while they
> used to reflect the cache miss/hits before.
>
> # cat /etc/make.conf
> WITH_CCACHE_BUILD=
>
> # svn diff /usr/src/share/mk/local.init.mk
> Index: /usr/src/share/mk/local.init.mk
> ===================================================================
> --- /usr/src/share/mk/local.init.mk (revision 289627)
> +++ /usr/src/share/mk/local.init.mk (working copy)
> @@ -38,3 +38,37 @@
> HOST_CFLAGS+= -DHOSTPROG
> CFLAGS+= ${HOST_CFLAGS}
> .endif
> +
> +# Handle ccache after CC is determined. If CC is at some specific path
> then
> +# we must prepend the ccache wrapper. Otherwise we can just prepend
> PATH with
> +# the wrapper location, which is a more safe solution since it avoids
> spaces
> +# and compiler type guessing based on filename.
> +LOCALBASE?= /usr/local
> +CCACHE_WRAPPER_PATH?= ${LOCALBASE}/libexec/ccache
> +CCACHE_PATH?= ${LOCALBASE}/bin/ccache
> +.if defined(WITH_CCACHE_BUILD) && !defined(NOCCACHE) && \
> + ${CC:M*ccache*} == "" && exists(${CCACHE_PATH})
> +# Handle compiler changes properly. This avoids needing to use the
> 'world'
> +# wrappers.
> +CCACHE_COMPILERCHECK?= content
> +.export CCACHE_COMPILERCHECK
> +.if ${CC:M/*} == ""
> +# Can use PATH.
> +PATH:= ${CCACHE_WRAPPER_PATH}:${PATH}
> +.export PATH
> +.else
> +# Must prepend CC.
> +CC:= ${CCACHE_PATH} ${CC}
> +CXX:= ${CCACHE_PATH} ${CXX}
> +CPP:= ${CCACHE_PATH} ${CPP}
> +.if defined(HOST_CC)
> +HOST_CC:= ${CCACHE_PATH} ${HOST_CC}
> +.endif
> +.if defined(HOST_CXX)
> +HOST_CXX:= ${CCACHE_PATH} ${HOST_CXX}
> +.endif
> +.if defined(HOST_CPP)
> +HOST_CPP:= ${CCACHE_PATH} ${HOST_CPP}
> +.endif
> +.endif
> +.endif # WITH_CCACHE_BUILD
>
> If I recover the old make.conf, CCACHE works again for a buildworld.
>
> # cat /etc/make.conf.old
> .if (!empty(.CURDIR:M/usr/src*) || !empty(.CURDIR:M/usr/obj*))
> .if !defined(NOCCACHE) && exists(/usr/local/libexec/ccache/world/cc)
> CC:=${CC:C,^cc,/usr/local/libexec/ccache/world/cc,1}
> CXX:=${CXX:C,^c\+\+,/usr/local/libexec/ccache/world/c++,1}
> .endif
> .endif
>
> Maybe I misconfigured CCACHE when I first installed it?
>
This doesn't check for a value of WITH_CCACHE_BUILD, just being defined
is enough.
I've been fixing some subtle bugs such as in the lib32 build, but
overall I've had ccache -s growing while using the patch. If you
already have ccache in CC it won't apply it.
Are you building head from head or some other configuration?
--
Regards,
Bryan Drewery
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: OpenPGP digital signature
URL: <http://lists.freebsd.org/pipermail/freebsd-current/attachments/20151021/8121c668/attachment.bin>
More information about the freebsd-current
mailing list