Browse Source

Merge topic 'swift-ninja-multiconfig' into release-3.17

65b3848de0 Swift: support Ninja Multi-Config

Acked-by: Kitware Robot <[email protected]>
Merge-request: !4440
Kyle Edwards 5 years ago
parent
commit
2427bbf01c

+ 1 - 1
Modules/CMakeDetermineSwiftCompiler.cmake

@@ -16,7 +16,7 @@ if("${CMAKE_GENERATOR}" STREQUAL "Xcode")
   endif()
   set(CMAKE_Swift_COMPILER_XCODE_TYPE sourcecode.swift)
   _cmake_find_compiler_path(Swift)
-elseif("${CMAKE_GENERATOR}" STREQUAL "Ninja")
+elseif("${CMAKE_GENERATOR}" MATCHES "^Ninja")
   if(CMAKE_Swift_COMPILER)
     _cmake_find_compiler_path(Swift)
   else()

+ 3 - 3
Source/cmNinjaNormalTargetGenerator.cxx

@@ -873,11 +873,11 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement(
         cmOutputConverter::SHELL);
     }(vars["SWIFT_MODULE_NAME"]);
 
+    const std::string map = cmStrCat(gt->GetSupportDirectory(), '/', config,
+                                     '/', "output-file-map.json");
     vars["SWIFT_OUTPUT_FILE_MAP"] =
       this->GetLocalGenerator()->ConvertToOutputFormat(
-        this->ConvertToNinjaPath(gt->GetSupportDirectory() +
-                                 "/output-file-map.json"),
-        cmOutputConverter::SHELL);
+        this->ConvertToNinjaPath(map), cmOutputConverter::SHELL);
 
     vars["SWIFT_SOURCES"] = [this, config]() -> std::string {
       std::vector<cmSourceFile const*> sources;

+ 2 - 1
Source/cmNinjaTargetGenerator.cxx

@@ -953,7 +953,8 @@ void cmNinjaTargetGenerator::WriteObjectBuildStatements(
 
   if (!this->Configs[config].SwiftOutputMap.empty()) {
     std::string const mapFilePath =
-      this->GeneratorTarget->GetSupportDirectory() + "/output-file-map.json";
+      cmStrCat(this->GeneratorTarget->GetSupportDirectory(), '/', config, '/',
+               "output-file-map.json");
     std::string const targetSwiftDepsPath = [this, config]() -> std::string {
       cmGeneratorTarget const* target = this->GeneratorTarget;
       if (const char* name = target->GetProperty("Swift_DEPENDENCIES_FILE")) {

+ 1 - 0
Tests/RunCMake/Swift/L.swift

@@ -0,0 +1 @@
+public let ThirtyTwo: Int = 32

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

@@ -12,6 +12,12 @@ elseif(RunCMake_GENERATOR STREQUAL Ninja)
     run_cmake(SwiftMultiArch)
     unset(RunCMake_TEST_OPTIONS)
   endif()
+elseif(RunCMake_GENERATOR STREQUAL "Ninja Multi-Config")
+  if(CMAKE_Swift_COMPILER)
+    set(RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=Debug\\;Release")
+    run_cmake(SwiftSimple)
+    unset(RunCMake_TEST_OPTIONS)
+  endif()
 else()
   run_cmake(NotSupported)
 endif()

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

@@ -0,0 +1,2 @@
+enable_language(Swift)
+add_library(L L.swift)