From 623055b04589e0f50f70d4b4cb74e57c14ed3813 Mon Sep 17 00:00:00 2001
From: Romain Thomas <me@romainthomas.fr>
Date: Sat, 12 Dec 2020 08:31:52 +0100
Subject: [PATCH] Setup sccache

---
 .appveyor.yml  | 11 +++++++++++
 CMakeLists.txt | 23 ++++++++++++++++++-----
 2 files changed, 29 insertions(+), 5 deletions(-)

diff --git a/.appveyor.yml b/.appveyor.yml
index af4456b..d1d9a1d 100644
--- a/.appveyor.yml
+++ b/.appveyor.yml
@@ -13,6 +13,9 @@ environment:
     secure: TT7SXISIifq2/tf02n2ATgPj+Ky4Cjl3Fg44BAfyI4yRa4i87UAQIx5EFeV63+Xv2rhcU7JcMgl+An7QBrV6ofuQ9jxbuw+Gd1GqcCrAIyY=
  LIEF_AUTOMATIC_BUILDS_IV:
     secure: /S6Vbt3vEisoC81siFbkqOXQeVnwxLZZPMYp1r79G7h+HFjLlWUZSidxxpsAgHNE
+ SCCACHE_CACHE_SIZE: "250M"
+ SCCACHE_DIR: C:\Users\appveyor\AppData\Local\Mozilla\sccache
+ SCCACHE_ERROR_LOG: C:\projects\sccache.log
  matrix:
     # Python 3.6
     - PYTHON_VERSION:   "3.6"
@@ -58,7 +61,12 @@ environment:
       PYTHON64_BINARY:  "C:\\Python39-x64\\python.exe"
       PYTHON64_LIBRARY: "C:\\Python39-x64\\libs\\python39.lib"
 
+cache:
+  - '%SCCACHE_DIR%'
+
 install:
+  - cmd: choco install sccache
+  - cmd: sccache.exe --start-server
   - ps: if ($env:PLATFORM -eq "x64") { $env:CMAKE_ARCH = "x64" }
 
   - ps: if ($env:PLATFORM -eq "x64") { $env:PYTHON_PATH    = $env:PYTHON64_PATH    }
@@ -88,6 +96,9 @@ after_build:
   - ps: Start-Service -Name 'ssh-agent'
   - bash ./.github/deploy.sh
 
+on_finish:
+  - cmd: sccache.exe --stop-server
+
 artifacts:
   - path: 'dist\*.whl'
     name: python-wheel
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 83d8d9d..5265b2c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -41,11 +41,24 @@ include(LIEFCompilerDetection)
 
 # CCACHE
 # ======
-find_program(CCACHE_FOUND ccache)
-message(STATUS "ccache: ${LIEF_USE_CCACHE}")
-if(CCACHE_FOUND AND LIEF_USE_CCACHE)
-  set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
-  set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
+message(STATUS "Caching: ${LIEF_USE_CCACHE}")
+if(LIEF_USE_CCACHE)
+  find_program(CCACHE_FOUND ccache)
+  if(CCACHE_FOUND)
+    set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
+    set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
+    message(STATUS "Found ccache: ${CCACHE_FOUND}")
+  else()
+    find_program(SCCACHE_FOUND sccache)
+    if (SCCACHE_FOUND)
+      set(CMAKE_C_COMPILER_LAUNCHER ${SCCACHE_FOUND})
+      set(CMAKE_CXX_COMPILER_LAUNCHER ${SCCACHE_FOUND})
+      message(STATUS "Found sccache: ${SCCACHE_FOUND}")
+    else()
+      set(LIEF_USE_CCACHE OFF)
+      message(WARNING "Can't find cache solution")
+    endif()
+  endif()
 endif()
 
 # Dependencies