Mercurial > projects > ldc
diff gen/linker.cpp @ 986:a8cb25d478c4
Use LLVM-style command line (instead of DMD-style)
Note: For a backward compatible interface, use the new bin/ldmd script. It
supports all old options while passing on anything it doesn't recognize.
Some changes caused by this:
* -debug and -version are now -d-debug and -d-version due to a conflict with
standard LLVM options.
* All "flag" options now allow an optional =true/=1/=false/=0 suffix.
* Some "hidden debug switches" starting with "--" were renamed because LLVM
doesn't care about the number of dashes, so they were conflicting with other
options (such as -c).
The new versions start with "-hidden-debug-" instead of "--"
* --help works, but has a non-zero exit code. This breaks some Tango scripts
which use it to test for compiler existence. See tango.patch.
Some changes not (directly) caused by this;
* (-enable/-disable)-FOO options are now available for pre- and postconditions.
* -march is used instead of -m (like other LLVM programs), but -m is an alias
for it.
* -defaultlib, -debuglib, -d-debug and -d-version allow comma-separated values.
The effect should be identical to specifying the same option multiple times.
I decided against allowing these for some other options because paths might
contain commas on some systems.
* -fPIC is removed in favor of the standard LLVM option -relocation-model=pic
Bug:
* If -run is specified as the last argument in DFLAGS, no error is generated.
(Not very serious IMHO)
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Wed, 25 Feb 2009 17:34:51 +0100 |
parents | 893d72ab95d0 |
children | 18ad5601dff7 |
line wrap: on
line diff
--- a/gen/linker.cpp Thu Feb 19 13:51:44 2009 +0100 +++ b/gen/linker.cpp Wed Feb 25 17:34:51 2009 +0100 @@ -1,3 +1,4 @@ +#include "gen/linker.h" #include "gen/llvm.h" #include "llvm/Linker.h" #include "llvm/System/Program.h" @@ -11,6 +12,16 @@ #define NO_COUT_LOGGER #include "gen/logger.h" +#include "gen/cl_options.h" + +////////////////////////////////////////////////////////////////////////////// + +// Is this useful? +llvm::cl::opt<bool> quiet("quiet", + llvm::cl::desc("Suppress output of link command (unless -v is also passed)"), + llvm::cl::Hidden, + llvm::cl::ZeroOrMore, + llvm::cl::init(true)); ////////////////////////////////////////////////////////////////////////////// @@ -173,7 +184,7 @@ } // print link command? - if (!global.params.quiet || global.params.verbose) + if (!quiet || global.params.verbose) { // Print it for (int i = 0; i < args.size(); i++) @@ -311,7 +322,7 @@ args.push_back("-m64"); // print link command? - if (!global.params.quiet || global.params.verbose) + if (!quiet || global.params.verbose) { // Print it for (int i = 0; i < args.size(); i++) @@ -363,10 +374,12 @@ // build arguments std::vector<const char*> args; - for (size_t i = 0; i < global.params.runargs_length; i++) + // args[0] should be the name of the executable + args.push_back(gExePath.toString().c_str()); + // Skip first argument to -run; it's a D source file. + for (size_t i = 1, length = opts::runargs.size(); i < length; i++) { - char *a = global.params.runargs[i]; - args.push_back(a); + args.push_back(opts::runargs[i].c_str()); } // terminate args list args.push_back(NULL);