mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
This change introduces a new compilation target platform to the Swift compiler - visionOS. - Changes to the compiler build infrastrucuture to support building compiler-adjacent artifacts and test suites for the new target. - Addition of the new platform kind definition. - Support for the new platform in language constructs such as compile-time availability annotations or runtime OS version queries. - Utilities to read out Darwin platform SDK info containing platform mapping data. - Utilities to support re-mapping availability annotations from iOS to visionOS (e.g. 'updateIntroducedPlatformForFallback', 'updateDeprecatedPlatformForFallback', 'updateObsoletedPlatformForFallback'). - Additional tests exercising platform-specific availability handling and availability re-mapping fallback code-path. - Changes to existing test suite to accomodate the new platform.
155 lines
5.4 KiB
CMake
155 lines
5.4 KiB
CMake
# In some configurations (e.g. back deploy concurrency) we
|
|
# configure the build from the root of the Swift repo but we skip
|
|
# stdlib/CMakeLists.txt, with the risk of missing important parameters.
|
|
# To account for this scenario, we include the stdlib options
|
|
# before the guard
|
|
include(${CMAKE_CURRENT_LIST_DIR}/../../stdlib/cmake/modules/StdlibOptions.cmake)
|
|
|
|
# CMAKE_SOURCE_DIR is the directory that cmake got initially invoked on.
|
|
# CMAKE_CURRENT_SOURCE_DIR is the current directory. If these are equal, it's
|
|
# a top-level build of the CMAKE_SOURCE_DIR. Otherwise, define a guard variable
|
|
# and return.
|
|
if(DEFINED SWIFT_MASTER_LOADED
|
|
OR NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
|
|
set(SWIFT_MASTER_LOADED TRUE)
|
|
return()
|
|
endif()
|
|
|
|
|
|
list(APPEND CMAKE_MODULE_PATH
|
|
"${SWIFT_SOURCE_ROOT}/llvm-project/llvm/cmake/modules"
|
|
"${PROJECT_SOURCE_DIR}/../../../../cmake/modules"
|
|
"${PROJECT_SOURCE_DIR}/../../../cmake/modules")
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Preconditions
|
|
|
|
include(SwiftUtils)
|
|
|
|
precondition(CMAKE_INSTALL_PREFIX)
|
|
precondition(SWIFT_DEST_ROOT)
|
|
precondition(SWIFT_HOST_VARIANT_SDK)
|
|
precondition(SWIFT_SOURCE_ROOT)
|
|
precondition(TOOLCHAIN_DIR)
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Cache Variables and Options
|
|
|
|
set(SWIFT_SOURCE_DIR "${SWIFT_SOURCE_ROOT}/swift" CACHE PATH
|
|
"Path to the directory containing the Swift sources.")
|
|
|
|
set(SWIFT_DARWIN_XCRUN_TOOLCHAIN "XcodeDefault" CACHE STRING
|
|
"The name of the toolchain to pass to 'xcrun'.")
|
|
|
|
set(SWIFT_DARWIN_DEPLOYMENT_VERSION_OSX "10.9" CACHE STRING
|
|
"Minimum deployment target version for macOS.")
|
|
set(SWIFT_DARWIN_DEPLOYMENT_VERSION_IOS "7.0" CACHE STRING
|
|
"Minimum deployment target version for iOS.")
|
|
set(SWIFT_DARWIN_DEPLOYMENT_VERSION_TVOS "9.0" CACHE STRING
|
|
"Minimum deployment target version for tvOS.")
|
|
set(SWIFT_DARWIN_DEPLOYMENT_VERSION_WATCHOS "2.0" CACHE STRING
|
|
"Minimum deployment target version for watchOS.")
|
|
|
|
set(SWIFT_INSTALL_COMPONENTS "sdk-overlay" CACHE STRING
|
|
"A semicolon-separated list of install components.")
|
|
|
|
set(SWIFT_SDKS "${SWIFT_HOST_VARIANT_SDK}" CACHE STRING
|
|
"List of Swift SDKs to build.")
|
|
|
|
set(SWIFT_NATIVE_LLVM_TOOLS_PATH "${TOOLCHAIN_DIR}/usr/bin" CACHE STRING
|
|
"Path to LLVM tools that are executable on the build machine.")
|
|
set(SWIFT_NATIVE_CLANG_TOOLS_PATH "${TOOLCHAIN_DIR}/usr/bin" CACHE STRING
|
|
"Path to Clang tools that are executable on the build machine.")
|
|
set(SWIFT_NATIVE_SWIFT_TOOLS_PATH "${TOOLCHAIN_DIR}/usr/bin" CACHE STRING
|
|
"Path to Swift tools that are executable on the build machine.")
|
|
|
|
# NOTE: The initialization in stdlib/CMakeLists.txt will be bypassed if we
|
|
# directly invoke CMake for this directory, so we initialize the variables
|
|
# related to library evolution here as well.
|
|
|
|
option(SWIFT_STDLIB_STABLE_ABI
|
|
"Should stdlib be built with stable ABI (library evolution, resilience)."
|
|
TRUE)
|
|
|
|
option(SWIFT_ENABLE_MODULE_INTERFACES
|
|
"Generate .swiftinterface files alongside .swiftmodule files."
|
|
"${SWIFT_STDLIB_STABLE_ABI}")
|
|
|
|
set(SWIFT_STDLIB_BUILD_TYPE "${CMAKE_BUILD_TYPE}" CACHE STRING
|
|
"Build type for the Swift standard library and SDK overlays.")
|
|
|
|
file(STRINGS "../../utils/availability-macros.def" SWIFT_STDLIB_AVAILABILITY_DEFINITIONS)
|
|
list(FILTER SWIFT_STDLIB_AVAILABILITY_DEFINITIONS EXCLUDE REGEX "^\\s*(#.*)?$")
|
|
|
|
set(SWIFT_DARWIN_SUPPORTED_ARCHS "" CACHE STRING
|
|
"Semicolon-separated list of architectures to configure on Darwin platforms. \
|
|
If left empty all default architectures are configured.")
|
|
|
|
set(SWIFT_DARWIN_MODULE_ARCHS "" CACHE STRING
|
|
"Semicolon-separated list of architectures to configure Swift module-only \
|
|
targets on Darwin platforms. These targets are in addition to the full \
|
|
library targets.")
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Constants
|
|
|
|
set(CMAKE_INSTALL_PREFIX
|
|
"${SWIFT_DEST_ROOT}${TOOLCHAIN_DIR}/usr")
|
|
|
|
|
|
set(SWIFT_DARWIN_PLATFORMS
|
|
OSX IOS IOS_SIMULATOR TVOS TVOS_SIMULATOR WATCHOS WATCHOS_SIMULATOR XROS XROS_SIMULATOR)
|
|
|
|
# Flags used to indicate we are building a standalone overlay.
|
|
# FIXME: We should cut this down to a single flag.
|
|
set(BUILD_STANDALONE TRUE)
|
|
set(SWIFT_BUILD_STANDALONE_OVERLAY TRUE)
|
|
|
|
set(SWIFT_STDLIB_LIBRARY_BUILD_TYPES "SHARED")
|
|
set(SWIFT_SDK_OVERLAY_LIBRARY_BUILD_TYPES "SHARED")
|
|
|
|
option(SWIFT_ENABLE_MACCATALYST
|
|
"Build the overlays with macCatalyst support"
|
|
FALSE)
|
|
|
|
set(SWIFT_DARWIN_DEPLOYMENT_VERSION_MACCATALYST "13.0" CACHE STRING
|
|
"Minimum deployment target version for macCatalyst")
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
include(SwiftToolchainUtils)
|
|
if(NOT SWIFT_LIPO)
|
|
find_toolchain_tool(SWIFT_LIPO "${SWIFT_DARWIN_XCRUN_TOOLCHAIN}" lipo)
|
|
endif()
|
|
|
|
include(AddLLVM)
|
|
include(SwiftSharedCMakeConfig)
|
|
include(AddSwift)
|
|
include(SwiftHandleGybSources)
|
|
include(SwiftConfigureSDK)
|
|
include(SwiftComponents)
|
|
include(DarwinSDKs)
|
|
|
|
find_package(Python3 COMPONENTS Interpreter REQUIRED)
|
|
|
|
# Without this line, installing components is broken. This needs refactoring.
|
|
swift_configure_components()
|
|
|
|
|
|
list_subtract(
|
|
"${SWIFT_SDKS}"
|
|
"${SWIFT_CONFIGURED_SDKS}"
|
|
unknown_sdks)
|
|
|
|
precondition(unknown_sdks NEGATE
|
|
MESSAGE
|
|
"Unknown SDKs: ${unknown_sdks}")
|
|
|
|
|
|
# Some overlays include the runtime's headers, and some of those headers are
|
|
# generated at build time.
|
|
add_subdirectory("${SWIFT_SOURCE_DIR}/include" "${SWIFT_SOURCE_DIR}/include")
|
|
add_subdirectory("${SWIFT_SOURCE_DIR}/apinotes" "${SWIFT_SOURCE_DIR}/apinotes")
|