Merge pull request #26287 from CrystalP/ref-savefilestatejob
[xbmc.git] / cmake / modules / buildtools / FindCCache.cmake
blob04d81e25350868b0f3e2e39a2360ab2fb55efe50
1 #.rst:
2 # FindCCache
3 # ----------
4 # Finds ccache and sets it up as compiler wrapper.
5 # This should ideally be called before the call to project().
7 # See: https://crascit.com/2016/04/09/using-ccache-with-cmake/
9 find_program(CCACHE_PROGRAM ccache)
11 if(CCACHE_PROGRAM)
12   execute_process(COMMAND "${CCACHE_PROGRAM}" --version
13                   OUTPUT_VARIABLE CCACHE_VERSION
14                   OUTPUT_STRIP_TRAILING_WHITESPACE)
15   string(REGEX MATCH "[^\n]* version [^\n]*" CCACHE_VERSION "${CCACHE_VERSION}")
16   string(REGEX REPLACE ".* version (.*)" "\\1" CCACHE_VERSION "${CCACHE_VERSION}")
17 endif()
19 include(FindPackageHandleStandardArgs)
20 find_package_handle_standard_args(CCache REQUIRED_VARS CCACHE_PROGRAM
21                                   VERSION_VAR CCACHE_VERSION)
23 if(CCACHE_FOUND)
24   # Supports Unix Makefiles, Ninja and Xcode
25   set(CMAKE_CXX_COMPILER_LAUNCHER "${CCACHE_PROGRAM}" PARENT_SCOPE)
26   set(CMAKE_C_COMPILER_LAUNCHER "${CCACHE_PROGRAM}" PARENT_SCOPE)
28   file(WRITE "${CMAKE_BINARY_DIR}/launch-c" "#!/bin/sh\nexec \"${CCACHE_PROGRAM}\" \"${CMAKE_C_COMPILER}\" \"$@\"\n")
29   file(WRITE "${CMAKE_BINARY_DIR}/launch-cxx" "#!/bin/sh\nexec \"${CCACHE_PROGRAM}\" \"${CMAKE_CXX_COMPILER}\" \"$@\"\n")
30   execute_process(COMMAND chmod +x "${CMAKE_BINARY_DIR}/launch-c" "${CMAKE_BINARY_DIR}/launch-cxx")
32   set(CMAKE_XCODE_ATTRIBUTE_CC "${CMAKE_BINARY_DIR}/launch-c" PARENT_SCOPE)
33   set(CMAKE_XCODE_ATTRIBUTE_CXX "${CMAKE_BINARY_DIR}/launch-cxx" PARENT_SCOPE)
34   set(CMAKE_XCODE_ATTRIBUTE_LD "${CMAKE_BINARY_DIR}/launch-c" PARENT_SCOPE)
35   set(CMAKE_XCODE_ATTRIBUTE_LDPLUSPLUS "${CMAKE_BINARY_DIR}/launch-cxx" PARENT_SCOPE)
36 endif()
38 mark_as_advanced(CCACHE_PROGRAM)