mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
151 lines
6.2 KiB
CMake
151 lines
6.2 KiB
CMake
# Variable that tracks the set of configured SDKs.
|
|
#
|
|
# Each element in this list is an SDK for which the various
|
|
# SWIFT_SDK_${name}_* variables are defined. Swift libraries will be
|
|
# built for each variant.
|
|
set(SWIFT_CONFIGURED_SDKS)
|
|
|
|
# Report the given SDK to the user.
|
|
function(_report_sdk prefix)
|
|
message(STATUS "${SWIFT_SDK_${prefix}_NAME} SDK:")
|
|
message(STATUS " Path: ${SWIFT_SDK_${prefix}_PATH}")
|
|
message(STATUS " Version: ${SWIFT_SDK_${prefix}_VERSION}")
|
|
message(STATUS " Build number: ${SWIFT_SDK_${prefix}_BUILD_NUMBER}")
|
|
message(STATUS " Deployment version: ${SWIFT_SDK_${prefix}_DEPLOYMENT_VERSION}")
|
|
message(STATUS " Library subdir: ${SWIFT_SDK_${prefix}_LIB_SUBDIR}")
|
|
message(STATUS " Version min name: ${SWIFT_SDK_${prefix}_VERSION_MIN_NAME}")
|
|
message(STATUS " Triple name: ${SWIFT_SDK_${prefix}_TRIPLE_NAME}")
|
|
message(STATUS " Architectures: ${SWIFT_SDK_${prefix}_ARCHITECTURES}")
|
|
|
|
foreach(arch ${SWIFT_SDK_${prefix}_ARCHITECTURES})
|
|
message(STATUS
|
|
" Triple for ${arch} is ${SWIFT_SDK_${prefix}_ARCH_${arch}_TRIPLE}")
|
|
endforeach()
|
|
|
|
message(STATUS "")
|
|
endfunction()
|
|
|
|
# Configure an SDK
|
|
#
|
|
# Usage:
|
|
# configure_sdk_darwin(
|
|
# prefix # Prefix to use for SDK variables (e.g., OSX)
|
|
# name # Display name for this SDK
|
|
# deployment_version # Deployment version
|
|
# xcrun_name # SDK name to use with xcrun
|
|
# version_min_name # The name used in the -mOS-version-min flag
|
|
# triple_name # The name used in Swift's -triple
|
|
# architectures # A list of architectures this SDK supports
|
|
# )
|
|
#
|
|
# Sadly there are three OS naming conventions.
|
|
# xcrun SDK name: macosx iphoneos iphonesimulator (+ version)
|
|
# -mOS-version-min: macosx ios ios-simulator
|
|
# swift -triple: macosx ios ios
|
|
#
|
|
# This macro attempts to configure a given SDK. When successful, it
|
|
# defines a number of variables:
|
|
#
|
|
# SWIFT_SDK_${prefix}_NAME Display name for the SDK
|
|
# SWIFT_SDK_${prefix}_VERSION SDK version number (e.g., 10.9, 7.0)
|
|
# SWIFT_SDK_${prefix}_BUILD_NUMBER SDK build number (e.g., 14A389a)
|
|
# SWIFT_SDK_${prefix}_DEPLOYMENT_VERSION Deployment version (e.g., 10.9, 7.0)
|
|
# SWIFT_SDK_${prefix}_LIB_SUBDIR Library subdir for this SDK
|
|
# SWIFT_SDK_${prefix}_VERSION_MIN_NAME Version min name for this SDK
|
|
# SWIFT_SDK_${prefix}_TRIPLE_NAME Triple name for this SDK
|
|
# SWIFT_SDK_${prefix}_ARCHITECTURES Architectures (as a list)
|
|
# SWIFT_SDK_${prefix}_ARCH_${ARCH}_TRIPLE Triple name
|
|
macro(configure_sdk_darwin
|
|
prefix name deployment_version xcrun_name
|
|
version_min_name triple_name architectures)
|
|
# Note: this has to be implemented as a macro because it sets global
|
|
# variables.
|
|
|
|
# Find the SDK
|
|
set(SWIFT_SDK_${prefix}_PATH "" CACHE PATH "Path to the ${name} SDK")
|
|
|
|
if(NOT SWIFT_SDK_${prefix}_PATH)
|
|
execute_process(
|
|
COMMAND "xcrun" "--sdk" "${xcrun_name}" "--show-sdk-path"
|
|
OUTPUT_VARIABLE SWIFT_SDK_${prefix}_PATH
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
if(NOT EXISTS "${SWIFT_SDK_${prefix}_PATH}/System/Library/Frameworks/module.map")
|
|
message(FATAL_ERROR "${name} SDK not found at ${SWIFT_SDK_${prefix}_PATH}.")
|
|
endif()
|
|
endif()
|
|
|
|
if(NOT EXISTS "${SWIFT_SDK_${prefix}_PATH}/System/Library/Frameworks/module.map")
|
|
message(FATAL_ERROR "${name} SDK not found at ${SWIFT_SDK_${prefix}_PATH}.")
|
|
endif()
|
|
|
|
# Determine the SDK version we found.
|
|
execute_process(
|
|
COMMAND "defaults" "read" "${SWIFT_SDK_${prefix}_PATH}/SDKSettings.plist" "Version"
|
|
OUTPUT_VARIABLE SWIFT_SDK_${prefix}_VERSION
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
|
|
execute_process(
|
|
COMMAND "xcodebuild" "-sdk" "${SWIFT_SDK_${prefix}_PATH}" "-version" "ProductBuildVersion"
|
|
OUTPUT_VARIABLE SWIFT_SDK_${prefix}_BUILD_NUMBER
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
|
|
# Set other variables.
|
|
set(SWIFT_SDK_${prefix}_NAME "${name}")
|
|
set(SWIFT_SDK_${prefix}_DEPLOYMENT_VERSION "${deployment_version}")
|
|
set(SWIFT_SDK_${prefix}_LIB_SUBDIR "${xcrun_name}")
|
|
set(SWIFT_SDK_${prefix}_VERSION_MIN_NAME "${version_min_name}")
|
|
set(SWIFT_SDK_${prefix}_TRIPLE_NAME "${triple_name}")
|
|
set(SWIFT_SDK_${prefix}_ARCHITECTURES "${architectures}")
|
|
|
|
foreach(arch ${architectures})
|
|
set(SWIFT_SDK_${prefix}_ARCH_${arch}_TRIPLE
|
|
"${arch}-apple-${SWIFT_SDK_${prefix}_TRIPLE_NAME}${SWIFT_SDK_${prefix}_DEPLOYMENT_VERSION}")
|
|
endforeach()
|
|
|
|
# Add this to the list of known SDKs.
|
|
list(APPEND SWIFT_CONFIGURED_SDKS "${prefix}")
|
|
|
|
_report_sdk("${prefix}")
|
|
endmacro()
|
|
|
|
macro(configure_sdk_unix
|
|
prefix name lib_subdir triple_name arch triple)
|
|
# Note: this has to be implemented as a macro because it sets global
|
|
# variables.
|
|
|
|
set(SWIFT_SDK_${prefix}_NAME "${name}")
|
|
set(SWIFT_SDK_${prefix}_PATH "/")
|
|
set(SWIFT_SDK_${prefix}_VERSION "don't use")
|
|
set(SWIFT_SDK_${prefix}_BUILD_NUMBER "don't use")
|
|
set(SWIFT_SDK_${prefix}_DEPLOYMENT_VERSION "don't use")
|
|
set(SWIFT_SDK_${prefix}_LIB_SUBDIR "${lib_subdir}")
|
|
set(SWIFT_SDK_${prefix}_VERSION_MIN_NAME "")
|
|
set(SWIFT_SDK_${prefix}_TRIPLE_NAME "${triple_name}")
|
|
set(SWIFT_SDK_${prefix}_ARCHITECTURES "${arch}")
|
|
|
|
set(SWIFT_SDK_${prefix}_ARCH_${arch}_TRIPLE "${triple}")
|
|
|
|
# Add this to the list of known SDKs.
|
|
list(APPEND SWIFT_CONFIGURED_SDKS "${prefix}")
|
|
|
|
_report_sdk("${prefix}")
|
|
endmacro()
|
|
|
|
# Configure a variant of a certain SDK
|
|
#
|
|
# In addition to the SDK and architecture, a variant determines build settings.
|
|
#
|
|
# FIXME: this is not wired up with anything yet.
|
|
function(configure_target_variant prefix name sdk build_config lib_subdir)
|
|
set(SWIFT_VARIANT_${prefix}_NAME ${name})
|
|
set(SWIFT_VARIANT_${prefix}_SDK_PATH ${SWIFT_SDK_${sdk}_PATH})
|
|
set(SWIFT_VARIANT_${prefix}_VERSION ${SWIFT_SDK_${sdk}_VERSION})
|
|
set(SWIFT_VARIANT_${prefix}_BUILD_NUMBER ${SWIFT_SDK_${sdk}_BUILD_NUMBER})
|
|
set(SWIFT_VARIANT_${prefix}_DEPLOYMENT_VERSION ${SWIFT_SDK_${sdk}_DEPLOYMENT_VERSION})
|
|
set(SWIFT_VARIANT_${prefix}_LIB_SUBDIR "${lib_subdir}/${SWIFT_SDK_${sdk}_LIB_SUBDIR}")
|
|
set(SWIFT_VARIANT_${prefix}_VERSION_MIN_NAME ${SWIFT_SDK_${sdk}_VERSION_MIN_NAME})
|
|
set(SWIFT_VARIANT_${prefix}_TRIPLE_NAME ${SWIFT_SDK_${sdk}_TRIPLE_NAME})
|
|
set(SWIFT_VARIANT_${prefix}_ARCHITECTURES ${SWIFT_SDK_${sdk}_ARCHITECTURES})
|
|
endfunction()
|
|
|