qemu/.gitlab-ci.d
Daniel P. Berrangé 2f7350cd43 gitlab: enable ccache for many build jobs
The `ccache` tool can be very effective at reducing compilation times
when re-running pipelines with only minor changes each time. For example
a fresh 'build-system-fedora' job will typically take 20 minutes on the
gitlab.com shared runners. With ccache this is reduced to as little as
6 minutes.

Normally meson would auto-detect existance of ccache in $PATH and use
it automatically, but the way we wrap meson from configure breaks this,
as we're passing in an config file with explicitly set compiler paths.
Thus we need to add $CCACHE_WRAPPERSPATH to the front of $PATH. For
unknown reasons if doing this in msys though, gcc becomes unable to
invoke 'cc1' when run from meson. For msys we thus set CC='ccache gcc'
before invoking 'configure' instead.

A second problem with msys is that cache misses are incredibly
expensive, so enabling ccache massively slows down the build when
the cache isn't well populated. This is suspected to be a result of
the cost of spawning processes under the msys architecture. To deal
with this we set CCACHE_DEPEND=1 which enables ccache's 'depend_only'
strategy. This avoids extra spawning of the pre-processor during
cache misses, with the downside that is it less likely ccache will
find a cache hit after semantically benign compiler flag changes.
This is the lesser of two evils, as otherwise we can't use ccache
at all under msys and remain inside the job time limit.

If people are finding ccache to hurt their pipelines, it can be
disabled by setting the 'CCACHE_DISABLE=1' env variable against
their gitlab fork CI settings.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-Id: <20230804111054.281802-2-berrange@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20230829161528.2707696-2-alex.bennee@linaro.org>
2023-08-30 14:57:33 +01:00
..
cirrus tests/docker: add python3-tomli dependency to containers 2023-08-28 09:55:48 +02:00
custom-runners gitlab: enable minimal device profile for aarch64 --disable-tcg 2023-05-10 16:02:06 +01:00
opensbi gitlab/opensbi: Move to docker:stable 2023-03-05 15:40:00 -08:00
base.yml gitlab: support disabling job auto-run in upstream 2023-06-26 08:58:02 +02:00
buildtest-template.yml gitlab: enable ccache for many build jobs 2023-08-30 14:57:33 +01:00
buildtest.yml Revert "tests: Use separate virtual environment for avocado" 2023-08-28 09:55:48 +02:00
check-dco.py gitlab: add a CI job to validate the DCO sign off 2020-10-13 12:48:17 +02:00
check-patch.py .gitlab-ci.d/check-patch: tweak output for CI logs 2020-11-16 11:08:40 +00:00
cirrus.yml .gitlab-ci.d/cirrus: Drop the CI job for compiling with FreeBSD 12 2023-04-27 14:58:23 +01:00
container-core.yml tests/docker: remove the Debian base images 2022-09-20 17:22:08 +01:00
container-cross.yml tests/docker: use prebuilt toolchain for debian-hexagon-cross 2022-12-23 15:16:31 +00:00
container-template.yml gitlab: centralize the container tag name 2023-06-26 08:58:02 +02:00
containers.yml testing: update ubuntu2004 to ubuntu2204 2023-03-01 10:31:46 +00:00
crossbuild-template.yml gitlab: enable ccache for many build jobs 2023-08-30 14:57:33 +01:00
crossbuilds.yml gitlab: explicit set artifacts publishing criteria 2023-07-03 12:51:01 +01:00
custom-runners.yml gitlab: custom-runners: preserve more artifacts for debugging 2023-05-19 20:40:29 +02:00
opensbi.yml gitlab: explicit set artifacts publishing criteria 2023-07-03 12:51:01 +01:00
qemu-project.yml Add CI variable RUNNER_TAG 2023-05-24 12:26:40 -07:00
stages.yml gitlab: drop 'containers-layer2' stage 2022-07-29 09:48:01 +01:00
static_checks.yml gitlab: centralize the container tag name 2023-06-26 08:58:02 +02:00
windows.yml gitlab: enable ccache for many build jobs 2023-08-30 14:57:33 +01:00