mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-11 00:11:07 -06: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_LINKER_WRAPPER_FLAG "-Xlinker" " ")
|
||||
set(CMAKE_Swift_RESPONSE_FILE_LINK_FLAG @)
|
||||
set(CMAKE_Swift_RESPONSE_FILE_FLAG @)
|
||||
|
||||
set(CMAKE_Swift_LINKER_PREFERENCE 50)
|
||||
set(CMAKE_Swift_LINKER_PREFERENCE_PROPAGATES 1)
|
||||
|
||||
@@ -453,7 +453,8 @@ void cmNinjaNormalTargetGenerator::WriteLinkRule(bool useResponseFile,
|
||||
vars.Language = lang.c_str();
|
||||
vars.AIXExports = "$AIX_EXPORTS";
|
||||
|
||||
if (this->TargetLinkLanguage(config) == "Swift") {
|
||||
if (!this->GetLocalGenerator()->IsSplitSwiftBuild() &&
|
||||
this->TargetLinkLanguage(config) == "Swift") {
|
||||
vars.SwiftLibraryName = "$SWIFT_LIBRARY_NAME";
|
||||
vars.SwiftModule = "$SWIFT_MODULE";
|
||||
vars.SwiftModuleName = "$SWIFT_MODULE_NAME";
|
||||
@@ -508,7 +509,8 @@ void cmNinjaNormalTargetGenerator::WriteLinkRule(bool useResponseFile,
|
||||
vars.LinkLibraries = "$LINK_PATH $LINK_LIBRARIES";
|
||||
}
|
||||
|
||||
if (this->TargetLinkLanguage(config) == "Swift") {
|
||||
if (!this->GetLocalGenerator()->IsSplitSwiftBuild() &&
|
||||
this->TargetLinkLanguage(config) == "Swift") {
|
||||
vars.SwiftSources = responseFlag.c_str();
|
||||
} else {
|
||||
vars.Objects = responseFlag.c_str();
|
||||
|
||||
@@ -2017,6 +2017,7 @@ void cmNinjaTargetGenerator::WriteSwiftObjectBuildStatement(
|
||||
std::string const targetObjectFilename = this->ConvertToNinjaPath(cmStrCat(
|
||||
objectDir, '/', moduleName,
|
||||
this->GetGlobalGenerator()->GetLanguageOutputExtension(language)));
|
||||
objBuild.RspFile = cmStrCat(targetObjectFilename, ".swift.rsp");
|
||||
|
||||
if (isSingleOutput) {
|
||||
this->LocalGenerator->AppendFlags(vars["FLAGS"],
|
||||
@@ -2076,7 +2077,8 @@ void cmNinjaTargetGenerator::WriteSwiftObjectBuildStatement(
|
||||
|
||||
// Write object build
|
||||
this->GetGlobalGenerator()->WriteBuild(this->GetImplFileStream(fileConfig),
|
||||
objBuild);
|
||||
objBuild,
|
||||
this->ForceResponseFile() ? -1 : 0);
|
||||
}
|
||||
|
||||
void cmNinjaTargetGenerator::WriteTargetDependInfo(std::string const& lang,
|
||||
|
||||
4
Tests/RunCMake/Swift/ForceResponseFile-check-stdout.txt
Normal file
4
Tests/RunCMake/Swift/ForceResponseFile-check-stdout.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
swiftc [^
|
||||
]* -c @CMakeFiles/L.dir/L.o.swift.rsp [^
|
||||
]*
|
||||
.*swiftc -emit-library -static -o libL.a @CMakeFiles/L.rsp.*
|
||||
13
Tests/RunCMake/Swift/ForceResponseFile.cmake
Normal file
13
Tests/RunCMake/Swift/ForceResponseFile.cmake
Normal file
@@ -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_command(CompileCommands-check ${CMAKE_COMMAND} --build ${CompileCommands_TEST_BINARY_DIR})
|
||||
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()
|
||||
elseif(RunCMake_GENERATOR STREQUAL "Ninja Multi-Config")
|
||||
if(CMake_TEST_Swift)
|
||||
|
||||
Reference in New Issue
Block a user