mirror of
https://github.com/XRPLF/rippled.git
synced 2026-02-28 09:42:32 +00:00
51 lines
2.0 KiB
CMake
51 lines
2.0 KiB
CMake
find_program(CCACHE_PATH "ccache")
|
|
if (NOT CCACHE_PATH)
|
|
return()
|
|
endif ()
|
|
|
|
# For Linux and macOS we can use the ccache binary directly.
|
|
if (NOT MSVC)
|
|
set(CMAKE_C_COMPILER_LAUNCHER "${CCACHE_PATH}")
|
|
set(CMAKE_CXX_COMPILER_LAUNCHER "${CCACHE_PATH}")
|
|
message(STATUS "Found ccache: ${CCACHE_PATH}")
|
|
return()
|
|
endif ()
|
|
|
|
# For Windows more effort is required. The code below is a modified version of
|
|
# https://github.com/ccache/ccache/wiki/MS-Visual-Studio#usage-with-cmake.
|
|
if ("${CCACHE_PATH}" MATCHES "chocolatey")
|
|
message(DEBUG "Ccache path: ${CCACHE_PATH}")
|
|
# Chocolatey uses a shim executable that we cannot use directly, in which case we have to find the executable it
|
|
# points to. If we cannot find the target executable then we cannot use ccache.
|
|
find_program(BASH_PATH "bash")
|
|
if (NOT BASH_PATH)
|
|
message(WARNING "Could not find bash.")
|
|
return()
|
|
endif ()
|
|
|
|
execute_process(COMMAND bash -c
|
|
"export LC_ALL='en_US.UTF-8'; ${CCACHE_PATH} --shimgen-noop | grep -oP 'path to executable: \\K.+' | head -c -1"
|
|
OUTPUT_VARIABLE CCACHE_PATH)
|
|
|
|
if (NOT CCACHE_PATH)
|
|
message(WARNING "Could not find ccache target.")
|
|
return()
|
|
endif ()
|
|
file(TO_CMAKE_PATH "${CCACHE_PATH}" CCACHE_PATH)
|
|
endif ()
|
|
message(STATUS "Found ccache: ${CCACHE_PATH}")
|
|
|
|
# Tell cmake to use ccache for compiling with Visual Studio.
|
|
file(COPY_FILE ${CCACHE_PATH} ${CMAKE_BINARY_DIR}/cl.exe ONLY_IF_DIFFERENT)
|
|
set(CMAKE_VS_GLOBALS "CLToolExe=cl.exe" "CLToolPath=${CMAKE_BINARY_DIR}" "TrackFileAccess=false"
|
|
"UseMultiToolTask=true")
|
|
|
|
# By default Visual Studio generators will use /Zi to capture debug information, which is not compatible with ccache, so
|
|
# tell it to use /Z7 instead.
|
|
if (MSVC)
|
|
foreach (var_ CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE CMAKE_CXX_FLAGS_DEBUG
|
|
CMAKE_CXX_FLAGS_RELEASE)
|
|
string(REPLACE "/Zi" "/Z7" ${var_} "${${var_}}")
|
|
endforeach ()
|
|
endif ()
|