Index: lld/trunk/MinGW/Driver.cpp =================================================================== --- lld/trunk/MinGW/Driver.cpp +++ lld/trunk/MinGW/Driver.cpp @@ -30,6 +30,7 @@ #include "lld/Common/Driver.h" #include "lld/Common/ErrorHandler.h" +#include "lld/Common/Version.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/Optional.h" #include "llvm/ADT/StringExtras.h" @@ -139,6 +140,21 @@ return true; } + // A note about "compatible with GNU linkers" message: this is a hack for + // scripts generated by GNU Libtool 2.4.6 (released in February 2014 and + // still the newest version in March 2017) or earlier to recognize LLD as + // a GNU compatible linker. As long as an output for the -v option + // contains "GNU" or "with BFD", they recognize us as GNU-compatible. + if (Args.hasArg(OPT_v) || Args.hasArg(OPT_version)) + message(getLLDVersion() + " (compatible with GNU linkers)"); + + // The behavior of -v or --version is a bit strange, but this is + // needed for compatibility with GNU linkers. + if (Args.hasArg(OPT_v) && !Args.hasArg(OPT_INPUT) && !Args.hasArg(OPT_l)) + return true; + if (Args.hasArg(OPT_version)) + return true; + if (!Args.hasArg(OPT_INPUT) && !Args.hasArg(OPT_l)) fatal("no input files"); Index: lld/trunk/MinGW/Options.td =================================================================== --- lld/trunk/MinGW/Options.td +++ lld/trunk/MinGW/Options.td @@ -48,7 +48,9 @@ HelpText<"Omit all debug information, but keep symbol information">; def whole_archive: F<"whole-archive">, HelpText<"Include all object files for following archives">; +def v: Flag<["-"], "v">, HelpText<"Display the version number">; def verbose: F<"verbose">, HelpText<"Verbose mode">; +def version: F<"version">, HelpText<"Display the version number and exit">; def require_defined: S<"require-defined">, HelpText<"Force symbol to be added to symbol table as an undefined one">; def require_defined_eq: J<"require-defined=">, Alias; @@ -90,5 +92,3 @@ def: J<"sysroot">; def: F<"start-group">; def: F<"tsaware">; -def: Flag<["-"], "v">; -def: F<"version">; Index: lld/trunk/test/MinGW/driver.test =================================================================== --- lld/trunk/test/MinGW/driver.test +++ lld/trunk/test/MinGW/driver.test @@ -169,3 +169,8 @@ RUN: ld.lld -### -m i386pep foo.o -appcontainer | FileCheck -check-prefix APPCONTAINER %s RUN: ld.lld -### -m i386pep foo.o --appcontainer | FileCheck -check-prefix APPCONTAINER %s APPCONTAINER: -appcontainer + +# RUN: ld.lld -m i386pep --version 2>&1 | FileCheck -check-prefix=VERSION %s +# RUN: ld.lld -m i386pep -v 2>&1 | FileCheck -check-prefix=VERSION %s +# RUN: not ld.lld -m i386pep -v xyz 2>&1 | FileCheck -check-prefix=VERSION %s +# VERSION: LLD {{.*}} (compatible with GNU linkers)