diff options
| author | Rui Ueyama <ruiu@google.com> | 2014-09-11 03:13:20 +0000 |
|---|---|---|
| committer | Rui Ueyama <ruiu@google.com> | 2014-09-11 03:13:20 +0000 |
| commit | a726ef12a411d379a3924f3db5fa4a43e520a324 (patch) | |
| tree | 8a286565324cf0afbbc4be5897a31ee3e9a33825 /lld/lib/Driver/UniversalDriver.cpp | |
| parent | 8e5f548b8117ae11baf3518dc47cca0497f66c87 (diff) | |
| download | bcm5719-llvm-a726ef12a411d379a3924f3db5fa4a43e520a324.tar.gz bcm5719-llvm-a726ef12a411d379a3924f3db5fa4a43e520a324.zip | |
Make getFlavor function.
The dangling "else" at the end of #if looked a bit error-prone.
Make it a separate function. No functionality change.
llvm-svn: 217568
Diffstat (limited to 'lld/lib/Driver/UniversalDriver.cpp')
| -rw-r--r-- | lld/lib/Driver/UniversalDriver.cpp | 52 |
1 files changed, 28 insertions, 24 deletions
diff --git a/lld/lib/Driver/UniversalDriver.cpp b/lld/lib/Driver/UniversalDriver.cpp index b39bc30d479..0212bb8789b 100644 --- a/lld/lib/Driver/UniversalDriver.cpp +++ b/lld/lib/Driver/UniversalDriver.cpp @@ -123,6 +123,32 @@ static ProgramNameParts parseProgramName(StringRef programName) { return ret; } +static Flavor getFlavor(int &argc, const char **&argv, + std::unique_ptr<llvm::opt::InputArgList> &parsedArgs) { +#if LLVM_ON_UNIX + if (llvm::sys::path::filename(argv[0]).equals("ld")) { +#if __APPLE__ + // On a Darwin systems, if linker binary is named "ld", use Darwin driver. + return Flavor::darwin_ld; +#endif + // On a ELF based systems, if linker binary is named "ld", use gnu driver. + return Flavor::gnu_ld; + } +#endif + if (parsedArgs->getLastArg(OPT_core)) { + argc--; + argv++; + return Flavor::core; + } + if (llvm::opt::Arg *argFlavor = parsedArgs->getLastArg(OPT_flavor)) { + argc -= 2; + argv += 2; + return strToFlavor(argFlavor->getValue()); + } + StringRef name = llvm::sys::path::stem(argv[0]); + return strToFlavor(parseProgramName(name)._flavor); +} + namespace lld { bool UniversalDriver::link(int argc, const char *argv[], @@ -152,31 +178,9 @@ bool UniversalDriver::link(int argc, const char *argv[], return true; } - Flavor flavor; - -#if LLVM_ON_UNIX - if (llvm::sys::path::filename(argv[0]).equals("ld")) { -#if __APPLE__ - // On a Darwin systems, if linker binary is named "ld", use Darwin driver. - flavor = Flavor::darwin_ld; -#else - // On a ELF based systems, if linker binary is named "ld", use gnu driver. - flavor = Flavor::gnu_ld; -#endif - } else -#endif - if (parsedArgs->getLastArg(OPT_core)) { - flavor = Flavor::core; - argv++; - argc--; - } else if (llvm::opt::Arg *argFlavor = parsedArgs->getLastArg(OPT_flavor)) { - flavor = strToFlavor(argFlavor->getValue()); - argv += 2; - argc -= 2; - } else - flavor = strToFlavor(parseProgramName(programName)._flavor); - + Flavor flavor = getFlavor(argc, argv, parsedArgs); std::vector<const char *> args(argv, argv + argc); + // Switch to appropriate driver. switch (flavor) { case Flavor::gnu_ld: |

