diff options
author | Brad King <brad.king@kitware.com> | 2015-07-06 16:15:49 -0400 |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2015-07-06 16:15:49 -0400 |
commit | bf11253163b54f7c18b001cb00973a6341ee859b (patch) | |
tree | adf50cd777722e5c08168025889c08a2e7ce68da /Modules | |
parent | 8fbd9584af44100bbddd0f4031b57c5bc2530837 (diff) | |
download | cmake-bf11253163b54f7c18b001cb00973a6341ee859b.tar.gz |
Add rudimentary support for the Apple Swift language with Xcode
Allow the `Swift` language to be enabled with the Xcode generator for
Xcode >= 6.1. Reject it on other generators and with older Xcode
versions. Since Apple is the only vendor implementing the language
right now, the compiler id can be just `Apple`.
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/CMakeDetermineSwiftCompiler.cmake | 53 | ||||
-rw-r--r-- | Modules/CMakeSwiftCompiler.cmake.in | 5 | ||||
-rw-r--r-- | Modules/CMakeSwiftInformation.cmake | 41 | ||||
-rw-r--r-- | Modules/CMakeTestSwiftCompiler.cmake | 15 | ||||
-rw-r--r-- | Modules/CompilerId/main.swift.in | 1 |
5 files changed, 115 insertions, 0 deletions
diff --git a/Modules/CMakeDetermineSwiftCompiler.cmake b/Modules/CMakeDetermineSwiftCompiler.cmake new file mode 100644 index 0000000000..bff1ae9cd0 --- /dev/null +++ b/Modules/CMakeDetermineSwiftCompiler.cmake @@ -0,0 +1,53 @@ + +#============================================================================= +# Copyright 2002-2015 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake) + +if("${CMAKE_GENERATOR}" STREQUAL "Xcode") + if(XCODE_VERSION VERSION_LESS 6.1) + message(FATAL_ERROR "Swift language not supported by Xcode ${XCODE_VERSION}") + endif() + set(CMAKE_Swift_COMPILER_XCODE_TYPE sourcecode.swift) + _cmake_find_compiler_path(Swift) +else() + message(FATAL_ERROR "Swift language not supported by \"${CMAKE_GENERATOR}\" generator") +endif() + +# Build a small source file to identify the compiler. +if(NOT CMAKE_Swift_COMPILER_ID_RUN) + set(CMAKE_Swift_COMPILER_ID_RUN 1) + + list(APPEND CMAKE_Swift_COMPILER_ID_MATCH_VENDORS Apple) + set(CMAKE_Swift_COMPILER_ID_MATCH_VENDOR_REGEX_Apple "com.apple.xcode.tools.swift.compiler") + + set(CMAKE_Swift_COMPILER_ID_TOOL_MATCH_REGEX "\nCompileSwiftSources[^\n]*(\n[ \t]+[^\n]*)*\n[ \t]+([^ \t\r\n]+)[^\r\n]* -c[^\r\n]*CompilerIdSwift/CompilerId/main.swift") + set(CMAKE_Swift_COMPILER_ID_TOOL_MATCH_INDEX 2) + + # Try to identify the compiler. + set(CMAKE_Swift_COMPILER_ID) + include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerId.cmake) + CMAKE_DETERMINE_COMPILER_ID(Swift "" CompilerId/main.swift) +endif() + +if (NOT _CMAKE_TOOLCHAIN_LOCATION) + get_filename_component(_CMAKE_TOOLCHAIN_LOCATION "${CMAKE_Swift_COMPILER}" PATH) +endif () + +include(CMakeFindBinUtils) + +# configure variables set in this file for fast reload later on +configure_file(${CMAKE_ROOT}/Modules/CMakeSwiftCompiler.cmake.in + ${CMAKE_PLATFORM_INFO_DIR}/CMakeSwiftCompiler.cmake + @ONLY + ) diff --git a/Modules/CMakeSwiftCompiler.cmake.in b/Modules/CMakeSwiftCompiler.cmake.in new file mode 100644 index 0000000000..45f0a31051 --- /dev/null +++ b/Modules/CMakeSwiftCompiler.cmake.in @@ -0,0 +1,5 @@ +set(CMAKE_Swift_COMPILER "@CMAKE_Swift_COMPILER@") +set(CMAKE_Swift_COMPILER_ID "@CMAKE_Swift_COMPILER_ID@") + +set(CMAKE_Swift_COMPILER_ID_RUN 1) +set(CMAKE_Swift_SOURCE_FILE_EXTENSIONS swift) diff --git a/Modules/CMakeSwiftInformation.cmake b/Modules/CMakeSwiftInformation.cmake new file mode 100644 index 0000000000..61ad928341 --- /dev/null +++ b/Modules/CMakeSwiftInformation.cmake @@ -0,0 +1,41 @@ + +#============================================================================= +# Copyright 2004-2015 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +set(CMAKE_Swift_OUTPUT_EXTENSION .o) + +# Load compiler-specific information. +if(CMAKE_Swift_COMPILER_ID) + include(Compiler/${CMAKE_Swift_COMPILER_ID}-Swift OPTIONAL) +endif() + +# load the system- and compiler specific files +if(CMAKE_Swift_COMPILER_ID) + # load a hardware specific file, mostly useful for embedded compilers + if(CMAKE_SYSTEM_PROCESSOR) + include(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_Swift_COMPILER_ID}-Swift-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL) + endif() + include(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_Swift_COMPILER_ID}-Swift OPTIONAL) +endif() + +# for most systems a module is the same as a shared library +# so unless the variable CMAKE_MODULE_EXISTS is set just +# copy the values from the LIBRARY variables +if(NOT CMAKE_MODULE_EXISTS) + set(CMAKE_SHARED_MODULE_Swift_FLAGS ${CMAKE_SHARED_LIBRARY_Swift_FLAGS}) + set(CMAKE_SHARED_MODULE_CREATE_Swift_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_Swift_FLAGS}) +endif() + +include(CMakeCommonLanguageInclude) + +set(CMAKE_Swift_INFORMATION_LOADED 1) diff --git a/Modules/CMakeTestSwiftCompiler.cmake b/Modules/CMakeTestSwiftCompiler.cmake new file mode 100644 index 0000000000..918642654b --- /dev/null +++ b/Modules/CMakeTestSwiftCompiler.cmake @@ -0,0 +1,15 @@ + +#============================================================================= +# Copyright 2003-2015 Kitware, Inc. +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distribute this file outside of CMake, substitute the full +# License text for the above reference.) + +set(CMAKE_Swift_COMPILER_WORKS 1) diff --git a/Modules/CompilerId/main.swift.in b/Modules/CompilerId/main.swift.in new file mode 100644 index 0000000000..962e85728e --- /dev/null +++ b/Modules/CompilerId/main.swift.in @@ -0,0 +1 @@ +println("CMakeSwiftCompilerId") |