Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Hill <theothermatt>2020-12-21 08:17:35 +0300
committerAnkit Meel <ankitjmeel@gmail.com>2020-12-21 08:17:35 +0300
commitfdb7623e098fe431397815fc67667c5904074913 (patch)
tree3ce2e718b5e9fee8f330c85925b88d6013226580 /build_files
parent84cc00f3b68e12209e000008f992fad3ac48f757 (diff)
Unix/macOS: support building with Ccache
This adds an option (WITH_COMPILER_CCACHE) to build using Ccache if it's found. Makefiles-based, Ninja-based and Xcode generators are supported. Pass `-DWITH_COMPILER_CCACHE=ON` to cmake to enable Ccache. Utility option in GNUmakefile is also added: for e.g., `make ninja ccache`. Reviewed By: brecht, ankitm Differential Revision: https://developer.blender.org/D9665
Diffstat (limited to 'build_files')
-rw-r--r--build_files/cmake/platform/platform_apple.cmake14
-rw-r--r--build_files/cmake/platform/platform_apple_xcode.cmake29
-rw-r--r--build_files/cmake/platform/platform_unix.cmake12
3 files changed, 55 insertions, 0 deletions
diff --git a/build_files/cmake/platform/platform_apple.cmake b/build_files/cmake/platform/platform_apple.cmake
index 6baa2f3d855..31da5292eaf 100644
--- a/build_files/cmake/platform/platform_apple.cmake
+++ b/build_files/cmake/platform/platform_apple.cmake
@@ -470,3 +470,17 @@ set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
set(CMAKE_C_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")
set(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>")
+
+if(WITH_COMPILER_CCACHE)
+ if(NOT CMAKE_GENERATOR STREQUAL "Xcode")
+ find_program(CCACHE_PROGRAM ccache)
+ if(CCACHE_PROGRAM)
+ # Makefiles and ninja
+ set(CMAKE_C_COMPILER_LAUNCHER "${CCACHE_PROGRAM}" CACHE STRING "" FORCE)
+ set(CMAKE_CXX_COMPILER_LAUNCHER "${CCACHE_PROGRAM}" CACHE STRING "" FORCE)
+ else()
+ message(WARNING "Ccache NOT found, disabling WITH_COMPILER_CCACHE")
+ set(WITH_COMPILER_CCACHE OFF)
+ endif()
+ endif()
+endif()
diff --git a/build_files/cmake/platform/platform_apple_xcode.cmake b/build_files/cmake/platform/platform_apple_xcode.cmake
index e4b804fc4ea..f12de540353 100644
--- a/build_files/cmake/platform/platform_apple_xcode.cmake
+++ b/build_files/cmake/platform/platform_apple_xcode.cmake
@@ -154,3 +154,32 @@ if(NOT ${CMAKE_GENERATOR} MATCHES "Xcode")
string(APPEND CMAKE_CXX_FLAGS " -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}")
add_definitions("-DMACOSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}")
endif()
+
+if(WITH_COMPILER_CCACHE)
+ if(CMAKE_GENERATOR STREQUAL "Xcode")
+ find_program(CCACHE_PROGRAM ccache)
+ if(CCACHE_PROGRAM)
+ get_filename_component(ccompiler "${CMAKE_C_COMPILER}" NAME)
+ get_filename_component(cxxcompiler "${CMAKE_CXX_COMPILER}" NAME)
+ # Ccache can figure out which compiler to use if it's invoked from
+ # a symlink with the name of the compiler.
+ # https://ccache.dev/manual/4.1.html#_run_modes
+ set(_fake_compiler_dir "${CMAKE_BINARY_DIR}/ccache")
+ execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${_fake_compiler_dir})
+ set(_fake_C_COMPILER "${_fake_compiler_dir}/${ccompiler}")
+ set(_fake_CXX_COMPILER "${_fake_compiler_dir}/${cxxcompiler}")
+ execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink "${CCACHE_PROGRAM}" ${_fake_C_COMPILER})
+ execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink "${CCACHE_PROGRAM}" ${_fake_CXX_COMPILER})
+ set(CMAKE_XCODE_ATTRIBUTE_CC ${_fake_C_COMPILER} CACHE STRING "" FORCE)
+ set(CMAKE_XCODE_ATTRIBUTE_CXX ${_fake_CXX_COMPILER} CACHE STRING "" FORCE)
+ set(CMAKE_XCODE_ATTRIBUTE_LD ${_fake_C_COMPILER} CACHE STRING "" FORCE)
+ set(CMAKE_XCODE_ATTRIBUTE_LDPLUSPLUS ${_fake_CXX_COMPILER} CACHE STRING "" FORCE)
+ unset(_fake_compiler_dir)
+ unset(_fake_C_COMPILER)
+ unset(_fake_CXX_COMPILER)
+ else()
+ message(WARNING "Ccache NOT found, disabling WITH_COMPILER_CCACHE")
+ set(WITH_COMPILER_CCACHE OFF)
+ endif()
+ endif()
+endif()
diff --git a/build_files/cmake/platform/platform_unix.cmake b/build_files/cmake/platform/platform_unix.cmake
index c4d1383c767..b304e89d74f 100644
--- a/build_files/cmake/platform/platform_unix.cmake
+++ b/build_files/cmake/platform/platform_unix.cmake
@@ -684,3 +684,15 @@ set(PLATFORM_LINKFLAGS
if(WITH_INSTALL_PORTABLE)
string(APPEND CMAKE_EXE_LINKER_FLAGS " -no-pie")
endif()
+
+if(WITH_COMPILER_CCACHE)
+ find_program(CCACHE_PROGRAM ccache)
+ if(CCACHE_PROGRAM)
+ # Makefiles and ninja
+ set(CMAKE_C_COMPILER_LAUNCHER "${CCACHE_PROGRAM}" CACHE STRING "" FORCE)
+ set(CMAKE_CXX_COMPILER_LAUNCHER "${CCACHE_PROGRAM}" CACHE STRING "" FORCE)
+ else()
+ message(WARNING "Ccache NOT found, disabling WITH_COMPILER_CCACHE")
+ set(WITH_COMPILER_CCACHE OFF)
+ endif()
+endif()