From 27a0593104ec0df61b195b50bde8a69dc8e765db Mon Sep 17 00:00:00 2001 From: Harmen Stoppels Date: Thu, 23 Jan 2025 15:53:49 +0100 Subject: [PATCH] openmpi: do not pass --with-wrapper-ldflags (#48673) On macOS you cannot unconditionally pass `-rpath`, it can conflict with `-r`. mpicc is not the place to inject rpaths to compiler runtime libraries. That's up to the compiler's config files (spec files in gcc, config files in llvm). Also remove some patches that are redundant in newer versions of openmpi. --- .../repos/builtin/packages/openmpi/package.py | 66 ------------------- 1 file changed, 66 deletions(-) diff --git a/var/spack/repos/builtin/packages/openmpi/package.py b/var/spack/repos/builtin/packages/openmpi/package.py index 9afb47effd4..dbac515db93 100644 --- a/var/spack/repos/builtin/packages/openmpi/package.py +++ b/var/spack/repos/builtin/packages/openmpi/package.py @@ -3,7 +3,6 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) -import itertools import os import re import sys @@ -1035,11 +1034,6 @@ def configure_args(self): if spec.satisfies("@:4.1.6,5.0.0:5.0.3 %apple-clang@15:"): config_args.append("--with-wrapper-fcflags=-Wl,-ld_classic") - # All rpath flags should be appended with self.compiler.cc_rpath_arg. - # Later, we might need to update share/openmpi/mpic++-wrapper-data.txt - # and mpifort-wrapper-data.txt (see filter_rpaths()). - wrapper_ldflags = [] - config_args.extend(self.enable_or_disable("builtin-atomics", variant="atomics")) if spec.satisfies("+pmi"): @@ -1182,16 +1176,6 @@ def configure_args(self): # filter_pc_files()): if spec.satisfies("@3.0.5:"): config_args.append("--disable-wrapper-runpath") - - # Add extra_rpaths and implicit_rpaths into the wrappers. - wrapper_ldflags.extend( - [ - self.compiler.cc_rpath_arg + path - for path in itertools.chain( - self.compiler.extra_rpaths, self.compiler.implicit_rpaths() - ) - ] - ) else: config_args.append("--disable-wrapper-rpath") config_args.append("--disable-wrapper-runpath") @@ -1199,9 +1183,6 @@ def configure_args(self): config_args.extend(self.enable_or_disable("mpi-cxx", variant="cxx")) config_args.extend(self.enable_or_disable("cxx-exceptions", variant="cxx_exceptions")) - if wrapper_ldflags: - config_args.append("--with-wrapper-ldflags={0}".format(" ".join(wrapper_ldflags))) - # # the Spack path padding feature causes issues with Open MPI's lex based parsing system # used by the compiler wrappers. Crank up lex buffer to 1MB to handle this. @@ -1240,53 +1221,6 @@ def configure_args(self): return config_args - @run_after("install", when="+wrapper-rpath") - def filter_rpaths(self): - def filter_lang_rpaths(lang_tokens, rpath_arg): - if self.compiler.cc_rpath_arg == rpath_arg: - return - - files = find( - self.spec.prefix.share.openmpi, - ["*{0}-wrapper-data*".format(t) for t in lang_tokens], - ) - files.extend( - find( - self.spec.prefix.lib.pkgconfig, ["ompi-{0}.pc".format(t) for t in lang_tokens] - ) - ) - - x = FileFilter(*[f for f in files if not os.path.islink(f)]) - - # Replace self.compiler.cc_rpath_arg, which have been added as - # '--with-wrapper-ldflags', with rpath_arg in the respective - # language-specific wrappers and pkg-config files. - x.filter(self.compiler.cc_rpath_arg, rpath_arg, string=True, backup=False) - - if self.spec.satisfies("@:1.10.3,2:2.1.1"): - # Replace Libtool-style RPATH prefixes '-Wl,-rpath -Wl,' with - # rpath_arg for old version of OpenMPI, which assumed that CXX - # and FC had the same prefixes as CC. - x.filter("-Wl,-rpath -Wl,", rpath_arg, string=True, backup=False) - - filter_lang_rpaths(["c++", "CC", "cxx"], self.compiler.cxx_rpath_arg) - filter_lang_rpaths(["fort", "f77", "f90"], self.compiler.fc_rpath_arg) - - @run_after("install", when="@:3.0.4+wrapper-rpath") - def filter_pc_files(self): - files = find(self.spec.prefix.lib.pkgconfig, "*.pc") - x = FileFilter(*[f for f in files if not os.path.islink(f)]) - - # Remove this linking flag if present (it turns RPATH into RUNPATH) - x.filter( - "{0}--enable-new-dtags".format(self.compiler.linker_arg), "", string=True, backup=False - ) - - # NAG compiler is usually mixed with GCC, which has a different - # prefix for linker arguments. - if self.compiler.name == "nag": - x.filter("-Wl,--enable-new-dtags", "", string=True, backup=False) - # For v4 and lower @run_after("install") def delete_mpirun_mpiexec(self):