From 49d50ad40719722236c7867bd69e7ab414224c49 Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 23 Sep 2016 11:43:08 -0400 Subject: Xcode: Port rudimentary Swift support to Xcode 8 The `.pbxproj` file must now specify a `SWIFT_VERSION` value. Set it to the legacy value of "2.3" for now. Later this can be made configurable (e.g. to "3.0"). --- Modules/CMakeDetermineCompilerId.cmake | 5 +++++ Modules/CompilerId/Xcode-3.pbxproj.in | 1 + Source/cmGlobalXCodeGenerator.cxx | 3 +++ 3 files changed, 9 insertions(+) diff --git a/Modules/CMakeDetermineCompilerId.cmake b/Modules/CMakeDetermineCompilerId.cmake index 64d9bed..3d1ca6d 100644 --- a/Modules/CMakeDetermineCompilerId.cmake +++ b/Modules/CMakeDetermineCompilerId.cmake @@ -266,6 +266,11 @@ Id flags: ${testflags} else() set(id_toolset "") endif() + if("${lang}" STREQUAL "Swift") + set(id_lang_version "SWIFT_VERSION = 2.3;") + else() + set(id_lang_version "") + endif() if(CMAKE_OSX_DEPLOYMENT_TARGET) set(id_deployment_target "MACOSX_DEPLOYMENT_TARGET = \"${CMAKE_OSX_DEPLOYMENT_TARGET}\";") diff --git a/Modules/CompilerId/Xcode-3.pbxproj.in b/Modules/CompilerId/Xcode-3.pbxproj.in index 20f3da3..22ad4f6 100644 --- a/Modules/CompilerId/Xcode-3.pbxproj.in +++ b/Modules/CompilerId/Xcode-3.pbxproj.in @@ -84,6 +84,7 @@ CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)"; SYMROOT = .; @id_toolset@ + @id_lang_version@ @id_deployment_target@ @id_sdkroot@ }; diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx index 997f46c..42d97db 100644 --- a/Source/cmGlobalXCodeGenerator.cxx +++ b/Source/cmGlobalXCodeGenerator.cxx @@ -2996,6 +2996,9 @@ bool cmGlobalXCodeGenerator::CreateXCodeObjects( buildSettings->AddAttribute("GCC_VERSION", this->CreateString(this->GeneratorToolset)); } + if (this->GetLanguageEnabled("Swift")) { + buildSettings->AddAttribute("SWIFT_VERSION", this->CreateString("2.3")); + } std::string symroot = root->GetCurrentBinaryDirectory(); symroot += "/build"; -- cgit v0.12 From b35568f3f9f9b8f4b5b2a2e6f4d524540980c3ae Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 23 Sep 2016 13:25:35 -0400 Subject: Xcode: Add option to set Swift language version Create a new CMAKE_Swift_LANGUAGE_VERSION variable to specify the SWIFT_VERSION attribute in a generated Xcode project. Ideally this would be a `_STANDARD` property but since Swift support is very minimal we should reserve that property for more complete treatment later. Issue: #16326 --- Help/manual/cmake-variables.7.rst | 1 + Help/release/dev/xcode-swift-version.rst | 6 ++++++ Help/variable/CMAKE_Swift_LANGUAGE_VERSION.rst | 5 +++++ Source/cmGlobalXCodeGenerator.cxx | 8 +++++++- Tests/SwiftOnly/CMakeLists.txt | 4 ++++ 5 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 Help/release/dev/xcode-swift-version.rst create mode 100644 Help/variable/CMAKE_Swift_LANGUAGE_VERSION.rst diff --git a/Help/manual/cmake-variables.7.rst b/Help/manual/cmake-variables.7.rst index 9e0efe9..d9da3d6 100644 --- a/Help/manual/cmake-variables.7.rst +++ b/Help/manual/cmake-variables.7.rst @@ -396,6 +396,7 @@ Variables for Languages /variable/CMAKE_LANG_SOURCE_FILE_EXTENSIONS /variable/CMAKE_LANG_STANDARD_INCLUDE_DIRECTORIES /variable/CMAKE_LANG_STANDARD_LIBRARIES + /variable/CMAKE_Swift_LANGUAGE_VERSION /variable/CMAKE_USER_MAKE_RULES_OVERRIDE_LANG Variables for CTest diff --git a/Help/release/dev/xcode-swift-version.rst b/Help/release/dev/xcode-swift-version.rst new file mode 100644 index 0000000..5dff23c --- /dev/null +++ b/Help/release/dev/xcode-swift-version.rst @@ -0,0 +1,6 @@ +xcode-swift-version +------------------- + +* The :generator:`Xcode` generator's rudimentary Swift language support + learned to honor a new :variable:`CMAKE_Swift_LANGUAGE_VERSION` variable + to tell Xcode what version of Swift is used by the source. diff --git a/Help/variable/CMAKE_Swift_LANGUAGE_VERSION.rst b/Help/variable/CMAKE_Swift_LANGUAGE_VERSION.rst new file mode 100644 index 0000000..50121e2 --- /dev/null +++ b/Help/variable/CMAKE_Swift_LANGUAGE_VERSION.rst @@ -0,0 +1,5 @@ +CMAKE_Swift_LANGUAGE_VERSION +---------------------------- + +Set to the Swift language version number. If not set, the legacy "2.3" +version is assumed. diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx index 42d97db..0d5de06 100644 --- a/Source/cmGlobalXCodeGenerator.cxx +++ b/Source/cmGlobalXCodeGenerator.cxx @@ -2997,7 +2997,13 @@ bool cmGlobalXCodeGenerator::CreateXCodeObjects( this->CreateString(this->GeneratorToolset)); } if (this->GetLanguageEnabled("Swift")) { - buildSettings->AddAttribute("SWIFT_VERSION", this->CreateString("2.3")); + std::string swiftVersion = "2.3"; + if (const char* vers = this->CurrentMakefile->GetDefinition( + "CMAKE_Swift_LANGUAGE_VERSION")) { + swiftVersion = vers; + } + buildSettings->AddAttribute("SWIFT_VERSION", + this->CreateString(swiftVersion)); } std::string symroot = root->GetCurrentBinaryDirectory(); diff --git a/Tests/SwiftOnly/CMakeLists.txt b/Tests/SwiftOnly/CMakeLists.txt index 5cb9739..cf4463c 100644 --- a/Tests/SwiftOnly/CMakeLists.txt +++ b/Tests/SwiftOnly/CMakeLists.txt @@ -1,4 +1,8 @@ cmake_minimum_required(VERSION 3.3) project(SwiftOnly Swift) +if(NOT XCODE_VERSION VERSION_LESS 8.0) + set(CMAKE_Swift_LANGUAGE_VERSION 3.0) +endif() + add_executable(SwiftOnly main.swift) -- cgit v0.12