From 8c3f4423225007daa92550e4eac1088ce0040bd0 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Wed, 22 Mar 2017 11:28:08 +0100 Subject: [PATCH] Travis speed-ups (#3432) * Enable ccache * Cache mingw dependencies * Expose USE_CCACHE option * Disable ccache for release builds --- .travis.yml | 8 ++++++++ .travis/linux..script.sh | 2 +- .travis/linux.win.download.sh | 14 ++++++++++++++ .travis/linux.win32.install.sh | 30 ++++++++++++++++++++++-------- .travis/linux.win32.script.sh | 2 +- .travis/linux.win64.install.sh | 24 +++++++++++++++--------- .travis/linux.win64.script.sh | 2 +- .travis/osx..install.sh | 2 +- .travis/osx..script.sh | 2 +- CMakeLists.txt | 13 +++++++++++++ 10 files changed, 77 insertions(+), 22 deletions(-) create mode 100644 .travis/linux.win.download.sh diff --git a/.travis.yml b/.travis.yml index 9185ded11..76fc62b91 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,10 @@ language: cpp compiler: gcc dist: trusty sudo: required +cache: + directories: + - apt_mingw_cache + - $HOME/.ccache matrix: include: - env: TARGET_OS=win32 @@ -19,10 +23,14 @@ install: - . ${TRAVIS_BUILD_DIR}/.travis/${TRAVIS_OS_NAME}.${TARGET_OS}.install.sh before_script: - mkdir build && cd build + - export CMAKE_FLAGS="-DWANT_QT5=$QT5 -DUSE_WERROR=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo" + - if [ -z "$TRAVIS_TAG" ]; then export CMAKE_FLAGS="$CMAKE_FLAGS -DUSE_CCACHE=ON"; fi script: - . ${TRAVIS_BUILD_DIR}/.travis/${TRAVIS_OS_NAME}.${TARGET_OS}.script.sh - make -j4 - if [[ $TARGET_OS != win* ]]; then make tests && ./tests/tests; fi; +after_script: + - ccache -s before_deploy: make package deploy: provider: releases diff --git a/.travis/linux..script.sh b/.travis/linux..script.sh index f4ab59f6f..895f5875a 100644 --- a/.travis/linux..script.sh +++ b/.travis/linux..script.sh @@ -1,3 +1,3 @@ #!/usr/bin/env bash -cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DUSE_WERROR=ON -DWANT_QT5=$QT5 .. +cmake -DUSE_WERROR=ON $CMAKE_FLAGS .. diff --git a/.travis/linux.win.download.sh b/.travis/linux.win.download.sh new file mode 100644 index 000000000..76d7928b4 --- /dev/null +++ b/.travis/linux.win.download.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +set -e + +CACHE_DIR=$TRAVIS_BUILD_DIR/apt_mingw_cache/$1 +mkdir -p $CACHE_DIR + +pushd $CACHE_DIR + +apt-get --print-uris --yes install $MINGW_PACKAGES | grep ^\' | cut -d\' -f2 > downloads.list +wget -N --input-file downloads.list + +sudo cp ./*.deb /var/cache/apt/archives/ + +popd diff --git a/.travis/linux.win32.install.sh b/.travis/linux.win32.install.sh index 95c4ccd57..88d17a4f2 100644 --- a/.travis/linux.win32.install.sh +++ b/.travis/linux.win32.install.sh @@ -1,16 +1,30 @@ #!/usr/bin/env bash +set -e -PACKAGES="nsis cloog-isl libmpc3 qt4-linguist-tools mingw32 - mingw32-x-sdl mingw32-x-libvorbis mingw32-x-fluidsynth mingw32-x-stk +if [ $QT5 ]; then + MINGW_PACKAGES="mingw32-x-qt5base" +else + MINGW_PACKAGES="mingw32-x-qt" +fi + +MINGW_PACKAGES="mingw32-x-sdl mingw32-x-libvorbis mingw32-x-fluidsynth mingw32-x-stk mingw32-x-glib2 mingw32-x-portaudio mingw32-x-libsndfile mingw32-x-fftw mingw32-x-flac mingw32-x-fltk mingw32-x-libsamplerate mingw32-x-pkgconfig mingw32-x-binutils mingw32-x-gcc mingw32-x-runtime - mingw32-x-libgig mingw32-x-libsoundio" + mingw32-x-libgig mingw32-x-libsoundio $MINGW_PACKAGES" -if [ $QT5 ]; then - PACKAGES="$PACKAGES mingw32-x-qt5base" -else - PACKAGES="$PACKAGES mingw32-x-qt" -fi +export MINGW_PACKAGES + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +. $DIR/linux.win.download.sh win32 + +PACKAGES="nsis cloog-isl libmpc3 qt4-linguist-tools mingw32 $MINGW_PACKAGES" sudo apt-get install -y $PACKAGES + +# ccache 3.2 is needed because mingw32-x-gcc is version 4.9, which causes cmake +# to use @file command line passing, which in turn ccache 3.1.9 doesn't support +pushd /tmp +wget http://archive.ubuntu.com/ubuntu/pool/main/c/ccache/ccache_3.2.3-1_amd64.deb +sudo dpkg -i ccache_3.2.3-1_amd64.deb +popd diff --git a/.travis/linux.win32.script.sh b/.travis/linux.win32.script.sh index 3058f71d2..a8dcee77c 100644 --- a/.travis/linux.win32.script.sh +++ b/.travis/linux.win32.script.sh @@ -1,4 +1,4 @@ #!/usr/bin/env bash -export CMAKE_OPTS="-DUSE_WERROR=ON" +export CMAKE_OPTS="$CMAKE_FLAGS -DUSE_WERROR=ON" ../cmake/build_mingw32.sh diff --git a/.travis/linux.win64.install.sh b/.travis/linux.win64.install.sh index 26754ae64..538fda18c 100644 --- a/.travis/linux.win64.install.sh +++ b/.travis/linux.win64.install.sh @@ -1,20 +1,26 @@ #!/usr/bin/env bash +set -e # First, install 32-bit deps - DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" . $DIR/linux.win32.install.sh -PACKAGES="mingw64-x-sdl mingw64-x-libvorbis mingw64-x-fluidsynth mingw64-x-stk + +if [ $QT5 ]; then + MINGW_PACKAGES="mingw64-x-qt5base" +else + MINGW_PACKAGES="mingw64-x-qt" +fi + +MINGW_PACKAGES="mingw64-x-sdl mingw64-x-libvorbis mingw64-x-fluidsynth mingw64-x-stk mingw64-x-glib2 mingw64-x-portaudio mingw64-x-libsndfile mingw64-x-fftw mingw64-x-flac mingw64-x-fltk mingw64-x-libsamplerate mingw64-x-pkgconfig mingw64-x-binutils mingw64-x-gcc mingw64-x-runtime - mingw64-x-libgig mingw64-x-libsoundio" + mingw64-x-libgig mingw64-x-libsoundio $MINGW_PACKAGES" -if [ $QT5 ]; then - PACKAGES="$PACKAGES mingw64-x-qt5base" -else - PACKAGES="$PACKAGES mingw64-x-qt" -fi +export MINGW_PACKAGES -sudo apt-get install -y $PACKAGES +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +. $DIR/linux.win.download.sh win64 + +sudo apt-get install -y $MINGW_PACKAGES diff --git a/.travis/linux.win64.script.sh b/.travis/linux.win64.script.sh index e7321df6a..13339c830 100644 --- a/.travis/linux.win64.script.sh +++ b/.travis/linux.win64.script.sh @@ -1,4 +1,4 @@ #!/usr/bin/env bash -export CMAKE_OPTS="-DUSE_WERROR=ON" +export CMAKE_OPTS="$CMAKE_FLAGS -DUSE_WERROR=ON" ../cmake/build_mingw64.sh diff --git a/.travis/osx..install.sh b/.travis/osx..install.sh index 371834575..0fb8560eb 100644 --- a/.travis/osx..install.sh +++ b/.travis/osx..install.sh @@ -8,7 +8,7 @@ else PACKAGES="$PACKAGES cartr/qt4/qt" fi -brew install $PACKAGES +brew install $PACKAGES ccache # Recompile fluid-synth without CoreAudio per issues #649 # Changes to fluid-synth.rb must be pushed to URL prior to use diff --git a/.travis/osx..script.sh b/.travis/osx..script.sh index f2d611e64..30c938748 100644 --- a/.travis/osx..script.sh +++ b/.travis/osx..script.sh @@ -5,4 +5,4 @@ if [ $QT5 ]; then export CMAKE_PREFIX_PATH="$(brew --prefix qt55)" fi -cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DWANT_QT5=$QT5 -DUSE_WERROR=OFF .. +cmake $CMAKE_FLAGS -DUSE_WERROR=OFF .. diff --git a/CMakeLists.txt b/CMakeLists.txt index 7b351b469..f6170b546 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -476,6 +476,19 @@ ELSE(WIN32) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -DPIC") ENDIF(WIN32) +# use ccache +OPTION(USE_CCACHE "Use ccache for compilation" OFF) +IF(USE_CCACHE) + FIND_PROGRAM(CCACHE ccache) + IF (CCACHE) + MESSAGE(STATUS "Using ccache found in PATH") + SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE}) + SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_LINK ${CCACHE}) + ELSE() + MESSAGE(WARNING "USE_CCACHE enabled, but no ccache found") + ENDIF() +ENDIF(CCACHE_FOUND) + # make sub-directories ADD_SUBDIRECTORY(cmake) ADD_SUBDIRECTORY(src)