|
|
@@ -1169,30 +1169,34 @@ void cmLocalGenerator::GetTargetFlags(
|
|
|
libraryLinkVariable = "CMAKE_MODULE_LINKER_FLAGS";
|
|
|
CM_FALLTHROUGH;
|
|
|
case cmStateEnums::SHARED_LIBRARY: {
|
|
|
- linkFlags = this->Makefile->GetSafeDefinition(libraryLinkVariable);
|
|
|
- linkFlags += " ";
|
|
|
- if (!buildType.empty()) {
|
|
|
- std::string build = libraryLinkVariable;
|
|
|
- build += "_";
|
|
|
- build += buildType;
|
|
|
- linkFlags += this->Makefile->GetSafeDefinition(build);
|
|
|
+ if (linkLanguage != "Swift") {
|
|
|
+ linkFlags = this->Makefile->GetSafeDefinition(libraryLinkVariable);
|
|
|
linkFlags += " ";
|
|
|
- }
|
|
|
- if (this->Makefile->IsOn("WIN32") &&
|
|
|
- !(this->Makefile->IsOn("CYGWIN") || this->Makefile->IsOn("MINGW"))) {
|
|
|
- std::vector<cmSourceFile*> sources;
|
|
|
- target->GetSourceFiles(sources, buildType);
|
|
|
- std::string defFlag =
|
|
|
- this->Makefile->GetSafeDefinition("CMAKE_LINK_DEF_FILE_FLAG");
|
|
|
- for (cmSourceFile* sf : sources) {
|
|
|
- if (sf->GetExtension() == "def") {
|
|
|
- linkFlags += defFlag;
|
|
|
- linkFlags += this->ConvertToOutputFormat(
|
|
|
- cmSystemTools::CollapseFullPath(sf->GetFullPath()), SHELL);
|
|
|
- linkFlags += " ";
|
|
|
+ if (!buildType.empty()) {
|
|
|
+ std::string build = libraryLinkVariable;
|
|
|
+ build += "_";
|
|
|
+ build += buildType;
|
|
|
+ linkFlags += this->Makefile->GetSafeDefinition(build);
|
|
|
+ linkFlags += " ";
|
|
|
+ }
|
|
|
+ if (this->Makefile->IsOn("WIN32") &&
|
|
|
+ !(this->Makefile->IsOn("CYGWIN") ||
|
|
|
+ this->Makefile->IsOn("MINGW"))) {
|
|
|
+ std::vector<cmSourceFile*> sources;
|
|
|
+ target->GetSourceFiles(sources, buildType);
|
|
|
+ std::string defFlag =
|
|
|
+ this->Makefile->GetSafeDefinition("CMAKE_LINK_DEF_FILE_FLAG");
|
|
|
+ for (cmSourceFile* sf : sources) {
|
|
|
+ if (sf->GetExtension() == "def") {
|
|
|
+ linkFlags += defFlag;
|
|
|
+ linkFlags += this->ConvertToOutputFormat(
|
|
|
+ cmSystemTools::CollapseFullPath(sf->GetFullPath()), SHELL);
|
|
|
+ linkFlags += " ";
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
const char* targetLinkFlags = target->GetProperty("LINK_FLAGS");
|
|
|
if (targetLinkFlags) {
|
|
|
linkFlags += targetLinkFlags;
|
|
|
@@ -1207,6 +1211,7 @@ void cmLocalGenerator::GetTargetFlags(
|
|
|
linkFlags += " ";
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
std::vector<std::string> opts;
|
|
|
target->GetLinkOptions(opts, config, linkLanguage);
|
|
|
// LINK_OPTIONS are escaped.
|
|
|
@@ -1217,25 +1222,49 @@ void cmLocalGenerator::GetTargetFlags(
|
|
|
}
|
|
|
} break;
|
|
|
case cmStateEnums::EXECUTABLE: {
|
|
|
- linkFlags += this->Makefile->GetSafeDefinition("CMAKE_EXE_LINKER_FLAGS");
|
|
|
- linkFlags += " ";
|
|
|
- if (!buildType.empty()) {
|
|
|
- std::string build = "CMAKE_EXE_LINKER_FLAGS_";
|
|
|
- build += buildType;
|
|
|
- linkFlags += this->Makefile->GetSafeDefinition(build);
|
|
|
+ if (linkLanguage != "Swift") {
|
|
|
+ linkFlags +=
|
|
|
+ this->Makefile->GetSafeDefinition("CMAKE_EXE_LINKER_FLAGS");
|
|
|
linkFlags += " ";
|
|
|
+ if (!buildType.empty()) {
|
|
|
+ std::string build = "CMAKE_EXE_LINKER_FLAGS_";
|
|
|
+ build += buildType;
|
|
|
+ linkFlags += this->Makefile->GetSafeDefinition(build);
|
|
|
+ linkFlags += " ";
|
|
|
+ }
|
|
|
+ if (linkLanguage.empty()) {
|
|
|
+ cmSystemTools::Error(
|
|
|
+ "CMake can not determine linker language for target: " +
|
|
|
+ target->GetName());
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (target->GetPropertyAsBool("WIN32_EXECUTABLE")) {
|
|
|
+ linkFlags +=
|
|
|
+ this->Makefile->GetSafeDefinition("CMAKE_CREATE_WIN32_EXE");
|
|
|
+ linkFlags += " ";
|
|
|
+ } else {
|
|
|
+ linkFlags +=
|
|
|
+ this->Makefile->GetSafeDefinition("CMAKE_CREATE_CONSOLE_EXE");
|
|
|
+ linkFlags += " ";
|
|
|
+ }
|
|
|
+
|
|
|
+ if (target->IsExecutableWithExports()) {
|
|
|
+ std::string exportFlagVar = "CMAKE_EXE_EXPORTS_";
|
|
|
+ exportFlagVar += linkLanguage;
|
|
|
+ exportFlagVar += "_FLAG";
|
|
|
+
|
|
|
+ linkFlags += this->Makefile->GetSafeDefinition(exportFlagVar);
|
|
|
+ linkFlags += " ";
|
|
|
+ }
|
|
|
}
|
|
|
- if (linkLanguage.empty()) {
|
|
|
- cmSystemTools::Error(
|
|
|
- "CMake can not determine linker language for target: " +
|
|
|
- target->GetName());
|
|
|
- return;
|
|
|
- }
|
|
|
+
|
|
|
this->AddLanguageFlagsForLinking(flags, target, linkLanguage, buildType);
|
|
|
if (pcli) {
|
|
|
this->OutputLinkLibraries(pcli, linkLineComputer, linkLibs,
|
|
|
frameworkPath, linkPath);
|
|
|
}
|
|
|
+
|
|
|
if (cmSystemTools::IsOn(
|
|
|
this->Makefile->GetDefinition("BUILD_SHARED_LIBS"))) {
|
|
|
std::string sFlagVar = std::string("CMAKE_SHARED_BUILD_") +
|
|
|
@@ -1243,23 +1272,6 @@ void cmLocalGenerator::GetTargetFlags(
|
|
|
linkFlags += this->Makefile->GetSafeDefinition(sFlagVar);
|
|
|
linkFlags += " ";
|
|
|
}
|
|
|
- if (target->GetPropertyAsBool("WIN32_EXECUTABLE")) {
|
|
|
- linkFlags +=
|
|
|
- this->Makefile->GetSafeDefinition("CMAKE_CREATE_WIN32_EXE");
|
|
|
- linkFlags += " ";
|
|
|
- } else {
|
|
|
- linkFlags +=
|
|
|
- this->Makefile->GetSafeDefinition("CMAKE_CREATE_CONSOLE_EXE");
|
|
|
- linkFlags += " ";
|
|
|
- }
|
|
|
- if (target->IsExecutableWithExports()) {
|
|
|
- std::string exportFlagVar = "CMAKE_EXE_EXPORTS_";
|
|
|
- exportFlagVar += linkLanguage;
|
|
|
- exportFlagVar += "_FLAG";
|
|
|
-
|
|
|
- linkFlags += this->Makefile->GetSafeDefinition(exportFlagVar);
|
|
|
- linkFlags += " ";
|
|
|
- }
|
|
|
|
|
|
std::string cmp0065Flags =
|
|
|
this->GetLinkLibsCMP0065(linkLanguage, *target);
|
|
|
@@ -1282,6 +1294,7 @@ void cmLocalGenerator::GetTargetFlags(
|
|
|
linkFlags += " ";
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
std::vector<std::string> opts;
|
|
|
target->GetLinkOptions(opts, config, linkLanguage);
|
|
|
// LINK_OPTIONS are escaped.
|