From 5802d1bbad06951327503708f365b3c54d4b02ea Mon Sep 17 00:00:00 2001 From: Joel Rosdahl Date: Tue, 22 Jul 2025 14:43:25 +0200 Subject: [PATCH] chore: Add build-ccache-with-itself script This script can be used to verify that ccache is able to cache a build of itself. Example usage: COMMAND=/source/misc/build-ccache-with-itself misc/build-in-docker debian-12 --- dockerfiles/fedora-42/Dockerfile | 1 + misc/build-ccache-with-itself | 52 ++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100755 misc/build-ccache-with-itself diff --git a/dockerfiles/fedora-42/Dockerfile b/dockerfiles/fedora-42/Dockerfile index 48bd0a80..d041572f 100644 --- a/dockerfiles/fedora-42/Dockerfile +++ b/dockerfiles/fedora-42/Dockerfile @@ -2,6 +2,7 @@ ARG BASE_IMAGE=fedora:42 FROM ${BASE_IMAGE} AS build RUN dnf install -y \ + awk \ blake3-devel \ ccache \ clang \ diff --git a/misc/build-ccache-with-itself b/misc/build-ccache-with-itself new file mode 100755 index 00000000..949bb974 --- /dev/null +++ b/misc/build-ccache-with-itself @@ -0,0 +1,52 @@ +#!/bin/bash +# +# Example usage: +# +# COMMAND=/source/misc/build-ccache-with-itself misc/build-in-docker debian-12 + +set -eu + +# Set default values. +: ${BUILDDIR:=build} +: ${CCACHE_LOC:=..} +: ${CMAKE_PARAMS:=} +: ${EXTRA_CMAKE_BUILD_FLAGS:=} +: ${JOBS:=$(getconf _NPROCESSORS_ONLN 2>/dev/null || echo 2)} +: ${VERBOSE:=} + +if [ -n "${VERBOSE}" ]; then + set -x +fi + +build_ccache() { + mkdir -p "${BUILDDIR}" + cmake ${CMAKE_PARAMS} -S "${CCACHE_LOC}" -B "${BUILDDIR}" + cmake --build "${BUILDDIR}" ${EXTRA_CMAKE_BUILD_FLAGS} -- -j "${JOBS}" +} + +# Bootstrap +build_ccache +cmake --install "${BUILDDIR}" +rm -rf "${BUILDDIR}" + +export CCACHE_DIR=/tmp/ccache +export CMAKE_PARAMS="${CMAKE_PARAMS} -D CMAKE_C_COMPILER_LAUNCHER=/usr/local/bin/ccache -D CMAKE_CXX_COMPILER_LAUNCHER=/usr/local/bin/ccache" +rm -f /usr/local/bin/gcc /usr/local/bin/g++ + +# Build with empty cache +build_ccache +ccache -sv + +# Rebuild with warm cache +export CCACHE_STATSLOG="$PWD/stats.log" +rm -rf "${BUILDDIR}" +build_ccache +ccache -sv + +echo +echo "Cache misses:" +awk '/^cache_miss$/ { print substr(previous, 3) } { previous = $0 }' "${CCACHE_STATSLOG}" + +echo +echo "Rebuild statistics:" +ccache --show-log-stats -v -- 2.47.3