mirror of
https://github.com/Kitware/CMake.git
synced 2026-08-09 17:18:18 +00:00
Merge topic 'fbuild_fix_clang_cl_manifest'
30ce1cfdcb FASTBuild: fix clang-cl build with manifests
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !11823
This commit is contained in:
@@ -392,12 +392,21 @@ else()
|
||||
endif()
|
||||
unset(__WINDOWS_MSVC_CMP0184)
|
||||
|
||||
# Use manifest directly on the linker's command line.
|
||||
set(_CMAKE_FASTBUILD_MANIFESTS "")
|
||||
if(CMAKE_GENERATOR MATCHES "FASTBuild")
|
||||
string(APPEND _CMAKE_FASTBUILD_MANIFESTS " <MANIFESTS>")
|
||||
endif()
|
||||
|
||||
macro(__windows_compiler_msvc lang)
|
||||
if(NOT MSVC_VERSION LESS 1400 AND NOT CMAKE_GENERATOR MATCHES "FASTBuild")
|
||||
# for 2005 make sure the manifest is put in the dll with mt
|
||||
set(_CMAKE_VS_LINK_DLL "<CMAKE_COMMAND> -E vs_link_dll --msvc-ver=${MSVC_VERSION} --intdir=<OBJECT_DIR> --rc=<CMAKE_RC_COMPILER> --mt=<CMAKE_MT> --manifests <MANIFESTS> -- ")
|
||||
set(_CMAKE_VS_LINK_EXE "<CMAKE_COMMAND> -E vs_link_exe --msvc-ver=${MSVC_VERSION} --intdir=<OBJECT_DIR> --rc=<CMAKE_RC_COMPILER> --mt=<CMAKE_MT> --manifests <MANIFESTS> -- ")
|
||||
endif()
|
||||
if (CMAKE_GENERATOR MATCHES "FASTBuild")
|
||||
set(CMAKE_${lang}_LINKER_MANIFEST_FLAG " /MANIFEST:EMBED /MANIFESTINPUT:")
|
||||
endif()
|
||||
set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "")
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "WindowsKernelModeDriver")
|
||||
set(CMAKE_${lang}_SHARED_LIBRARY_COMPILE_DEFINITIONS "")
|
||||
@@ -407,7 +416,7 @@ macro(__windows_compiler_msvc lang)
|
||||
set(_DLL_DRIVER "/dll")
|
||||
endif()
|
||||
set(CMAKE_${lang}_CREATE_SHARED_LIBRARY
|
||||
"${_CMAKE_VS_LINK_DLL}<CMAKE_LINKER> ${CMAKE_CL_NOLOGO} <OBJECTS> ${CMAKE_START_TEMP_FILE} /out:<TARGET> /implib:<TARGET_IMPLIB> /pdb:<TARGET_PDB> ${_DLL_DRIVER} /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR>${_PLATFORM_LINK_FLAGS} <LINK_FLAGS> <LINK_LIBRARIES> ${CMAKE_END_TEMP_FILE}")
|
||||
"${_CMAKE_VS_LINK_DLL}<CMAKE_LINKER> ${CMAKE_CL_NOLOGO} <OBJECTS> ${CMAKE_START_TEMP_FILE} /out:<TARGET> /implib:<TARGET_IMPLIB> /pdb:<TARGET_PDB> ${_DLL_DRIVER} /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR>${_PLATFORM_LINK_FLAGS} <LINK_FLAGS> <LINK_LIBRARIES>${_CMAKE_FASTBUILD_MANIFESTS} ${CMAKE_END_TEMP_FILE}")
|
||||
unset(_DLL_DRIVER)
|
||||
|
||||
set(CMAKE_${lang}_CREATE_SHARED_MODULE ${CMAKE_${lang}_CREATE_SHARED_LIBRARY})
|
||||
@@ -423,7 +432,7 @@ macro(__windows_compiler_msvc lang)
|
||||
set(CMAKE_${lang}_LINK_DEF_FILE_FLAG "/DEF:")
|
||||
set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_OBJECTS 1)
|
||||
set(CMAKE_${lang}_LINK_EXECUTABLE
|
||||
"${_CMAKE_VS_LINK_EXE}<CMAKE_LINKER> ${CMAKE_CL_NOLOGO} <OBJECTS> ${CMAKE_START_TEMP_FILE} /out:<TARGET> /implib:<TARGET_IMPLIB> /pdb:<TARGET_PDB> /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR>${_PLATFORM_LINK_FLAGS} <LINK_FLAGS> <LINK_LIBRARIES>${CMAKE_END_TEMP_FILE}")
|
||||
"${_CMAKE_VS_LINK_EXE}<CMAKE_LINKER> ${CMAKE_CL_NOLOGO} <OBJECTS> ${CMAKE_START_TEMP_FILE} /out:<TARGET> /implib:<TARGET_IMPLIB> /pdb:<TARGET_PDB> /version:<TARGET_VERSION_MAJOR>.<TARGET_VERSION_MINOR>${_PLATFORM_LINK_FLAGS} <LINK_FLAGS> <LINK_LIBRARIES>${_CMAKE_FASTBUILD_MANIFESTS} ${CMAKE_END_TEMP_FILE}")
|
||||
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "WindowsCE")
|
||||
set(CMAKE_${lang}_CREATE_WIN32_EXE "/entry:WinMainCRTStartup")
|
||||
|
||||
@@ -277,8 +277,7 @@ bool cmFastbuildNormalTargetGenerator::DetectBaseLinkerCommand(
|
||||
vars.CMTargetType = cmState::GetTargetTypeName(targetType).c_str();
|
||||
vars.Config = Config.c_str();
|
||||
vars.Language = linkLanguage.c_str();
|
||||
std::string const manifests =
|
||||
cmJoin(this->GetManifestsAsFastbuildPath(), " ");
|
||||
std::string const manifests = this->GetManifests(Config);
|
||||
vars.Manifests = manifests.c_str();
|
||||
|
||||
std::string const stdLibString = this->Makefile->GetSafeDefinition(
|
||||
@@ -1006,27 +1005,15 @@ void cmFastbuildNormalTargetGenerator::ProcessManifests(
|
||||
if (this->GetGlobalGenerator()->GetCMakeInstance()->GetIsInTryCompile()) {
|
||||
return;
|
||||
}
|
||||
auto manifests = this->GetManifestsAsFastbuildPath();
|
||||
if (manifests.empty()) {
|
||||
return;
|
||||
}
|
||||
std::vector<std::string> const manifests =
|
||||
this->GetManifestsAsFastbuildPath();
|
||||
// Manifests should always be in .Libraries2, so we re-link when needed.
|
||||
// Tested in RunCMake.BuildDepends
|
||||
linkerNode.Libraries2.reserve(linkerNode.Libraries2.size() +
|
||||
manifests.size());
|
||||
for (auto const& manifest : manifests) {
|
||||
linkerNode.Libraries2.emplace_back(manifest);
|
||||
}
|
||||
|
||||
if (this->Makefile->GetSafeDefinition("CMAKE_C_COMPILER_ID") != "MSVC") {
|
||||
return;
|
||||
}
|
||||
|
||||
for (auto const& manifest : manifests) {
|
||||
linkerNode.LinkerOptions =
|
||||
cmStrCat("/MANIFESTINPUT:", manifest, ' ', linkerNode.LinkerOptions);
|
||||
}
|
||||
// /MANIFESTINPUT only works with /MANIFEST:EMBED
|
||||
linkerNode.LinkerOptions =
|
||||
cmStrCat("/MANIFEST:EMBED ", linkerNode.LinkerOptions);
|
||||
}
|
||||
|
||||
void cmFastbuildNormalTargetGenerator::AddStampExeIfApplicable(
|
||||
|
||||
@@ -127,3 +127,9 @@ std::string cmLocalFastbuildGenerator::ConvertToIncludeReference(
|
||||
}
|
||||
return converted;
|
||||
}
|
||||
|
||||
std::string cmLocalFastbuildGenerator::MaybeRelativeToWorkDir(
|
||||
std::string const& path) const
|
||||
{
|
||||
return this->MaybeRelativeToTopBinDir(path);
|
||||
}
|
||||
|
||||
@@ -33,4 +33,5 @@ public:
|
||||
private:
|
||||
std::string ConvertToIncludeReference(
|
||||
std::string const& path, cmOutputConverter::OutputFormat format) override;
|
||||
std::string MaybeRelativeToWorkDir(std::string const& path) const override;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user