Ninja: disable work around when linking with mingw
The work around is only needed by older GCCs (only testet 4.4/4.7) Ninja is very new so chances are high that there is also a new mingw. Use slashes in link rsp file, because ar.exe can't handle \.
This commit is contained in:
parent
3856e6698e
commit
3a2c8e8e66
|
@ -115,7 +115,9 @@ macro(__windows_compiler_gnu lang)
|
||||||
list(APPEND CMAKE_${lang}_ABI_FILES "Platform/Windows-GNU-${lang}-ABI")
|
list(APPEND CMAKE_${lang}_ABI_FILES "Platform/Windows-GNU-${lang}-ABI")
|
||||||
|
|
||||||
# Support very long lists of object files.
|
# Support very long lists of object files.
|
||||||
if("${CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG}" STREQUAL "@")
|
# TODO: check for which gcc versions this is still needed, not needed for gcc >= 4.4.
|
||||||
|
# Ninja generator doesn't support this work around.
|
||||||
|
if("${CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG}" STREQUAL "@" AND NOT CMAKE_GENERATOR MATCHES "Ninja")
|
||||||
foreach(rule CREATE_SHARED_MODULE CREATE_SHARED_LIBRARY LINK_EXECUTABLE)
|
foreach(rule CREATE_SHARED_MODULE CREATE_SHARED_LIBRARY LINK_EXECUTABLE)
|
||||||
# The gcc/collect2/ld toolchain does not use response files
|
# The gcc/collect2/ld toolchain does not use response files
|
||||||
# internally so we cannot pass long object lists. Instead pass
|
# internally so we cannot pass long object lists. Instead pass
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include "cmMakefile.h"
|
#include "cmMakefile.h"
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
cmNinjaNormalTargetGenerator::
|
cmNinjaNormalTargetGenerator::
|
||||||
cmNinjaNormalTargetGenerator(cmTarget* target)
|
cmNinjaNormalTargetGenerator(cmTarget* target)
|
||||||
|
@ -367,8 +368,8 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement()
|
||||||
outputs.push_back(targetOutputReal);
|
outputs.push_back(targetOutputReal);
|
||||||
|
|
||||||
// Compute specific libraries to link with.
|
// Compute specific libraries to link with.
|
||||||
cmNinjaDeps explicitDeps = this->GetObjects(),
|
cmNinjaDeps explicitDeps = this->GetObjects();
|
||||||
implicitDeps = this->ComputeLinkDeps();
|
cmNinjaDeps implicitDeps = this->ComputeLinkDeps();
|
||||||
|
|
||||||
this->GetLocalGenerator()->GetTargetFlags(vars["LINK_LIBRARIES"],
|
this->GetLocalGenerator()->GetTargetFlags(vars["LINK_LIBRARIES"],
|
||||||
vars["FLAGS"],
|
vars["FLAGS"],
|
||||||
|
@ -434,6 +435,9 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement()
|
||||||
path = GetTarget()->GetSupportDirectory();
|
path = GetTarget()->GetSupportDirectory();
|
||||||
vars["OBJECT_DIR"] = ConvertToNinjaPath(path.c_str());
|
vars["OBJECT_DIR"] = ConvertToNinjaPath(path.c_str());
|
||||||
EnsureDirectoryExists(path);
|
EnsureDirectoryExists(path);
|
||||||
|
// ar.exe can't handle backslashes in rsp files (implictly used by gcc)
|
||||||
|
std::string& linkLibraries = vars["LINK_LIBRARIES"];
|
||||||
|
std::replace(linkLibraries.begin(), linkLibraries.end(), '\\', '/');
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<cmCustomCommand> *cmdLists[3] = {
|
std::vector<cmCustomCommand> *cmdLists[3] = {
|
||||||
|
|
Loading…
Reference in New Issue