Skip to content

Commit

Permalink
cuda: disable thin archives when cuda is added through `add_languages…
Browse files Browse the repository at this point in the history
…('cuda')` later
  • Loading branch information
SoapGentoo authored and eli-schwartz committed May 29, 2024
1 parent 8d92487 commit 7f2c6f6
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 8 deletions.
15 changes: 7 additions & 8 deletions mesonbuild/backend/ninjabackend.py
Original file line number Diff line number Diff line change
Expand Up @@ -502,13 +502,12 @@ def __init__(self, build: T.Optional[build.Build], interpreter: T.Optional[Inter
# hence we disable them if 'cuda' is enabled globally. See also
# - https://github.com/mesonbuild/meson/pull/9453
# - https://github.com/mesonbuild/meson/issues/9479#issuecomment-953485040
self._allow_thin_archives = PerMachine[bool](
'cuda' not in self.environment.coredata.compilers.build,
'cuda' not in self.environment.coredata.compilers.host) if self.environment else PerMachine[bool](True, True)
if not self._allow_thin_archives.build:
mlog.debug('cuda enabled globally, disabling thin archives for build machine, since nvcc/nvlink cannot handle thin archives natively')
if not self._allow_thin_archives.host:
mlog.debug('cuda enabled globally, disabling thin archives for host machine, since nvcc/nvlink cannot handle thin archives natively')
self.allow_thin_archives = PerMachine[bool](True, True)
if self.environment:
for for_machine in MachineChoice:
if 'cuda' in self.environment.coredata.compilers[for_machine]:
mlog.debug('cuda enabled globally, disabling thin archives for {}, since nvcc/nvlink cannot handle thin archives natively'.format(for_machine))
self.allow_thin_archives[for_machine] = False

def create_phony_target(self, dummy_outfile: str, rulename: str, phony_infilename: str) -> NinjaBuildElement:
'''
Expand Down Expand Up @@ -3268,7 +3267,7 @@ def get_target_type_link_args(self, target, linker):
if target.import_filename:
commands += linker.gen_import_library_args(self.get_import_filename(target))
elif isinstance(target, build.StaticLibrary):
produce_thin_archive = self._allow_thin_archives[target.for_machine] and not target.should_install()
produce_thin_archive = self.allow_thin_archives[target.for_machine] and not target.should_install()
commands += linker.get_std_link_args(self.environment, produce_thin_archive)
else:
raise RuntimeError('Unknown build target type.')
Expand Down
4 changes: 4 additions & 0 deletions mesonbuild/interpreter/interpreter.py
Original file line number Diff line number Diff line change
Expand Up @@ -1531,6 +1531,10 @@ def add_languages_for(self, args: T.List[str], required: bool, for_machine: Mach
continue
else:
raise
if lang == 'cuda' and hasattr(self.backend, 'allow_thin_archives'):
# see NinjaBackend.__init__() why we need to disable thin archives for cuda
mlog.debug('added cuda as language, disabling thin archives for {}, since nvcc/nvlink cannot handle thin archives natively'.format(for_machine))
self.backend.allow_thin_archives[for_machine] = False
else:
# update new values from commandline, if it applies
self.coredata.process_compiler_options(lang, comp, self.environment, self.subproject)
Expand Down

0 comments on commit 7f2c6f6

Please sign in to comment.