mirror of
https://github.com/Kitware/CMake.git
synced 2026-04-30 02:59:22 -05:00
Swift/Ninja: Add support for response files
Adding support for `CMAKE_NINJA_FORCE_RESPONSE_FILE` with Swift. Issue: #25490 Fixes: #25563
This commit is contained in:
@@ -56,6 +56,7 @@ set(CMAKE_Swift_LIBRARY_PATH_TERMINATOR "")
|
|||||||
set(CMAKE_Swift_LINK_LIBRARY_FLAG "-l")
|
set(CMAKE_Swift_LINK_LIBRARY_FLAG "-l")
|
||||||
set(CMAKE_Swift_LINKER_WRAPPER_FLAG "-Xlinker" " ")
|
set(CMAKE_Swift_LINKER_WRAPPER_FLAG "-Xlinker" " ")
|
||||||
set(CMAKE_Swift_RESPONSE_FILE_LINK_FLAG @)
|
set(CMAKE_Swift_RESPONSE_FILE_LINK_FLAG @)
|
||||||
|
set(CMAKE_Swift_RESPONSE_FILE_FLAG @)
|
||||||
|
|
||||||
set(CMAKE_Swift_LINKER_PREFERENCE 50)
|
set(CMAKE_Swift_LINKER_PREFERENCE 50)
|
||||||
set(CMAKE_Swift_LINKER_PREFERENCE_PROPAGATES 1)
|
set(CMAKE_Swift_LINKER_PREFERENCE_PROPAGATES 1)
|
||||||
|
|||||||
@@ -453,7 +453,8 @@ void cmNinjaNormalTargetGenerator::WriteLinkRule(bool useResponseFile,
|
|||||||
vars.Language = lang.c_str();
|
vars.Language = lang.c_str();
|
||||||
vars.AIXExports = "$AIX_EXPORTS";
|
vars.AIXExports = "$AIX_EXPORTS";
|
||||||
|
|
||||||
if (this->TargetLinkLanguage(config) == "Swift") {
|
if (!this->GetLocalGenerator()->IsSplitSwiftBuild() &&
|
||||||
|
this->TargetLinkLanguage(config) == "Swift") {
|
||||||
vars.SwiftLibraryName = "$SWIFT_LIBRARY_NAME";
|
vars.SwiftLibraryName = "$SWIFT_LIBRARY_NAME";
|
||||||
vars.SwiftModule = "$SWIFT_MODULE";
|
vars.SwiftModule = "$SWIFT_MODULE";
|
||||||
vars.SwiftModuleName = "$SWIFT_MODULE_NAME";
|
vars.SwiftModuleName = "$SWIFT_MODULE_NAME";
|
||||||
@@ -508,7 +509,8 @@ void cmNinjaNormalTargetGenerator::WriteLinkRule(bool useResponseFile,
|
|||||||
vars.LinkLibraries = "$LINK_PATH $LINK_LIBRARIES";
|
vars.LinkLibraries = "$LINK_PATH $LINK_LIBRARIES";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this->TargetLinkLanguage(config) == "Swift") {
|
if (!this->GetLocalGenerator()->IsSplitSwiftBuild() &&
|
||||||
|
this->TargetLinkLanguage(config) == "Swift") {
|
||||||
vars.SwiftSources = responseFlag.c_str();
|
vars.SwiftSources = responseFlag.c_str();
|
||||||
} else {
|
} else {
|
||||||
vars.Objects = responseFlag.c_str();
|
vars.Objects = responseFlag.c_str();
|
||||||
|
|||||||
@@ -2017,6 +2017,7 @@ void cmNinjaTargetGenerator::WriteSwiftObjectBuildStatement(
|
|||||||
std::string const targetObjectFilename = this->ConvertToNinjaPath(cmStrCat(
|
std::string const targetObjectFilename = this->ConvertToNinjaPath(cmStrCat(
|
||||||
objectDir, '/', moduleName,
|
objectDir, '/', moduleName,
|
||||||
this->GetGlobalGenerator()->GetLanguageOutputExtension(language)));
|
this->GetGlobalGenerator()->GetLanguageOutputExtension(language)));
|
||||||
|
objBuild.RspFile = cmStrCat(targetObjectFilename, ".swift.rsp");
|
||||||
|
|
||||||
if (isSingleOutput) {
|
if (isSingleOutput) {
|
||||||
this->LocalGenerator->AppendFlags(vars["FLAGS"],
|
this->LocalGenerator->AppendFlags(vars["FLAGS"],
|
||||||
@@ -2076,7 +2077,8 @@ void cmNinjaTargetGenerator::WriteSwiftObjectBuildStatement(
|
|||||||
|
|
||||||
// Write object build
|
// Write object build
|
||||||
this->GetGlobalGenerator()->WriteBuild(this->GetImplFileStream(fileConfig),
|
this->GetGlobalGenerator()->WriteBuild(this->GetImplFileStream(fileConfig),
|
||||||
objBuild);
|
objBuild,
|
||||||
|
this->ForceResponseFile() ? -1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmNinjaTargetGenerator::WriteTargetDependInfo(std::string const& lang,
|
void cmNinjaTargetGenerator::WriteTargetDependInfo(std::string const& lang,
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
swiftc [^
|
||||||
|
]* -c @CMakeFiles/L.dir/L.o.swift.rsp [^
|
||||||
|
]*
|
||||||
|
.*swiftc -emit-library -static -o libL.a @CMakeFiles/L.rsp.*
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
if(POLICY CMP0157)
|
||||||
|
cmake_policy(SET CMP0157 NEW)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT CMAKE_GENERATOR STREQUAL "Ninja")
|
||||||
|
message(SEND_ERROR "this test must use Ninja generator, found ${CMAKE_GENERATOR} ")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(CMAKE_NINJA_FORCE_RESPONSE_FILE TRUE)
|
||||||
|
|
||||||
|
enable_language(Swift)
|
||||||
|
|
||||||
|
add_library(L STATIC L.swift)
|
||||||
@@ -69,6 +69,13 @@ elseif(RunCMake_GENERATOR STREQUAL Ninja)
|
|||||||
run_cmake(CompileCommands)
|
run_cmake(CompileCommands)
|
||||||
run_cmake_command(CompileCommands-check ${CMAKE_COMMAND} --build ${CompileCommands_TEST_BINARY_DIR})
|
run_cmake_command(CompileCommands-check ${CMAKE_COMMAND} --build ${CompileCommands_TEST_BINARY_DIR})
|
||||||
endblock()
|
endblock()
|
||||||
|
|
||||||
|
block()
|
||||||
|
set(ForceResponseFile_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/ForceResponseFile-build)
|
||||||
|
run_cmake(ForceResponseFile)
|
||||||
|
# -v: verbose to capture executed commands -n: dry-run to avoid actually compiling
|
||||||
|
run_cmake_command(ForceResponseFile-check ${CMAKE_COMMAND} --build ${ForceResponseFile_TEST_BINARY_DIR} -- -vn)
|
||||||
|
endblock()
|
||||||
endif()
|
endif()
|
||||||
elseif(RunCMake_GENERATOR STREQUAL "Ninja Multi-Config")
|
elseif(RunCMake_GENERATOR STREQUAL "Ninja Multi-Config")
|
||||||
if(CMake_TEST_Swift)
|
if(CMake_TEST_Swift)
|
||||||
|
|||||||
Reference in New Issue
Block a user