From f2d3fce8756a1bf420d5ab7e943c1250563d0fd5 Mon Sep 17 00:00:00 2001 From: Wolf Vollprecht Date: Thu, 27 Mar 2025 13:59:29 +0100 Subject: [PATCH 1/2] add magic sccache integration for cmake --- crates/pixi-build-cmake/src/build_script.j2 | 15 +++++++++++++++ crates/pixi-build-cmake/src/build_script.rs | 1 + crates/pixi-build-cmake/src/cmake.rs | 8 +++++++- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/crates/pixi-build-cmake/src/build_script.j2 b/crates/pixi-build-cmake/src/build_script.j2 index 7e8e650b..c525072b 100644 --- a/crates/pixi-build-cmake/src/build_script.j2 +++ b/crates/pixi-build-cmake/src/build_script.j2 @@ -1,5 +1,14 @@ ninja --version cmake --version +{% if has_sccache -%} +sccache --version + +{% if build_platform == "windows" -%} +set EXTRA_CMAKE_ARGS=-DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache +{% else -%} +export EXTRA_CMAKE_ARGS="-DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache" +{% endif -%} +{% endif -%} {# Windows #} {% if build_platform == "windows" -%} @@ -10,6 +19,7 @@ if not exist %SRC_DIR%\..\build\CMakeCache.txt ( -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ^ -DBUILD_SHARED_LIBS=ON ^ + %EXTRA_CMAKE_ARGS% ^ {{ extra_args | join(" ") }} ^ -B %SRC_DIR%\..\build ^ -S "{{ source_dir }}" @@ -27,6 +37,7 @@ if [ ! -f "$SRC_DIR/../build/CMakeCache.txt" ]; then -DCMAKE_INSTALL_PREFIX=$PREFIX \ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ -DBUILD_SHARED_LIBS=ON \ + $EXTRA_CMAKE_ARGS \ {{ extra_args | join(" ") }} \ -B $SRC_DIR/../build \ -S "{{ source_dir }}" @@ -37,3 +48,7 @@ cmake --build $SRC_DIR/../build --target install {% if build_platform == "windows" -%} @if errorlevel 1 exit 1 {% endif %} + +{% if has_sccache -%} +sccache --show-stats +{% endif %} diff --git a/crates/pixi-build-cmake/src/build_script.rs b/crates/pixi-build-cmake/src/build_script.rs index 11146e7e..1bbe9b5b 100644 --- a/crates/pixi-build-cmake/src/build_script.rs +++ b/crates/pixi-build-cmake/src/build_script.rs @@ -6,6 +6,7 @@ pub struct BuildScriptContext { pub build_platform: BuildPlatform, pub source_dir: String, pub extra_args: Vec, + pub has_sccache: bool, } #[derive(Serialize)] diff --git a/crates/pixi-build-cmake/src/cmake.rs b/crates/pixi-build-cmake/src/cmake.rs index b8826908..77d67793 100644 --- a/crates/pixi-build-cmake/src/cmake.rs +++ b/crates/pixi-build-cmake/src/cmake.rs @@ -111,7 +111,12 @@ impl CMakeBuildBackend

{ let noarch_type = NoArchType::none(); - let requirements = self.requirements(host_platform, channel_config, variant)?; + let mut requirements = self.requirements(host_platform, channel_config, variant)?; + + let has_sccache = std::env::vars().any(|(key, _)| key.starts_with("SCCACHE")); + if has_sccache { + requirements.build.push(Dependency::Spec("sccache".parse().unwrap())); + } let build_platform = Platform::current(); let build_number = 0; @@ -124,6 +129,7 @@ impl CMakeBuildBackend

{ }, source_dir: self.manifest_root.display().to_string(), extra_args: self.config.extra_args.clone(), + has_sccache, } .render(); From 50b85460c5570bd15d0e991ce926ddb3abe820ac Mon Sep 17 00:00:00 2001 From: Wolf Vollprecht Date: Thu, 27 Mar 2025 14:04:58 +0100 Subject: [PATCH 2/2] fix lint --- crates/pixi-build-cmake/src/cmake.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/crates/pixi-build-cmake/src/cmake.rs b/crates/pixi-build-cmake/src/cmake.rs index 77d67793..d99dd602 100644 --- a/crates/pixi-build-cmake/src/cmake.rs +++ b/crates/pixi-build-cmake/src/cmake.rs @@ -115,7 +115,9 @@ impl CMakeBuildBackend

{ let has_sccache = std::env::vars().any(|(key, _)| key.starts_with("SCCACHE")); if has_sccache { - requirements.build.push(Dependency::Spec("sccache".parse().unwrap())); + requirements + .build + .push(Dependency::Spec("sccache".parse().unwrap())); } let build_platform = Platform::current();