diff --git a/.appveyor.yml b/.appveyor.yml index d9cf55c2a6f..a12ea1260cf 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -9,13 +9,14 @@ environment: - compiler: msvc install: - vcpkg install --triplet %PLATFORM%-windows fftw3 libsamplerate libsndfile sdl2 + - nuget install clcache -Version 4.1.0 build_script: - cd %APPVEYOR_BUILD_FOLDER% - mkdir build - cd build - ps: $env:CMAKE_PLATFORM="$(if ($env:PLATFORM -eq 'x64') { 'x64' } else { '' })" - ps: $env:QT_SUFFIX="$(if ($env:PLATFORM -eq 'x64') { '_64' } else { '' })" - - cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_PREFIX_PATH=c:/Qt/5.9.5/msvc2015%QT_SUFFIX%;c:/tools/vcpkg/installed/%PLATFORM%-windows -DCMAKE_GENERATOR_PLATFORM="%CMAKE_PLATFORM%" .. + - cmake -DUSE_COMPILE_CACHE=ON -DCACHE_TOOL=%APPVEYOR_BUILD_FOLDER%/clcache.4.1.0/clcache-4.1.0/clcache.exe -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_PREFIX_PATH=c:/Qt/5.9.5/msvc2015%QT_SUFFIX%;c:/tools/vcpkg/installed/%PLATFORM%-windows -DCMAKE_GENERATOR_PLATFORM="%CMAKE_PLATFORM%" .. - cmake --build . -- /maxcpucount:4 - cmake --build . --target tests cache: diff --git a/CMakeLists.txt b/CMakeLists.txt index b303ee40d4a..5f68e97e741 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -546,17 +546,7 @@ IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") ENDIF() # 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() +include(CompileCache) # make sub-directories ADD_SUBDIRECTORY(cmake) diff --git a/cmake/modules/CompileCache.cmake b/cmake/modules/CompileCache.cmake new file mode 100644 index 00000000000..ed4622bd921 --- /dev/null +++ b/cmake/modules/CompileCache.cmake @@ -0,0 +1,25 @@ +option(USE_COMPILE_CACHE "Use ccache or clcache for compilation" OFF) + +# Compatibility for old option name +if(USE_CCACHE) + set(USE_COMPILE_CACHE ON) +endif() + +if(USE_COMPILE_CACHE) + if(MSVC) + set(CACHE_TOOL_NAME clcache) + elseif(CMAKE_CXX_COMPILER_ID MATCHES "(GNU|AppleClang|Clang)") + set(CACHE_TOOL_NAME ccache) + else() + message(WARNING "Compile cache only available with MSVC or GNU") + endif() + + find_program(CACHE_TOOL ${CACHE_TOOL_NAME}) + if (CACHE_TOOL) + message(STATUS "Using ${CACHE_TOOL} found for caching") + set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CACHE_TOOL}) + set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ${CACHE_TOOL}) + else() + message(WARNING "USE_COMPILE_CACHE enabled, but no ${CACHE_TOOL_NAME} found") + endif() +endif()