Files
ldc/gen/programs.cpp
kai e556882be4 Simplify code for LLVM 3.4.
Introduces a compability function instead of a #if/#endif cascade.
2013-06-16 18:22:45 +02:00

94 lines
2.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//===-- programs.cpp ------------------------------------------------------===//
//
// LDC the LLVM D compiler
//
// This file is distributed under the BSD-style LDC license. See the LICENSE
// file for details.
//
//===----------------------------------------------------------------------===//
#include "gen/programs.h"
#include "mars.h" // fatal()
#include "root.h" // error(char*)
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Program.h"
using namespace llvm;
static cl::opt<std::string> gcc("gcc",
cl::desc("GCC to use for assembling and linking"),
cl::Hidden,
cl::ZeroOrMore);
static cl::opt<std::string> ar("ar",
cl::desc("Archiver"),
cl::Hidden,
cl::ZeroOrMore);
static cl::opt<std::string> mslink("ms-link",
cl::desc("LINK to use for linking on Windows"),
cl::Hidden,
cl::ZeroOrMore);
static cl::opt<std::string> mslib("ms-lib",
cl::desc("Library Manager to use on Windows"),
cl::Hidden,
cl::ZeroOrMore);
#if LDC_LLVM_VER >= 304
typedef std::string RetType;
#else
typedef sys::Path RetType;
namespace llvm {
namespace sys {
inline sys::Path FindProgramByName(const std::string& name)
{
return llvm::sys::Program::FindProgramByName(name);
}
} // namespace sys
} // namespace llvm
#endif
static RetType getProgram(const char *name, const cl::opt<std::string> &opt, const char *envVar = 0)
{
RetType path;
const char *prog = NULL;
if (opt.getNumOccurrences() > 0 && opt.length() > 0 && (prog = opt.c_str()))
path = sys::FindProgramByName(prog);
if (path.empty() && envVar && (prog = getenv(envVar)))
path = sys::FindProgramByName(prog);
if (path.empty())
path = sys::FindProgramByName(name);
if (path.empty()) {
error("failed to locate %s", name);
fatal();
}
return path;
}
RetType getGcc()
{
return getProgram("gcc", gcc, "CC");
}
RetType getArchiver()
{
return getProgram("ar", ar);
}
RetType getLink()
{
return getProgram("link.exe", mslink);
}
RetType getLib()
{
return getProgram("lib.exe", mslib);
}