# Sourced (`. local/compiler-cache.sh`) by the build pipelines before any # package is compiled. POSIX sh: the Alpine images run steps under busybox. # # Routes gcc/g++ through ccache. The images name their compilers by bare # `gcc`/`g++` in both R's Makeconf and /root/.R/Makevars, so prepending ccache's # masquerade dir catches every compile, CMake-driven vendored builds included. # Wrapping CC in a Makevars instead would need R_MAKEVARS_USER, which replaces # the images' /root/.R/Makevars (CXX_STD, the musl defines) rather than adding # to it. The dir differs per distro: Alpine, RHEL, Debian/Ubuntu. for dir in /usr/lib/ccache/bin /usr/lib64/ccache /usr/lib/ccache; do if [ -x "$dir/gcc" ]; then PATH="$dir:$PATH" break fi done export PATH # R compiles every package in a fresh /tmp/RtmpXXXXXX/ dir. R's default # flags include -g, which makes ccache hash the working directory, and the line # markers carry the absolute source path, so without these two settings no # compile ever hits the cache across runs. export CCACHE_BASEDIR="${CCACHE_BASEDIR:-/tmp}" export CCACHE_NOHASHDIR=1 # The images are rebuilt regularly, which changes the compiler's mtime but not # its content. ccache's default mtime check would discard the cache each time. export CCACHE_COMPILERCHECK=content # Parallel make inside a single package build. Match it to the step's CPU limit # via MAKE_JOBS; an explicit MAKEFLAGS wins. export MAKEFLAGS="${MAKEFLAGS:--j${MAKE_JOBS:-2}}" echo "compiler-cache: $(command -v gcc), CCACHE_DIR=${CCACHE_DIR:-unset}, MAKEFLAGS=$MAKEFLAGS"