[CFT] Buildworld ccache support
Juan Ramón Molina Menor
listjm at club.fr
Wed Oct 21 20:44:52 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?
HEAD from HEAD, updated regularly in /usr/src with SVN. Following the
standard procedure for updating described in /usr/src/UPDATING. ccache
installed as explained by the package message. Nothing special, really.
I’ll take some time when possible to recheck all the settings and be
back to you.
Best regards,
Juan
More information about the freebsd-current
mailing list