forked from ccache/ccache
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
5796e9b
commit c47e684
Showing
4 changed files
with
104 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
# Note: Compiling ccache via ccache is fine, because this uses a stable version which | ||
# is installed on the system. | ||
|
||
|
||
# Calls `message(VERBOSE msg)` if and only if VERBOSE is available (since CMake 3.15). | ||
# Call CMake with --loglevel=VERBOSE to view those messages. | ||
function(message_verbose msg) | ||
if(NOT ${CMAKE_VERSION} VERSION_LESS "3.15") | ||
message(VERBOSE ${msg}) | ||
endif() | ||
endfunction() | ||
|
||
# Modified version of Craig Scott's "Professional CMake: A Practical Guide", 8th Edition | ||
function(use_ccache) | ||
if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) | ||
message(WARNING "use_ccache() disabled, as it is not called from the project top level") | ||
return() | ||
endif() | ||
|
||
find_program(CCACHE_PROGRAM ccache) | ||
if(NOT CCACHE_PROGRAM) | ||
message_verbose("Ccache program not found, not enabling ccache for faster recompilation") | ||
return() | ||
endif() | ||
|
||
message_verbose("Ccache enabled for faster recompilation") | ||
|
||
# This will override any config and environment settings. | ||
# Worst case it's overriding better suited user defined values. | ||
set(ccacheEnv | ||
# Another option would be CMAKE_BINARY_DIR, however currently only one basedir is supported. | ||
CCACHE_BASEDIR=${CMAKE_SOURCE_DIR} | ||
|
||
# In case of very old ccache versions (pre 3.3) | ||
CCACHE_CPP2=true | ||
|
||
# This has been turned on by default in ccache 4.0 | ||
# CCACHE_COMPRESS=1 | ||
) | ||
|
||
if(CMAKE_GENERATOR MATCHES "Ninja|Makefiles") | ||
foreach(lang IN ITEMS C CXX OBJC OBJCXX CUDA) | ||
set(CMAKE_${lang}_COMPILER_LAUNCHER | ||
${CMAKE_COMMAND} -E env ${ccacheEnv} ${CCACHE_PROGRAM} | ||
PARENT_SCOPE) | ||
endforeach() | ||
elseif(CMAKE_GENERATOR STREQUAL Xcode) | ||
foreach(lang IN ITEMS C CXX) | ||
set(launcher ${CMAKE_BINARY_DIR}/launch-${lang}) | ||
file(WRITE ${launcher} "#!/bin/bash\n\n") | ||
foreach(keyVal IN LISTS ccacheEnv) | ||
file(APPEND ${launcher} "export ${keyVal}\n") | ||
endforeach() | ||
file(APPEND ${launcher} | ||
"exec \"${CCACHE_PROGRAM}\" \"${CMAKE_${lang}_COMPILER}\" \"$@\"\n") | ||
execute_process(COMMAND chmod a+rx ${launcher}) | ||
endforeach() | ||
set(CMAKE_XCODE_ATTRIBUTE_CC ${CMAKE_BINARY_DIR}/launch-C PARENT_SCOPE) | ||
set(CMAKE_XCODE_ATTRIBUTE_CXX ${CMAKE_BINARY_DIR}/launch-CXX PARENT_SCOPE) | ||
set(CMAKE_XCODE_ATTRIBUTE_LD ${CMAKE_BINARY_DIR}/launch-C PARENT_SCOPE) | ||
set(CMAKE_XCODE_ATTRIBUTE_LDPLUSPLUS ${CMAKE_BINARY_DIR}/launch-CXX PARENT_SCOPE) | ||
endif() | ||
endfunction() | ||
|
||
option(USE_CCACHE "Use ccache to speed up recompilation time" TRUE) | ||
if(USE_CCACHE) | ||
use_ccache() | ||
endif() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
# Calls `message(VERBOSE msg)` if and only if VERBOSE is available (since CMake 3.15). | ||
# Call CMake with --loglevel=VERBOSE to view those messages. | ||
function(message_verbose msg) | ||
if(NOT ${CMAKE_VERSION} VERSION_LESS "3.15") | ||
message(VERBOSE ${msg}) | ||
endif() | ||
endfunction() | ||
|
||
function(use_fastest_linker) | ||
if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) | ||
message(WARNING "use_fastest_linker() disabled, as it is not called at the project top level") | ||
return() | ||
endif() | ||
|
||
find_program(HAS_LD_LLD ld.lld) | ||
if(HAS_LD_LLD) | ||
link_libraries(-fuse-ld=lld) | ||
message_verbose("Using lld linker for faster linking") | ||
else() | ||
find_program(HAS_LD_GOLD ld.gold) | ||
if(HAS_LD_GOLD) | ||
link_libraries(-fuse-ld=gold) | ||
message_verbose("Using gold linker for faster linking") | ||
else() | ||
message_verbose("Using default linker") | ||
endif() | ||
endif() | ||
endfunction() | ||
|
||
option(USE_FASTER_LINKER "Use the lld or gold linker instead of the default for faster linking" TRUE) | ||
if(USE_FASTER_LINKER) | ||
use_fastest_linker() | ||
endif() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters