backend/ninja: stop adding random attributes to BuildTargets

Instead of storing the generated header cache in the Target, store it in
the NinjaBackend, as it really is just data for the NinjaBackend to use.
pull/13493/head
Dylan Baker 7 months ago
parent 03a8f35031
commit a51be6b1c7
  1. 8
      mesonbuild/backend/ninjabackend.py
  2. 3
      mesonbuild/build.py

@ -503,6 +503,7 @@ class NinjaBackend(backends.Backend):
self.rust_crates: T.Dict[str, RustCrate] = {} self.rust_crates: T.Dict[str, RustCrate] = {}
self.implicit_meson_outs: T.List[str] = [] self.implicit_meson_outs: T.List[str] = []
self._uses_dyndeps = False self._uses_dyndeps = False
self._generated_header_cache: T.Dict[str, T.List[FileOrString]] = {}
# nvcc chokes on thin archives: # nvcc chokes on thin archives:
# nvlink fatal : Could not open input file 'libfoo.a.p' # nvlink fatal : Could not open input file 'libfoo.a.p'
# nvlink fatal : elfLink internal error # nvlink fatal : elfLink internal error
@ -738,8 +739,9 @@ class NinjaBackend(backends.Backend):
# Get all generated headers. Any source file might need them so # Get all generated headers. Any source file might need them so
# we need to add an order dependency to them. # we need to add an order dependency to them.
def get_generated_headers(self, target: build.BuildTarget) -> T.List[FileOrString]: def get_generated_headers(self, target: build.BuildTarget) -> T.List[FileOrString]:
if hasattr(target, 'cached_generated_headers'): tid = target.get_id()
return target.cached_generated_headers if tid in self._generated_header_cache:
return self._generated_header_cache[tid]
header_deps: T.List[FileOrString] = [] header_deps: T.List[FileOrString] = []
# XXX: Why don't we add deps to CustomTarget headers here? # XXX: Why don't we add deps to CustomTarget headers here?
for genlist in target.get_generated_sources(): for genlist in target.get_generated_sources():
@ -757,7 +759,7 @@ class NinjaBackend(backends.Backend):
header_deps += self.get_generated_headers(dep) header_deps += self.get_generated_headers(dep)
if isinstance(target, build.CompileTarget): if isinstance(target, build.CompileTarget):
header_deps.extend(target.get_generated_headers()) header_deps.extend(target.get_generated_headers())
target.cached_generated_headers = header_deps self._generated_header_cache[tid] = header_deps
return header_deps return header_deps
def get_target_generated_sources(self, target: build.BuildTarget) -> T.MutableMapping[str, File]: def get_target_generated_sources(self, target: build.BuildTarget) -> T.MutableMapping[str, File]:

@ -721,9 +721,6 @@ class BuildTarget(Target):
('cpp', 'cuda'), ('cpp', 'cuda'),
]) ])
# This is used by the backend to cache complex computation.
cached_generated_headers: T.Optional[T.List[FileOrString]]
def __init__( def __init__(
self, self,
name: str, name: str,

Loading…
Cancel
Save