Index: lib/Driver/UniversalDriver.cpp =================================================================== --- lib/Driver/UniversalDriver.cpp +++ lib/Driver/UniversalDriver.cpp @@ -94,6 +94,19 @@ .Default(Flavor::invalid); } +static bool isPETarget(const llvm::opt::InputArgList &parsedArgs) { + llvm::opt::Arg *argMachine = parsedArgs.getLastArg(OPT_m); + if (!argMachine) + return false; + if (argMachine->containsValue("i386pe")) + return true; + if (argMachine->containsValue("i386pep")) + return true; + if (argMachine->containsValue("thumb2pe")) + return true; + return false; +} + static ProgramNameParts parseProgramName(StringRef programName) { SmallVector components; llvm::SplitString(programName, components, "-"); @@ -195,6 +208,12 @@ return true; } + //Override gnu for pe targets to use coff + if(isPETarget(parsedArgs)) { + coff::link(args); + return true; + } + Flavor flavor = getFlavor(args, parsedArgs); // Switch to appropriate driver. Index: lib/Driver/UniversalDriverOptions.td =================================================================== --- lib/Driver/UniversalDriverOptions.td +++ lib/Driver/UniversalDriverOptions.td @@ -11,6 +11,10 @@ def target: Separate<["-"], "target">, HelpText<"Select the target">; +// Used to override gnu pe targets +def m : Separate<["-"], "m">, MetaVarName<"">, + HelpText<"Select target emulation">; + def version: Flag<["-"], "version">, HelpText<"Display the version">;