@@ -252,6 +252,90 @@ commands:
252
252
paths :
253
253
- ~/.ccache
254
254
255
+ setup_sccache :
256
+ steps :
257
+ - run :
258
+ name : Create CMake files checksum
259
+ command : |
260
+ Get-ChildItem -Path . -Filter "CMakeLists.txt" -Recurse | Get-Content | Out-File -FilePath C:\Users\circleci\all-cmake-files.txt -Encoding UTF8
261
+ shell : powershell.exe
262
+ - restore_cache :
263
+ keys :
264
+ - sccache-v1-{{ arch }}-{{ .Branch }}-{{ checksum "C:\\Users\\circleci\\all-cmake-files.txt" }}
265
+ - sccache-v1-{{ arch }}-{{ .Branch }}-
266
+ - sccache-v1-{{ arch }}-
267
+ - run :
268
+ name : Install and configure sccache
269
+ command : |
270
+ # Check if sccache is already installed
271
+ $sccachePath = Get-Command sccache -ErrorAction SilentlyContinue
272
+ if (-not $sccachePath) {
273
+ Write-Host "Installing sccache..."
274
+ # Download sccache
275
+ $sccacheVersion = "v0.8.2"
276
+ $sccacheUrl = "https://github.com/mozilla/sccache/releases/download/$sccacheVersion/sccache-$sccacheVersion-x86_64-pc-windows-msvc.tar.gz"
277
+ Invoke-WebRequest -Uri $sccacheUrl -OutFile sccache.tar.gz -UserAgent ""
278
+
279
+ # Extract sccache
280
+ tar -xf sccache.tar.gz
281
+ $sccacheDir = Get-ChildItem -Directory -Filter "sccache-*" | Select-Object -First 1
282
+ Move-Item "$sccacheDir\sccache.exe" "C:\Windows\System32\"
283
+ Remove-Item sccache.tar.gz
284
+ Remove-Item -Recurse $sccacheDir
285
+ }
286
+
287
+ # Check if Ninja is already installed
288
+ $ninjaPath = Get-Command ninja -ErrorAction SilentlyContinue
289
+ if (-not $ninjaPath) {
290
+ Write-Host "Installing Ninja..."
291
+ # Download Ninja
292
+ $ninjaVersion = "v1.11.1"
293
+ $ninjaUrl = "https://github.com/ninja-build/ninja/releases/download/$ninjaVersion/ninja-win.zip"
294
+ Invoke-WebRequest -Uri $ninjaUrl -OutFile ninja.zip -UserAgent ""
295
+
296
+ # Extract Ninja
297
+ Expand-Archive -Path ninja.zip -DestinationPath ninja
298
+ Move-Item "ninja\ninja.exe" "C:\Windows\System32\"
299
+ Remove-Item ninja.zip
300
+ Remove-Item -Recurse ninja
301
+ }
302
+
303
+ # Configure sccache
304
+ $env:SCCACHE_CACHE_SIZE = "2G"
305
+ $env:SCCACHE_DIR = "C:\Users\circleci\sccache"
306
+ [Environment]::SetEnvironmentVariable("SCCACHE_CACHE_SIZE", "2G", "Machine")
307
+ [Environment]::SetEnvironmentVariable("SCCACHE_DIR", "C:\Users\circleci\sccache", "Machine")
308
+
309
+ # Create sccache directory if it doesn't exist
310
+ if (-not (Test-Path "C:\Users\circleci\sccache")) {
311
+ New-Item -ItemType Directory -Path "C:\Users\circleci\sccache" -Force | Out-Null
312
+ }
313
+
314
+ # Start sccache server and show initial stats
315
+ sccache --stop-server | Out-Null
316
+ sccache --start-server
317
+ Write-Host "sccache initial stats:"
318
+ sccache --show-stats
319
+ shell : powershell.exe
320
+
321
+ finalize_sccache :
322
+ steps :
323
+ - run :
324
+ name : Show sccache stats
325
+ command : |
326
+ $sccachePath = Get-Command sccache -ErrorAction SilentlyContinue
327
+ if ($sccachePath) {
328
+ Write-Host "sccache final stats:"
329
+ sccache --show-stats
330
+ } else {
331
+ Write-Host "sccache not available"
332
+ }
333
+ shell : powershell.exe
334
+ - save_cache :
335
+ key : sccache-v1-{{ arch }}-{{ .Branch }}-{{ checksum "C:\\Users\\circleci\\all-cmake-files.txt" }}
336
+ paths :
337
+ - C:\Users\circleci\sccache
338
+
255
339
setup_prerelease_commit_hash :
256
340
steps :
257
341
- run :
@@ -1736,10 +1820,12 @@ jobs:
1736
1820
key : dependencies-win-{{ arch }}-{{ checksum "scripts/install_deps.ps1" }}
1737
1821
paths :
1738
1822
- .\deps
1823
+ - setup_sccache
1739
1824
- run :
1740
1825
name : " Building solidity"
1741
1826
command : .circleci/build_win.ps1
1742
1827
shell : powershell.exe
1828
+ - finalize_sccache
1743
1829
- run :
1744
1830
name : " Run solc.exe to make sure build was successful."
1745
1831
command : .\build\solc\Release\solc.exe --version
0 commit comments