Просмотр исходного кода

Swift: disallow multiple `CMAKE_OSX_ARCHITECTURES` with Swift

This disallows the use of multiple values in `CMAKE_OSX_ARCHITECTURES`
with Swift which does not support FAT compilation.
Saleem Abdulrasool 5 лет назад
Родитель
Сommit
15f6606abd

+ 11 - 0
Source/cmGlobalNinjaGenerator.cxx

@@ -660,6 +660,17 @@ bool cmGlobalNinjaGenerator::CheckLanguages(
   if (cmContains(languages, "Fortran")) {
     return this->CheckFortran(mf);
   }
+  if (cmContains(languages, "Swift")) {
+    const std::string architectures =
+      mf->GetSafeDefinition("CMAKE_OSX_ARCHITECTURES");
+    if (architectures.find_first_of(';') != std::string::npos) {
+      mf->IssueMessage(MessageType::FATAL_ERROR,
+                       "multiple values for CMAKE_OSX_ARCHITECTURES not "
+                       "supported with Swift");
+      cmSystemTools::SetFatalErrorOccured();
+      return false;
+    }
+  }
   return true;
 }
 

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

@@ -7,6 +7,10 @@ if(RunCMake_GENERATOR STREQUAL Xcode)
 elseif(RunCMake_GENERATOR STREQUAL Ninja)
   if(CMAKE_Swift_COMPILER)
     run_cmake(Win32ExecutableDisallowed)
+
+    set(RunCMake_TEST_OPTIONS -DCMAKE_SYSTEM_NAME=Darwin)
+    run_cmake(SwiftMultiArch)
+    unset(RunCMake_TEST_OPTIONS)
   endif()
 else()
   run_cmake(NotSupported)

+ 1 - 0
Tests/RunCMake/Swift/SwiftMultiArch-result.txt

@@ -0,0 +1 @@
+1

+ 4 - 0
Tests/RunCMake/Swift/SwiftMultiArch-stderr.txt

@@ -0,0 +1,4 @@
+^CMake Error at SwiftMultiArch.cmake:3 \(project\):
+  multiple values for CMAKE_OSX_ARCHITECTURES not supported with Swift
+Call Stack \(most recent call first\):
+  CMakeLists.txt:3

+ 4 - 0
Tests/RunCMake/Swift/SwiftMultiArch.cmake

@@ -0,0 +1,4 @@
+cmake_minimum_required(VERSION 3.15.1)
+set(CMAKE_OSX_ARCHITECTURES "armv7;arm64;i386;x86_64")
+project(SwiftMultiArch
+  LANGUAGES Swift)