diff --git a/.gitignore b/.gitignore index dc20ac1..d543268 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,5 @@ compile_commands.json CTestTestfile.cmake .cmake build.ninja +ccahe_cc_launcher.sh +ccahe_cxx_launcher.sh diff --git a/ccache.cmake b/ccache.cmake index 2e4154e..579052b 100644 --- a/ccache.cmake +++ b/ccache.cmake @@ -21,17 +21,21 @@ if(CCACHE_PROGRAM) set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "${CCACHE_PROGRAM}") # Less useful to do it for linking, see edit2 if(CMAKE_GENERATOR STREQUAL "Xcode") + + set(CC_LAUNCHER ${CMAKE_CURRENT_LIST_DIR}/ccahe_cc_launcher.sh) + set(CXX_LAUNCHER ${CMAKE_CURRENT_LIST_DIR}/ccahe_cxx_launcher.sh) + + configure_file("${CC_LAUNCHER}.in" "${CC_LAUNCHER}") + configure_file("${CXX_LAUNCHER}.in" "${CXX_LAUNCHER}") + # Set Xcode project attributes to route compilation and linking # through our scripts - set(CMAKE_XCODE_ATTRIBUTE_CC "${CCACHE_PROGRAM} ${CMAKE_C_COMPILER}" CACHE INTERNAL "override CMAKE_XCODE_ATTRIBUTE_CC" ) - set(CMAKE_XCODE_ATTRIBUTE_CXX "${CCACHE_PROGRAM} ${CMAKE_CXX_COMPILER}" CACHE INTERNAL "override CMAKE_XCODE_ATTRIBUTE_CC") - set(CMAKE_XCODE_ATTRIBUTE_LD "${CCACHE_PROGRAM} ${CMAKE_LD_COMPILER}" CACHE INTERNAL "override CMAKE_XCODE_ATTRIBUTE_CC") - set(CMAKE_XCODE_ATTRIBUTE_LDPLUSPLUS "${CCACHE_PROGRAM} ${CMAKE_LDPLUSPLUS_COMPILER}" CACHE INTERNAL "override CMAKE_XCODE_ATTRIBUTE_CC") + set(CMAKE_XCODE_ATTRIBUTE_CC ${CC_LAUNCHER} CACHE INTERNAL "override CMAKE_XCODE_ATTRIBUTE_CC" ) + set(CMAKE_XCODE_ATTRIBUTE_CXX ${CXX_LAUNCHER} CACHE INTERNAL "override CMAKE_XCODE_ATTRIBUTE_CC") message("CMAKE_XCODE_ATTRIBUTE_CC = ${CMAKE_XCODE_ATTRIBUTE_CC}") message("CMAKE_XCODE_ATTRIBUTE_CXX = ${CMAKE_XCODE_ATTRIBUTE_CXX}") - message("CMAKE_XCODE_ATTRIBUTE_LD = ${CMAKE_XCODE_ATTRIBUTE_LD}") - message("CMAKE_XCODE_ATTRIBUTE_LDPLUSPLUS = ${CMAKE_XCODE_ATTRIBUTE_LDPLUSPLUS}") + endif() endif() diff --git a/ccahe_cc_launcher.sh.in b/ccahe_cc_launcher.sh.in new file mode 100644 index 0000000..de66b55 --- /dev/null +++ b/ccahe_cc_launcher.sh.in @@ -0,0 +1,11 @@ +#!/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 + +${CCCACHE_EXPORTS} + +exec "${CCACHE_PROGRAM}" "${CMAKE_C_COMPILER}" "$@" diff --git a/ccahe_cxx_launcher.sh.in b/ccahe_cxx_launcher.sh.in new file mode 100644 index 0000000..a32fc5a --- /dev/null +++ b/ccahe_cxx_launcher.sh.in @@ -0,0 +1,11 @@ +#!/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 + +${CCCACHE_EXPORTS} + +exec "${CCACHE_PROGRAM}" "${CMAKE_CXX_COMPILER}" "$@"