mirror of
https://github.com/ldc-developers/ldc.git
synced 2025-05-08 03:46:02 +03:00
Fix build with LLVM trunk. (#2767)
This commit is contained in:
parent
653270df53
commit
0c8c0e6a18
5 changed files with 48 additions and 7 deletions
|
@ -472,6 +472,9 @@ void recoverObjectFile(llvm::StringRef cacheObjectHash,
|
|||
{
|
||||
int FD;
|
||||
if (llvm::sys::fs::openFileForWrite(cacheFile.c_str(), FD,
|
||||
#if LDC_LLVM_VER >= 700
|
||||
llvm::sys::fs::CD_OpenExisting,
|
||||
#endif
|
||||
llvm::sys::fs::F_Append)) {
|
||||
error(Loc(), "Failed to open the cached file for writing: %s",
|
||||
cacheFile.c_str());
|
||||
|
|
|
@ -106,8 +106,19 @@ char *concat(const char *a, int b) {
|
|||
* Runs the given executable, returning its error code.
|
||||
*/
|
||||
int execute(const std::string &exePath, const char **args) {
|
||||
#if LDC_LLVM_VER >= 700
|
||||
std::vector<llvm::StringRef> argv;
|
||||
for (auto arg = args; arg != nullptr; ++arg) {
|
||||
argv.push_back(*arg);
|
||||
}
|
||||
auto envVars = llvm::None;
|
||||
#else
|
||||
auto argv = args;
|
||||
auto envVars = nullptr;
|
||||
#endif
|
||||
|
||||
std::string errorMsg;
|
||||
int rc = ls::ExecuteAndWait(exePath, args, nullptr,
|
||||
int rc = ls::ExecuteAndWait(exePath, argv, envVars,
|
||||
#if LDC_LLVM_VER >= 600
|
||||
{},
|
||||
#else
|
||||
|
|
|
@ -658,11 +658,18 @@ int linkObjToBinaryGcc(llvm::StringRef outputPath,
|
|||
const auto fullArgs =
|
||||
getFullArgs("ld.lld", argsBuilder.args, global.params.verbose);
|
||||
|
||||
// CanExitEarly == true means that LLD can and will call `exit()` when errors occur.
|
||||
const bool CanExitEarly = false;
|
||||
|
||||
bool success = false;
|
||||
if (global.params.targetTriple->isOSBinFormatELF()) {
|
||||
success = lld::elf::link(fullArgs, /*CanExitEarly*/ false);
|
||||
success = lld::elf::link(fullArgs, CanExitEarly);
|
||||
} else if (global.params.targetTriple->isOSBinFormatMachO()) {
|
||||
#if LDC_LLVM_VER >= 700
|
||||
success = lld::mach_o::link(fullArgs, CanExitEarly);
|
||||
#else
|
||||
success = lld::mach_o::link(fullArgs);
|
||||
#endif
|
||||
} else {
|
||||
error(Loc(), "unknown target binary format for internal linking");
|
||||
}
|
||||
|
|
|
@ -173,14 +173,23 @@ int executeToolAndWait(const std::string &tool_,
|
|||
return -1;
|
||||
}
|
||||
|
||||
// Construct real argument list.
|
||||
// First entry is the tool itself, last entry must be NULL.
|
||||
// Construct real argument list; first entry is the tool itself.
|
||||
auto realargs = getFullArgs(tool, args, verbose);
|
||||
realargs.push_back(nullptr);
|
||||
#if LDC_LLVM_VER >= 700
|
||||
std::vector<llvm::StringRef> argv;
|
||||
argv.reserve(realargs.size());
|
||||
for (auto &&arg : realargs)
|
||||
argv.push_back(arg);
|
||||
auto envVars = llvm::None;
|
||||
#else
|
||||
realargs.push_back(nullptr); // terminate with null
|
||||
auto argv = &realargs[0];
|
||||
auto envVars = nullptr;
|
||||
#endif
|
||||
|
||||
// Execute tool.
|
||||
std::string errstr;
|
||||
if (int status = llvm::sys::ExecuteAndWait(tool, &realargs[0], nullptr,
|
||||
if (int status = llvm::sys::ExecuteAndWait(tool, argv, envVars,
|
||||
#if LDC_LLVM_VER >= 600
|
||||
{},
|
||||
#else
|
||||
|
|
|
@ -39,8 +39,19 @@ int main(int argc, const char **argv) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
#if LDC_LLVM_VER >= 700
|
||||
std::vector<StringRef> Argv;
|
||||
Argv.reserve(argc);
|
||||
for (int i = 0; i < argc; ++i)
|
||||
Argv.push_back(argv[i]);
|
||||
auto Env = llvm::None;
|
||||
#else
|
||||
auto Argv = argv;
|
||||
auto Env = nullptr;
|
||||
#endif
|
||||
|
||||
std::string ErrMsg;
|
||||
int Result = sys::ExecuteAndWait(*Program, argv, nullptr,
|
||||
int Result = sys::ExecuteAndWait(*Program, Argv, Env,
|
||||
#if LDC_LLVM_VER >= 600
|
||||
{},
|
||||
#else
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue