Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 21 Oct 2015 22:44:39 +0200
From:      Juan =?iso-8859-1?b?UmFt824=?= Molina Menor <listjm@club.fr>
To:        Bryan Drewery <bdrewery@FreeBSD.org>, freebsd-current@freebsd.org
Subject:   Re: [CFT] Buildworld ccache support
Message-ID:  <5627F937.4060301@club.fr>
In-Reply-To: <56279AD2.6080009@FreeBSD.org>
References:  <56264279.7020504@club.fr> <56279AD2.6080009@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
> 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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5627F937.4060301>