diff --git a/README.md b/README.md index ba1626045..f094fc8fe 100644 --- a/README.md +++ b/README.md @@ -172,6 +172,9 @@ cmake.build-type = "Release" # The source directory to use when building the project. cmake.source-dir = "." +# CMake cache file to be loaded. +cmake.cache-file = "" + # The versions of Ninja to allow. ninja.version = ">=1.5" diff --git a/docs/reference/configs.md b/docs/reference/configs.md index 8c6e8b857..73b14729d 100644 --- a/docs/reference/configs.md +++ b/docs/reference/configs.md @@ -185,6 +185,13 @@ print(mk_skbuild_docs()) Custom values can also be used. ``` +```{eval-rst} +.. confval:: cmake.cache-file + :type: ``Path`` + + CMake cache file to be loaded. +``` + ```{eval-rst} .. confval:: cmake.define :type: ``EnvVar`` diff --git a/src/scikit_build_core/builder/builder.py b/src/scikit_build_core/builder/builder.py index dde36ddab..27b9bad37 100644 --- a/src/scikit_build_core/builder/builder.py +++ b/src/scikit_build_core/builder/builder.py @@ -281,6 +281,9 @@ def configure( cache_config.update(cache_entries) self.config.init_cache(cache_config) + cache_file_args = [] + if self.settings.cmake.cache_file: + cache_file_args.append(f"-C{self.settings.cmake.cache_file}") if sys.platform.startswith("darwin"): # Cross-compile support for macOS - respect ARCHFLAGS if set @@ -293,7 +296,11 @@ def configure( self.config.configure( defines=cmake_defines, - cmake_args=[*self.get_cmake_args(), *configure_args], + cmake_args=[ + *cache_file_args, + *self.get_cmake_args(), + *configure_args, + ], ) def build(self, build_args: Sequence[str]) -> None: diff --git a/src/scikit_build_core/resources/scikit-build.schema.json b/src/scikit_build_core/resources/scikit-build.schema.json index 5065b4153..b59337133 100644 --- a/src/scikit_build_core/resources/scikit-build.schema.json +++ b/src/scikit_build_core/resources/scikit-build.schema.json @@ -102,6 +102,10 @@ }, "description": "DEPRECATED in 0.10; use build.targets instead.", "deprecated": true + }, + "cache-file": { + "type": "string", + "description": "CMake cache file to be loaded." } } }, diff --git a/src/scikit_build_core/settings/skbuild_model.py b/src/scikit_build_core/settings/skbuild_model.py index a83abd2f8..c7771240a 100644 --- a/src/scikit_build_core/settings/skbuild_model.py +++ b/src/scikit_build_core/settings/skbuild_model.py @@ -133,6 +133,11 @@ class CMakeSettings: DEPRECATED in 0.10; use build.targets instead. """ + cache_file: Optional[Path] = None + """ + CMake cache file to be loaded. + """ + @dataclasses.dataclass class SearchSettings: