summaryrefslogtreecommitdiff
path: root/mesonbuild/compilers
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2024-11-06 15:41:40 +0100
committerEli Schwartz <eschwartz93@gmail.com>2024-12-29 23:22:14 -0500
commit08a345758a96892f879b487ee12e3b4e66c33439 (patch)
treebe3f91afc11e3e179f8654f22e8b39bb5d9add5d /mesonbuild/compilers
parentf070670e77fe36ece1a89ce00c13419de354b9ce (diff)
downloadmeson-08a345758a96892f879b487ee12e3b4e66c33439.tar.gz
compilers: cache the results of is_source()
is_source() is called almost 900000 times in a QEMU setup. Together with the previously added caching, this basically removes _determine_ext_objs() from the profile when building QEMU. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Eli Schwartz <eschwartz93@gmail.com>
Diffstat (limited to 'mesonbuild/compilers')
-rw-r--r--mesonbuild/compilers/compilers.py12
1 files changed, 8 insertions, 4 deletions
diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py
index 603a3eb48..8788df0be 100644
--- a/mesonbuild/compilers/compilers.py
+++ b/mesonbuild/compilers/compilers.py
@@ -133,11 +133,15 @@ def is_header(fname: 'mesonlib.FileOrString') -> bool:
def is_source_suffix(suffix: str) -> bool:
return suffix in source_suffixes
+@lru_cache(maxsize=None)
+def cached_is_source_by_name(fname: str) -> bool:
+ suffix = fname.split('.')[-1].lower()
+ return is_source_suffix(suffix)
+
def is_source(fname: 'mesonlib.FileOrString') -> bool:
if isinstance(fname, mesonlib.File):
fname = fname.fname
- suffix = fname.split('.')[-1].lower()
- return is_source_suffix(suffix)
+ return cached_is_source_by_name(fname)
def is_assembly(fname: 'mesonlib.FileOrString') -> bool:
if isinstance(fname, mesonlib.File):
@@ -152,14 +156,14 @@ def is_llvm_ir(fname: 'mesonlib.FileOrString') -> bool:
return suffix in llvm_ir_suffixes
@lru_cache(maxsize=None)
-def cached_by_name(fname: 'mesonlib.FileOrString') -> bool:
+def cached_is_object_by_name(fname: str) -> bool:
suffix = fname.split('.')[-1]
return suffix in obj_suffixes
def is_object(fname: 'mesonlib.FileOrString') -> bool:
if isinstance(fname, mesonlib.File):
fname = fname.fname
- return cached_by_name(fname)
+ return cached_is_object_by_name(fname)
def is_library(fname: 'mesonlib.FileOrString') -> bool:
if isinstance(fname, mesonlib.File):