瀏覽代碼

Merge topic 'ninja-swiftmodule-no-exe'

38c8807c5a Ninja: Avoid re-linking a Swift executable on every build

Acked-by: Kitware Robot <[email protected]>
Merge-request: !7901
Brad King 2 年之前
父節點
當前提交
1cefd1da95

+ 3 - 1
Source/cmNinjaNormalTargetGenerator.cxx

@@ -1112,7 +1112,9 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement(
           this->GetObjectFilePath(source, config));
       }
     }
-    linkBuild.Outputs.push_back(vars["SWIFT_MODULE"]);
+    if (targetType != cmStateEnums::EXECUTABLE) {
+      linkBuild.Outputs.push_back(vars["SWIFT_MODULE"]);
+    }
   } else {
     linkBuild.ExplicitDeps = this->GetObjects(config);
   }

+ 1 - 0
Tests/RunCMake/Swift/NoWorkToDo-nowork-stdout.txt

@@ -0,0 +1 @@
+^ninja: no work to do

+ 2 - 0
Tests/RunCMake/Swift/NoWorkToDo.cmake

@@ -0,0 +1,2 @@
+enable_language(Swift)
+add_executable(hello hello.swift)

+ 10 - 0
Tests/RunCMake/Swift/RunCMakeTest.cmake

@@ -14,6 +14,16 @@ elseif(RunCMake_GENERATOR STREQUAL Ninja)
       run_cmake(SwiftMultiArch)
       unset(RunCMake_TEST_OPTIONS)
     endif()
+
+    # Test that a second build with no changes does nothing.
+    block()
+      run_cmake(NoWorkToDo)
+      set(RunCMake_TEST_NO_CLEAN 1)
+      set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/NoWorkToDo-build)
+      set(RunCMake_TEST_OUTPUT_MERGE 1)
+      run_cmake_command(NoWorkToDo-build ${CMAKE_COMMAND} --build .)
+      run_cmake_command(NoWorkToDo-nowork ${CMAKE_COMMAND} --build . -- -d explain)
+    endblock()
   endif()
 elseif(RunCMake_GENERATOR STREQUAL "Ninja Multi-Config")
   if(CMAKE_Swift_COMPILER)

+ 0 - 0
Tests/RunCMake/Swift/hello.swift