aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2021-10-22 16:59:34 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2021-10-22 16:59:34 +0300
commit8cf4f58ebf944103c31e4aa8a467857b79c3dfdc (patch)
tree538472ecba94c9824ce8c645fd1db03edca5fd99
parent034b3a92d97bf688be2aba5e5acfcc1e774b83e3 (diff)
downloadmeson-sccache.zip
meson-sccache.tar.gz
meson-sccache.tar.bz2
Add sccache support.sccache
-rw-r--r--mesonbuild/compilers/detect.py7
-rw-r--r--mesonbuild/envconfig.py11
2 files changed, 17 insertions, 1 deletions
diff --git a/mesonbuild/compilers/detect.py b/mesonbuild/compilers/detect.py
index 5e0710b..ffb0063 100644
--- a/mesonbuild/compilers/detect.py
+++ b/mesonbuild/compilers/detect.py
@@ -554,8 +554,13 @@ def _detect_c_or_cpp_compiler(env: 'Environment', lang: str, for_machine: Machin
raise EnvironmentException(m)
cls = VisualStudioCCompiler if lang == 'c' else VisualStudioCPPCompiler
linker = guess_win_linker(env, ['link'], cls, for_machine)
+ # As of this writing, CCache does not support MSVC but sccache does.
+ if 'sccache' in ccache:
+ final_compiler = ccache + compiler
+ else:
+ final_compiler = compiler
return cls(
- compiler, version, for_machine, is_cross, info, target,
+ final_compiler, version, for_machine, is_cross, info, target,
exe_wrap, full_version=cl_signature, linker=linker)
if 'PGI Compilers' in out:
cls = PGICCompiler if lang == 'c' else PGICPPCompiler
diff --git a/mesonbuild/envconfig.py b/mesonbuild/envconfig.py
index 307aac3..2a112df 100644
--- a/mesonbuild/envconfig.py
+++ b/mesonbuild/envconfig.py
@@ -385,6 +385,14 @@ class BinaryTable:
return []
return ['ccache']
+ @staticmethod
+ def detect_sccache() -> T.List[str]:
+ try:
+ subprocess.check_call(['sccache', '--version'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ except (OSError, subprocess.CalledProcessError):
+ return []
+ return ['sccache']
+
@classmethod
def parse_entry(cls, entry: T.Union[str, T.List[str]]) -> T.Tuple[T.List[str], T.List[str]]:
compiler = mesonlib.stringlistify(entry)
@@ -392,6 +400,9 @@ class BinaryTable:
if compiler[0] == 'ccache':
compiler = compiler[1:]
ccache = cls.detect_ccache()
+ elif compiler[0] == 'sccache':
+ compiler = compiler[1:]
+ ccache = cls.detect_sccache()
else:
ccache = []
# Return value has to be a list of compiler 'choices'