mirror of
https://github.com/reactos/CMake.git
synced 2025-01-19 18:02:20 +00:00
Modules: add build rules for Swift Ninja support
Add rules to support building Swift sources using Ninja.
This commit is contained in:
parent
b6412e3e38
commit
e9b0063e8e
@ -1,15 +1,46 @@
|
||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||
|
||||
|
||||
include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake)
|
||||
|
||||
# Local system-specific compiler preferences for this language.
|
||||
include(Platform/${CMAKE_SYSTEM_NAME}-Determine-Swift OPTIONAL)
|
||||
include(Platform/${CMAKE_SYSTEM_NAME}-Swift OPTIONAL)
|
||||
if(NOT CMAKE_Swift_COMPILER_NAMES)
|
||||
set(CMAKE_Swift_COMPILER_NAMES swiftc)
|
||||
endif()
|
||||
|
||||
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)
|
||||
elseif("${CMAKE_GENERATOR}" STREQUAL "Ninja")
|
||||
if(CMAKE_Swift_COMPILER)
|
||||
_cmake_find_compiler_path(Swift)
|
||||
else()
|
||||
set(CMAKE_Swift_COMPILER_INIT NOTFOUND)
|
||||
|
||||
if(NOT $ENV{SWIFTC} STREQUAL "")
|
||||
get_filename_component(CMAKE_Swift_COMPILER_INIT $ENV{SWIFTC} PROGRAM
|
||||
PROGRAM_ARGS CMAKE_Swift_FLAGS_ENV_INIT)
|
||||
if(CMAKE_Swift_FLAGS_ENV_INIT)
|
||||
set(CMAKE_Swift_COMPILER_ARG1 "${CMAKE_Swift_FLAGS_ENV_INIT}" CACHE
|
||||
STRING "First argument to the Swift compiler")
|
||||
endif()
|
||||
if(NOT EXISTS ${CMAKE_Swift_COMPILER_INIT})
|
||||
message(FATAL_ERROR "Could not find compiler set in environment variable SWIFTC\n$ENV{SWIFTC}.\n${CMAKE_Swift_COMPILER_INIT}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_Swift_COMPILER_INIT)
|
||||
set(CMAKE_Swift_COMPILER_LIST swiftc ${_CMAKE_TOOLCHAIN_PREFIX}swiftc)
|
||||
endif()
|
||||
|
||||
_cmake_find_compiler(Swift)
|
||||
endif()
|
||||
mark_as_advanced(CMAKE_Swift_COMPILER)
|
||||
else()
|
||||
message(FATAL_ERROR "Swift language not supported by \"${CMAKE_GENERATOR}\" generator")
|
||||
endif()
|
||||
@ -18,11 +49,13 @@ endif()
|
||||
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")
|
||||
if("${CMAKE_GENERATOR}" STREQUAL "Xcode")
|
||||
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)
|
||||
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)
|
||||
endif()
|
||||
|
||||
# Try to identify the compiler.
|
||||
set(CMAKE_Swift_COMPILER_ID)
|
||||
@ -40,6 +73,6 @@ unset(_CMAKE_PROCESSING_LANGUAGE)
|
||||
|
||||
# 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
|
||||
)
|
||||
${CMAKE_PLATFORM_INFO_DIR}/CMakeSwiftCompiler.cmake @ONLY)
|
||||
|
||||
set(CMAKE_Swift_COMPILER_ENV_VAR "SWIFTC")
|
||||
|
@ -1,5 +1,14 @@
|
||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||
|
||||
set(CMAKE_Swift_COMPILER "@CMAKE_Swift_COMPILER@")
|
||||
set(CMAKE_Swift_COMPILER_ID "@CMAKE_Swift_COMPILER_ID@")
|
||||
set(CMAKE_Swift_COMPILER_VERSION "@CMAKE_Swift_COMPILER_VERSION@")
|
||||
|
||||
set(CMAKE_Swift_COMPILER_LOADED 1)
|
||||
set(CMAKE_Swift_COMPILER_WORKS "@CMAKE_Swift_COMPILER_WORKS@")
|
||||
|
||||
set(CMAKE_Swift_COMPILER_ENV_VAR "SWIFTC")
|
||||
|
||||
set(CMAKE_Swift_COMPILER_ID_RUN 1)
|
||||
set(CMAKE_Swift_SOURCE_FILE_EXTENSIONS swift)
|
||||
|
@ -1,32 +1,61 @@
|
||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||
|
||||
|
||||
set(CMAKE_Swift_OUTPUT_EXTENSION .o)
|
||||
set(CMAKE_INCLUDE_FLAG_Swift "-I")
|
||||
if(UNIX)
|
||||
set(CMAKE_Swift_OUTPUT_EXTENSION .o)
|
||||
else()
|
||||
set(CMAKE_Swift_OUTPUT_EXTENSION .obj)
|
||||
endif()
|
||||
|
||||
# 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_EFFECTIVE_SYSTEM_NAME}-${CMAKE_Swift_COMPILER_ID}-Swift-${CMAKE_SYSTEM_PROCESSOR} OPTIONAL)
|
||||
endif()
|
||||
include(Platform/${CMAKE_EFFECTIVE_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})
|
||||
set(CMAKE_INCLUDE_FLAG_Swift "-I")
|
||||
set(CMAKE_INCLUDE_FLAG_SEP_Swift " ")
|
||||
set(CMAKE_Swift_DEFINE_FLAG -D)
|
||||
set(CMAKE_Swift_COMPILE_OPTIONS_TARGET "-target ")
|
||||
set(CMAKE_Swift_COMPILER_ARG1 -frontend)
|
||||
|
||||
set(CMAKE_Swift_FLAGS_DEBUG_INIT "-g")
|
||||
set(CMAKE_Swift_FLAGS_RELEASE_INIT "-O")
|
||||
set(CMAKE_Swift_FLAGS_RELWITHDEBINFO_INIT "-O -g")
|
||||
set(CMAKE_Swift_FLAGS_MINSIZEREL_INIT "-Osize")
|
||||
|
||||
# NOTE(compnerd) we do not have an object compile rule since we build the objects as part of the link step
|
||||
if(NOT CMAKE_Swift_COMPILE_OBJECT)
|
||||
set(CMAKE_Swift_COMPILE_OBJECT ":")
|
||||
endif()
|
||||
|
||||
include(CMakeCommonLanguageInclude)
|
||||
if(NOT CMAKE_Swift_CREATE_SHARED_LIBRARY)
|
||||
if(CMAKE_Swift_COMPILER_TARGET)
|
||||
set(CMAKE_Swift_CREATE_SHARED_LIBRARY "${CMAKE_Swift_COMPILER} -target <CMAKE_Swift_COMPILER_TARGET> -output-file-map <SWIFT_OUTPUT_FILE_MAP> -incremental -emit-library -o <TARGET> -module-name <SWIFT_MODULE_NAME> -module-link-name <SWIFT_LIBRARY_NAME> -emit-module -emit-module-path <SWIFT_MODULE> -emit-dependencies <FLAGS> <SWIFT_SOURCES> <LINK_FLAGS> <LINK_LIBRARIES>")
|
||||
else()
|
||||
set(CMAKE_Swift_CREATE_SHARED_LIBRARY "${CMAKE_Swift_COMPILER} -output-file-map <SWIFT_OUTPUT_FILE_MAP> -incremental -emit-library -o <TARGET> -module-name <SWIFT_MODULE_NAME> -module-link-name <SWIFT_LIBRARY_NAME> -emit-module -emit-module-path <SWIFT_MODULE> -emit-dependencies <FLAGS> <SWIFT_SOURCES> <LINK_FLAGS> <LINK_LIBRARIES>")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_Swift_CREATE_SHARED_MODULE)
|
||||
set(CMAKE_Swift_CREATE_SHARED_MODULE ${CMAKE_Swift_CREATE_SHARED_LIBRARY})
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_Swift_LINK_EXECUTABLE)
|
||||
if(CMAKE_Swift_COMPILER_TARGET)
|
||||
set(CMAKE_Swift_LINK_EXECUTABLE "${CMAKE_Swift_COMPILER} -target <CMAKE_Swift_COMPILER_TARGET> -output-file-map <SWIFT_OUTPUT_FILE_MAP> -incremental -emit-executable -o <TARGET> -emit-module -emit-module-path <SWIFT_MODULE> -emit-dependencies <FLAGS> <SWIFT_SOURCES> <LINK_FLAGS> <LINK_LIBRARIES>")
|
||||
else()
|
||||
set(CMAKE_Swift_LINK_EXECUTABLE "${CMAKE_Swift_COMPILER} -output-file-map <SWIFT_OUTPUT_FILE_MAP> -incremental -emit-executable -o <TARGET> -emit-module -emit-module-path <SWIFT_MODULE> -emit-dependencies <FLAGS> <SWIFT_SOURCES> <LINK_FLAGS> <LINK_LIBRARIES>")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_Swift_CREATE_STATIC_LIBRARY)
|
||||
set(CMAKE_Swift_ARCHIVE_CREATE "<CMAKE_AR> crs <TARGET> <OBJECTS>")
|
||||
set(CMAKE_Swift_ARCHIVE_FINISH "")
|
||||
endif()
|
||||
|
||||
set(CMAKE_Swift_INFORMATION_LOADED 1)
|
||||
|
@ -1,7 +1,6 @@
|
||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
# file Copyright.txt or https://cmake.org/licensing for details.
|
||||
|
||||
|
||||
if(CMAKE_Swift_COMPILER_FORCED)
|
||||
# The compiler configuration was forced by the user.
|
||||
# Assume the user has configured all compiler information.
|
||||
@ -23,7 +22,6 @@ unset(CMAKE_Swift_COMPILER_WORKS CACHE)
|
||||
if(NOT CMAKE_Swift_COMPILER_WORKS)
|
||||
PrintTestCompilerStatus("Swift" "")
|
||||
file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/main.swift
|
||||
"import Foundation\n"
|
||||
"print(\"CMake\")\n")
|
||||
try_compile(CMAKE_Swift_COMPILER_WORKS ${CMAKE_BINARY_DIR}
|
||||
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/main.swift
|
||||
@ -51,6 +49,11 @@ else()
|
||||
"Determining if the Swift compiler works passed with "
|
||||
"the following output:\n${__CMAKE_Swift_COMPILER_OUTPUT}\n\n")
|
||||
endif()
|
||||
|
||||
# Re-configure to save learned information.
|
||||
configure_file(${CMAKE_ROOT}/Modules/CMakeSwiftCompiler.cmake.in
|
||||
${CMAKE_PLATFORM_INFO_DIR}/CMakeSwiftCompiler.cmake @ONLY)
|
||||
include(${CMAKE_PLATFORM_INFO_DIR}/CMakeSwiftCompiler.cmake)
|
||||
endif()
|
||||
|
||||
unset(__CMAKE_Swift_COMPILER_OUTPUT)
|
||||
|
Loading…
x
Reference in New Issue
Block a user