[LLD] [MinGW] Recognize the -rpath option (#102886)
GNU ld silently accepts the -rpath option for Windows targets, as a no-op. This has lead to some build systems (and users) passing this option while building for Windows/MinGW, even if Windows doesn't have any concept like rpath. Older versions of Conan did include -rpath in the pkg-config files it generated, see e.g.17c58f0c61/conans/client/generators/pkg_config.py (L104-L114)
and17c58f0c61/conans/client/build/compiler_flags.py (L26-L34)
- and see https://github.com/mstorsjo/llvm-mingw/issues/300 for user reports about this issue. Recognize the option in LLD for MinGW targets, to improve drop-in compatibility compared to GNU ld, but produce a warning to alert users that the option really has no effect for these targets. (cherry picked from commit 69f76c782b554a004078af6909c19a11e3846415)
This commit is contained in:
parent
c1336c9e3b
commit
6dbc0e236b
@ -448,6 +448,9 @@ bool link(ArrayRef<const char *> argsArr, llvm::raw_ostream &stdoutOS,
|
||||
add("-errorlimit:" + s);
|
||||
}
|
||||
|
||||
if (auto *a = args.getLastArg(OPT_rpath))
|
||||
warn("parameter " + a->getSpelling() + " has no effect on PE/COFF targets");
|
||||
|
||||
for (auto *a : args.filtered(OPT_mllvm))
|
||||
add("-mllvm:" + StringRef(a->getValue()));
|
||||
|
||||
|
@ -243,6 +243,9 @@ defm: EqNoHelp<"sysroot">;
|
||||
def: F<"sort-common">;
|
||||
def: F<"start-group">;
|
||||
|
||||
// Ignored options, that produce warnings
|
||||
defm rpath: EqNoHelp<"rpath">;
|
||||
|
||||
// Ignore GCC collect2 LTO plugin related options. Note that we don't support
|
||||
// GCC LTO, but GCC collect2 passes these options even in non-LTO mode.
|
||||
def: J<"plugin-opt=-fresolution=">;
|
||||
|
@ -446,3 +446,9 @@ RUN: ld.lld -### foo.o -m i386pep --build-id=none 2>&1 | FileCheck -check-prefix
|
||||
RUN: ld.lld -### foo.o -m i386pep -s 2>&1 | FileCheck -check-prefix=NO_BUILD_ID %s
|
||||
RUN: ld.lld -### foo.o -m i386pep -S 2>&1 | FileCheck -check-prefix=NO_BUILD_ID %s
|
||||
NO_BUILD_ID: -build-id:no
|
||||
|
||||
RUN: ld.lld -### foo.o -m i386pep -rpath foo 2>&1 | FileCheck -check-prefix=WARN_RPATH %s
|
||||
RUN: ld.lld -### foo.o -m i386pep --rpath foo 2>&1 | FileCheck -check-prefix=WARN_RPATH %s
|
||||
RUN: ld.lld -### foo.o -m i386pep -rpath=foo 2>&1 | FileCheck -check-prefix=WARN_RPATH %s
|
||||
RUN: ld.lld -### foo.o -m i386pep --rpath=foo 2>&1 | FileCheck -check-prefix=WARN_RPATH %s
|
||||
WARN_RPATH: warning: parameter -{{-?}}rpath has no effect on PE/COFF targets
|
||||
|
Loading…
x
Reference in New Issue
Block a user