diff --git a/easybuild/easyblocks/l/llvm.py b/easybuild/easyblocks/l/llvm.py index 2143c1d32f2..f6779d4d93b 100644 --- a/easybuild/easyblocks/l/llvm.py +++ b/easybuild/easyblocks/l/llvm.py @@ -76,6 +76,11 @@ X86_64: ['X86'], } +AVAILABLE_OFFLOAD_DLOPEN_PLUGIN_OPTIONS = [ + 'cuda', + 'amdgpu' +] + remove_gcc_dependency_opts = { 'CLANG_DEFAULT_CXX_STDLIB': 'libc++', 'CLANG_DEFAULT_RTLIB': 'compiler-rt', @@ -497,8 +502,18 @@ def _configure_final_build(self): self._cmakeopts['LIBOMP_HWLOC_INSTALL_DIR'] = hwloc_root if 'openmp' in self.final_projects: - if LooseVersion(self.version) >= LooseVersion('19') and self.cfg['build_openmp_offload']: - self.runtimes_cmake_args['LIBOMPTARGET_PLUGINS_TO_BUILD'] = '%s' % '|'.join(self.offload_targets) + if self.cfg['build_openmp_offload']: + # Force dlopen of the GPU libraries at runtime, not using existing libraries + if LooseVersion(self.version) >= LooseVersion('19'): + self.runtimes_cmake_args['LIBOMPTARGET_PLUGINS_TO_BUILD'] = '%s' % '|'.join(self.offload_targets) + dlopen_plugins = set(self.offload_targets) & set(AVAILABLE_OFFLOAD_DLOPEN_PLUGIN_OPTIONS) + if dlopen_plugins: + self._cmakeopts['LIBOMPTARGET_DLOPEN_PLUGINS'] = "'%s'" % ';'.join(dlopen_plugins) + else: + if self.amdgpu_target_cond: + self._cmakeopts['LIBOMPTARGET_FORCE_DLOPEN_LIBHSA'] = 'ON' + if self.nvptx_target_cond: + self._cmakeopts['LIBOMPTARGET_FORCE_DLOPEN_LIBCUDA'] = 'ON' self._cmakeopts['OPENMP_ENABLE_LIBOMPTARGET'] = 'ON' self._cmakeopts['LIBOMP_INSTALL_ALIASES'] = 'OFF' if not self.cfg['build_openmp_tools']: