aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmake/Ccache.cmake70
-rw-r--r--docs/source/install.rst5
-rwxr-xr-xtravis/install.sh2
3 files changed, 30 insertions, 47 deletions
diff --git a/cmake/Ccache.cmake b/cmake/Ccache.cmake
index 09e81756..7bc59429 100644
--- a/cmake/Ccache.cmake
+++ b/cmake/Ccache.cmake
@@ -1,66 +1,48 @@
#
-# CMake module to support ccache
-#
-# see https://crascit.com/2016/04/09/using-ccache-with-cmake/
+# CMake module to support ccache (or clcache for MSVC)
#
+# Copyright (c) 2021, Mike Taves <mwtoews at gmail dot com>
+
+cmake_minimum_required(VERSION 3.4)
-find_program(CCACHE_PROGRAM ccache)
-# Note: REQUIRED keyword introduced in CMake 3.18
+find_program(CCACHE_PROGRAM NAMES ccache clcache)
if(CCACHE_PROGRAM)
message(STATUS "Configuring ccache with ${CCACHE_PROGRAM}")
- set(C_LAUNCHER "${CCACHE_PROGRAM}")
- set(CXX_LAUNCHER "${CCACHE_PROGRAM}")
-
- # Set up wrapper scripts
- set(CCACHE_LAUNCH_C ${CMAKE_BINARY_DIR}/ccache-launch-c)
- file(WRITE ${CCACHE_LAUNCH_C} "\
+ if(CMAKE_GENERATOR STREQUAL "Xcode")
+ # see https://crascit.com/2016/04/09/using-ccache-with-cmake/
+ set(C_LAUNCHER "${CCACHE_PROGRAM}")
+ set(CXX_LAUNCHER "${CCACHE_PROGRAM}")
+ set(CCACHE_LAUNCH_C ${CMAKE_BINARY_DIR}/ccache-c)
+ set(CCACHE_LAUNCH_CXX ${CMAKE_BINARY_DIR}/ccache-cxx)
+ file(WRITE "${CCACHE_LAUNCH_C}" "\
#!/bin/sh
-
-# Xcode generator doesn't include the compiler as the
-# first argument, Ninja and Makefiles do. Handle both cases.
-if [ \"$1\" = \"${CMAKE_C_COMPILER}\" ] ; then
- shift
-fi
-
-export CCACHE_CPP2=true
+shift
exec \"${C_LAUNCHER}\" \"${CMAKE_C_COMPILER}\" \"$@\"
")
-
- set(CCACHE_LAUNCH_CXX ${CMAKE_BINARY_DIR}/ccache-launch-cxx)
- file(WRITE ${CCACHE_LAUNCH_CXX} "\
+ file(WRITE "${CCACHE_LAUNCH_CXX}" "\
#!/bin/sh
-
-# Xcode generator doesn't include the compiler as the
-# first argument, Ninja and Makefiles do. Handle both cases.
-if [ \"$1\" = \"${CMAKE_CXX_COMPILER}\" ] ; then
- shift
-fi
-
-export CCACHE_CPP2=true
+shift
exec \"${CXX_LAUNCHER}\" \"${CMAKE_CXX_COMPILER}\" \"$@\"
")
-
- # Note: file(CHMOD) introduced in CMake 3.19
- execute_process(
- COMMAND chmod a+rx
- "${CCACHE_LAUNCH_C}"
- "${CCACHE_LAUNCH_CXX}"
- )
-
- if(CMAKE_GENERATOR STREQUAL "Xcode")
+ # Note: file(CHMOD) introduced in CMake 3.19
+ execute_process(
+ COMMAND chmod a+rx
+ "${CCACHE_LAUNCH_C}"
+ "${CCACHE_LAUNCH_CXX}"
+ )
# Set Xcode project attributes to route compilation and linking
- # through our scripts
+ # through the wrapper scripts
set(CMAKE_XCODE_ATTRIBUTE_CC "${CCACHE_LAUNCH_C}")
set(CMAKE_XCODE_ATTRIBUTE_CXX "${CCACHE_LAUNCH_CXX}")
set(CMAKE_XCODE_ATTRIBUTE_LD "${CCACHE_LAUNCH_C}")
set(CMAKE_XCODE_ATTRIBUTE_LDPLUSPLUS "${CCACHE_LAUNCH_CXX}")
else()
- # Support Unix Makefiles and Ninja
- set(CMAKE_C_COMPILER_LAUNCHER "${CCACHE_LAUNCH_C}")
- set(CMAKE_CXX_COMPILER_LAUNCHER "${CCACHE_LAUNCH_CXX}")
+ # Most other generators (Unix Makefiles, Ninja, etc.)
+ set(CMAKE_C_COMPILER_LAUNCHER "${CCACHE_PROGRAM}")
+ set(CMAKE_CXX_COMPILER_LAUNCHER "${CCACHE_PROGRAM}")
endif()
else()
- message(SEND_ERROR "Ccache requested, but ccache was not found")
+ message(WARNING "Ccache was requested, but no program was not found")
endif()
diff --git a/docs/source/install.rst b/docs/source/install.rst
index d4d202b8..23224e23 100644
--- a/docs/source/install.rst
+++ b/docs/source/install.rst
@@ -467,8 +467,9 @@ All cached entries can be viewed using ``cmake -LAH`` from a build directory.
.. option:: USE_CCACHE=OFF
- Configure CMake to use `ccache <https://ccache.dev/>`_ to build C/C++
- objects.
+ Configure CMake to use `ccache <https://ccache.dev/>`_ (or
+ `clcache <https://github.com/frerich/clcache>`_ for MSVC)
+ to build C/C++ objects.
Building on Windows with vcpkg and Visual Studio 2017 or 2019
diff --git a/travis/install.sh b/travis/install.sh
index 8a9a6f72..916f554d 100755
--- a/travis/install.sh
+++ b/travis/install.sh
@@ -153,7 +153,7 @@ if [ "$BUILD_NAME" != "linux_gcc8" -a "$BUILD_NAME" != "linux_gcc_32bit" ]; then
cd build_cmake
cmake .. -DCMAKE_INSTALL_PREFIX=/tmp/proj_cmake_install -DUSE_CCACHE=${USE_CCACHE}
make >/dev/null
- if [ "$USE_CCACHE" = "ON" ]; then
+ if [ "${USE_CCACHE}" = "ON" ]; then
ccache -s
fi