diff options
author | kickbutt <kickbutt@yandex-team.com> | 2024-01-29 11:27:41 +0300 |
---|---|---|
committer | kickbutt <kickbutt@yandex-team.com> | 2024-01-29 11:56:14 +0300 |
commit | 4b605b17b574e396e4cac8fe2c92ed0841ec5f6f (patch) | |
tree | 692e92958fcefbf539cd7207b01a499adf76d841 | |
parent | 205e9a87fb80f5d30416efeda3e5de61464f0ffc (diff) | |
download | ydb-4b605b17b574e396e4cac8fe2c92ed0841ec5f6f.tar.gz |
Fix bugs in CUDA libs pruning
Чиним две проблемы, обнаруженные опытным путём:
* во-первых, cudart не содержит никакого девайсного кода, поэтому её не имеет смысла прунить
* во-вторых, нам для линковки могут передать несуществующие директории, поэтому делаем код проверок чуть более многословным
-rw-r--r-- | build/scripts/link_exe.py | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/build/scripts/link_exe.py b/build/scripts/link_exe.py index 980ac05d7e..4650315b89 100644 --- a/build/scripts/link_exe.py +++ b/build/scripts/link_exe.py @@ -52,6 +52,11 @@ def prune_cuda_libraries(cmd, prune_arches, nvprune_exe, build_root): _, ver = arch.split('_', 1) return 'compute_{}'.format(ver) + libs_to_prune = set(CUDA_LIBRARIES) + + # does not contain device code, nothing to prune + libs_to_prune.remove('-lcudart_static') + tmp_names_gen = name_generator('cuda_pruned_libs') arch_args = [] @@ -62,10 +67,10 @@ def prune_cuda_libraries(cmd, prune_arches, nvprune_exe, build_root): flags = [] cuda_deps = set() for flag in reversed(cmd): - if flag in CUDA_LIBRARIES: + if flag in libs_to_prune: cuda_deps.add('lib' + flag[2:] + '.a') flag += '_pruned' - elif flag.startswith('-L') and any(f in cuda_deps for f in os.listdir(flag[2:])): + elif flag.startswith('-L') and os.path.exists(flag[2:]) and os.path.isdir(flag[2:]) and any(f in cuda_deps for f in os.listdir(flag[2:])): from_dirpath = flag[2:] from_deps = list(cuda_deps & set(os.listdir(from_dirpath))) |