From 005ba932344bbf4eb022df96ea24be67093324c0 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 10 Jul 2018 18:43:55 -0400 Subject: [PATCH] ci: add ccache support this enables and implements full support for ccache on travis builds fix T7126 Differential Revision: https://phab.enlightenment.org/D6605 =also includes previously-submitted patches= ci: split out ccache config setup into separate script this provides a more unified place to set ccache options also enable ccache compression to cut down on cache upload/download overhead ref D6613 ci: zero ccache stats before build and add some comments for options used zeroing the stats before each build will provide more insight into the cache performance for each build ref D6621 ci: break out ccache stat printing into separate script continue to make travis.yml more readable ref D6622 ci: add more ccache config options to improve cache direct hits ci: disable second cpp run for ccache this should avoid running cpp twice for files https://ccache.samba.org/manual.html#_the_preprocessor_mode --- .ci/ccache.conf | 7 +++++++ .ci/ci-ccache-stats.sh | 9 +++++++++ .ci/ci-configure.sh | 11 ++++++++--- .ci/ci-make-distcheck.sh | 5 ++++- .ci/ci-osx-deps.sh | 2 +- .ci/ci-setup-ccache.sh | 12 ++++++++++++ .ci/docker-ccache-setup.sh | 11 +++++++++++ .travis.yml | 16 ++++++++++++++-- 8 files changed, 66 insertions(+), 7 deletions(-) create mode 100644 .ci/ccache.conf create mode 100755 .ci/ci-ccache-stats.sh create mode 100755 .ci/ci-setup-ccache.sh create mode 100755 .ci/docker-ccache-setup.sh diff --git a/.ci/ccache.conf b/.ci/ccache.conf new file mode 100644 index 0000000000..e9913800ca --- /dev/null +++ b/.ci/ccache.conf @@ -0,0 +1,7 @@ +max_size = 500M +compression = true +compression_level = 1 +sloppiness = time_macros,include_file_mtime,include_file_ctime,file_macro +run_second_cpp = false +hash_dir = false + diff --git a/.ci/ci-ccache-stats.sh b/.ci/ci-ccache-stats.sh new file mode 100755 index 0000000000..76b270488c --- /dev/null +++ b/.ci/ci-ccache-stats.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +set -e + +if [ "$DISTRO" != "" ] ; then + docker exec $(cat $HOME/cid) ccache -s +else + ccache -s +fi diff --git a/.ci/ci-configure.sh b/.ci/ci-configure.sh index 28897dafcc..86e280ec5f 100755 --- a/.ci/ci-configure.sh +++ b/.ci/ci-configure.sh @@ -49,7 +49,10 @@ if [ "$DISTRO" != "" ] ; then if [ "$1" = "release-ready" ]; then OPTS="$OPTS $RELEASE_READY_LINUX_COPTS" fi - docker run --env MAKEFLAGS="-j5" --env EIO_MONITOR_POLL=1 -v `pwd`:/src -w /src stefanschmidt1/ci-support-files:$DISTRO ./autogen.sh $OPTS + docker exec $(cat $HOME/cid) sh -c 'rm -f ~/.ccache/ccache.conf' + docker exec --env MAKEFLAGS="-j5" --env EIO_MONITOR_POLL=1 --env CC="ccache gcc" \ + --env CXX="ccache g++" --env CFLAGS="-fdirectives-only" --env CXXFLAGS="-fdirectives-only" \ + $(cat $HOME/cid) ./autogen.sh $OPTS else OSX_COPTS="--disable-cxx-bindings" @@ -57,11 +60,13 @@ else mkdir -p ~/Library/LaunchAgents ln -sfv /usr/local/opt/d-bus/*.plist ~/Library/LaunchAgents launchctl load ~/Library/LaunchAgents/org.freedesktop.dbus-session.plist - export PATH="$(brew --prefix gettext)/bin:$PATH" + export PATH="/usr/local/opt/ccache/libexec:$(brew --prefix gettext)/bin:$PATH" - export CFLAGS="-I/usr/local/opt/openssl/include $CFLAGS" + export CFLAGS="-I/usr/local/opt/openssl/include -frewrite-includes $CFLAGS" + export LDFLAGS="-L/usr/local/opt/openssl/lib $LDFLAGS" export LDFLAGS="-L/usr/local/opt/openssl/lib $LDFLAGS" # Normal build test of all targets + rm -f ~/.ccache/ccache.conf ./autogen.sh $OSX_COPTS fi diff --git a/.ci/ci-make-distcheck.sh b/.ci/ci-make-distcheck.sh index 144b95782e..a00de9911c 100755 --- a/.ci/ci-make-distcheck.sh +++ b/.ci/ci-make-distcheck.sh @@ -7,7 +7,10 @@ if [ "$1" != "release-ready" ] ; then fi if [ "$DISTRO" != "" ] ; then - docker exec --env MAKEFLAGS="-j5" --env EIO_MONITOR_POLL=1 $(cat $HOME/cid) make distcheck + docker exec --env MAKEFLAGS="-j5" --env EIO_MONITOR_POLL=1 --env CC="ccache gcc" \ + --env CXX="ccache g++" \ + --env CFLAGS="-fdirectives-only" --env CXXFLAGS="-fdirectives-only" \ + $(cat $HOME/cid) make distcheck else export PATH="/usr/local/opt/ccache/libexec:$(brew --prefix gettext)/bin:$PATH" make diff --git a/.ci/ci-osx-deps.sh b/.ci/ci-osx-deps.sh index 859842624e..95872f82f3 100755 --- a/.ci/ci-osx-deps.sh +++ b/.ci/ci-osx-deps.sh @@ -2,4 +2,4 @@ brew update brew unlink python -brew install gettext check bullet dbus fontconfig freetype fribidi gst-plugins-good gstreamer luajit openssl webp libsndfile glib libspectre libraw librsvg poppler lz4 pulseaudio +brew install gettext check bullet dbus fontconfig freetype fribidi gst-plugins-good gstreamer luajit openssl webp libsndfile glib libspectre libraw librsvg poppler lz4 pulseaudio ccache diff --git a/.ci/ci-setup-ccache.sh b/.ci/ci-setup-ccache.sh new file mode 100755 index 0000000000..0a5087883f --- /dev/null +++ b/.ci/ci-setup-ccache.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +set -e + +if [ "$DISTRO" != "" ] ; then + docker exec $(cat $HOME/cid) sh -c ".ci/docker-ccache-setup.sh $1" + docker exec $(cat $HOME/cid) ccache -pz +else + cp .ci/ccache.conf ~/.ccache + ccache -o base_dir="$(pwd)" + ccache -pz +fi diff --git a/.ci/docker-ccache-setup.sh b/.ci/docker-ccache-setup.sh new file mode 100755 index 0000000000..748e743bf9 --- /dev/null +++ b/.ci/docker-ccache-setup.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +CI_BUILD_TYPE="$1" + +cp .ci/ccache.conf ~/.ccache + +if [ "$1" = "release-ready" ] ; then + ccache -o base_dir="$(pwd)/$(grep '^PACKAGE_STRING' config.log|cut -d\' -f2|tr ' ' -)" +else + ccache -o base_dir=$(pwd) +fi diff --git a/.travis.yml b/.travis.yml index 817e4f177f..f3ba713f01 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ language: c - +cache: ccache sudo: required dist: trusty @@ -11,6 +11,8 @@ env: global: - MAKEFLAGS="-j5" - EIO_MONITOR_POLL=1 + - CC="ccache gcc" + - CXX="ccache g++" matrix: - - DISTRO=Ubuntu1804 @@ -70,12 +72,15 @@ before_script: - | if [[ "$TRAVIS_OS_NAME" == "linux" ]] ; then docker version - docker run --cidfile $HOME/cid -t -d -v `pwd`:/src -w /src stefanschmidt1/ci-support-files:$DISTRO bash + docker run --cidfile $HOME/cid -t -d -v `pwd`:/src -v $HOME/.ccache:/root/.ccache -w /src stefanschmidt1/ci-support-files:$DISTRO bash cat $HOME/cid fi + - .ci/ci-ccache-stats.sh + script: - .ci/ci-configure.sh "$CI_BUILD_TYPE" + - .ci/ci-setup-ccache.sh "$CI_BUILD_TYPE" - .ci/ci-make.sh "$CI_BUILD_TYPE" - .ci/ci-make-checkbuild.sh "$CI_BUILD_TYPE" - .ci/ci-make-examples.sh "$CI_BUILD_TYPE" @@ -91,6 +96,13 @@ script: elif [[ "$CI_BUILD_TYPE" != "release-ready" ]] ; then docker exec --env MAKEFLAGS="-j5" --env EIO_MONITOR_POLL=1 $(cat $HOME/cid) .ci/build-efl-app.sh fi +before_cache: + - .ci/ci-ccache-stats.sh + - | + if [[ "$TRAVIS_OS_NAME" == "linux" ]] ; then + sudo chown travis:travis $HOME/.ccache + else + fi after_success: - |