blob: 2d197f077ea1a3ec3bf1058b762ef6e10df310f4 [file] [log] [blame]
set(swift_platform_sources
Platform.swift
TiocConstants.swift)
set(swift_platform_gyb_sources
# SWIFT_ENABLE_TENSORFLOW_START
../Differentiation/TgmathDerivatives.swift.gyb
# SWIFT_ENABLE_TENSORFLOW_END
tgmath.swift.gyb)
set(darwin_depends)
if(NOT BUILD_STANDALONE)
# This is overly conservative, but we have so few API notes files that
# haven't migrated to the Swift repo that it's probably fine in practice.
list(APPEND darwin_depends copy_apinotes)
endif()
add_swift_target_library(swiftDarwin ${SWIFT_STDLIB_LIBRARY_BUILD_TYPES} IS_SDK_OVERLAY
${swift_platform_sources}
POSIXError.swift
MachError.swift
"${SWIFT_SOURCE_DIR}/stdlib/linker-support/magic-symbols-for-install-name.c"
GYB_SOURCES
${swift_platform_gyb_sources}
Darwin.swift.gyb
SWIFT_COMPILE_FLAGS
${SWIFT_RUNTIME_SWIFT_COMPILE_FLAGS}
${SWIFT_STANDARD_LIBRARY_SWIFT_FLAGS}
-Xfrontend -disable-objc-attr-requires-foundation-module
LINK_FLAGS "${SWIFT_RUNTIME_SWIFT_LINK_FLAGS}"
TARGET_SDKS ALL_APPLE_PLATFORMS FREESTANDING
INSTALL_IN_COMPONENT sdk-overlay
DEPENDS ${darwin_depends})
add_swift_target_library(swiftGlibc ${SWIFT_STDLIB_LIBRARY_BUILD_TYPES} IS_SDK_OVERLAY
${swift_platform_sources}
POSIXError.swift
GYB_SOURCES
${swift_platform_gyb_sources}
Glibc.swift.gyb
SWIFT_COMPILE_FLAGS
${SWIFT_RUNTIME_SWIFT_COMPILE_FLAGS}
${SWIFT_STANDARD_LIBRARY_SWIFT_FLAGS}
LINK_FLAGS "${SWIFT_RUNTIME_SWIFT_LINK_FLAGS}"
TARGET_SDKS ANDROID CYGWIN FREEBSD OPENBSD LINUX HAIKU
INSTALL_IN_COMPONENT sdk-overlay
DEPENDS glibc_modulemap)
add_swift_target_library(swiftCRT ${SWIFT_STDLIB_LIBRARY_BUILD_TYPES} IS_SDK_OVERLAY
ucrt.swift
${swift_platform_sources}
POSIXError.swift
GYB_SOURCES
${swift_platform_gyb_sources}
SWIFT_COMPILE_FLAGS
${SWIFT_RUNTIME_SWIFT_COMPILE_FLAGS}
${SWIFT_STANDARD_LIBRARY_SWIFT_FLAGS}
-Xcc -D_USE_MATH_DEFINES
LINK_FLAGS "${SWIFT_RUNTIME_SWIFT_LINK_FLAGS}"
TARGET_SDKS WINDOWS
INSTALL_IN_COMPONENT sdk-overlay)
set(glibc_modulemap_target_list)
foreach(sdk ${SWIFT_SDKS})
if(NOT "${sdk}" STREQUAL "LINUX" AND
NOT "${sdk}" STREQUAL "FREEBSD" AND
NOT "${sdk}" STREQUAL "OPENBSD" AND
NOT "${sdk}" STREQUAL "ANDROID" AND
NOT "${sdk}" STREQUAL "CYGWIN" AND
NOT "${sdk}" STREQUAL "HAIKU")
continue()
endif()
foreach(arch ${SWIFT_SDK_${sdk}_ARCHITECTURES})
set(arch_subdir "${SWIFT_SDK_${sdk}_LIB_SUBDIR}/${arch}")
set(module_dir "${SWIFTLIB_DIR}/${arch_subdir}")
set(module_dir_static "${SWIFTSTATICLIB_DIR}/${arch_subdir}")
if(${sdk} STREQUAL ANDROID)
set(glibc_modulemap_source "bionic.modulemap.gyb")
elseif(${sdk} STREQUAL OPENBSD)
set(glibc_modulemap_source "libc-openbsd.modulemap.gyb")
else()
set(glibc_modulemap_source "glibc.modulemap.gyb")
endif()
set(glibc_modulemap_out "${module_dir}/glibc.modulemap")
set(glibc_modulemap_out_static "${module_dir_static}/glibc.modulemap")
# Configure the module map based on the target. Each platform needs to
# reference different headers, based on what's available in their glibc.
# This is the 'glibc.modulemap' in the 'resource-dir', so
# it's the one we'll look at during the build process.
handle_gyb_source_single(glibc_modulemap_target
SOURCE "${glibc_modulemap_source}"
OUTPUT "${glibc_modulemap_out}"
FLAGS
"-DCMAKE_SDK=${sdk}"
"-DGLIBC_INCLUDE_PATH=${SWIFT_SDK_${sdk}_ARCH_${arch}_LIBC_INCLUDE_DIRECTORY}"
"-DGLIBC_ARCH_INCLUDE_PATH=${SWIFT_SDK_${sdk}_ARCH_${arch}_LIBC_ARCHITECTURE_INCLUDE_DIRECTORY}")
list(APPEND glibc_modulemap_target_list ${glibc_modulemap_target})
if(SWIFT_BUILD_STATIC_STDLIB)
add_custom_command_target(
copy_glibc_modulemap_static
COMMAND
"${CMAKE_COMMAND}" "-E" "make_directory" ${module_dir_static}
COMMAND
"${CMAKE_COMMAND}" "-E" "copy" ${glibc_modulemap_out} ${glibc_modulemap_out_static}
OUTPUT ${glibc_modulemap_out_static}
DEPENDS
"${glibc_modulemap_target}"
COMMENT "Copying Glibc modulemap to static resources")
list(APPEND glibc_modulemap_target_list ${copy_glibc_modulemap_static})
endif()
# If this SDK is a target for a non-native host, except if it's for Android
# with its own native sysroot, create a native modulemap without a sysroot
# prefix. This is the one we'll install instead.
if(NOT "${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_ARCH_${arch}_PATH}" STREQUAL "/" AND
NOT (${sdk} STREQUAL ANDROID AND NOT "${SWIFT_ANDROID_NATIVE_SYSROOT}" STREQUAL ""))
set(glibc_sysroot_relative_modulemap_out "${module_dir}/sysroot-relative-modulemaps/glibc.modulemap")
string(REPLACE "${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_ARCH_${arch}_PATH}"
"" absolute_libc_include_path "${SWIFT_SDK_${sdk}_ARCH_${arch}_LIBC_INCLUDE_DIRECTORY}")
string(REPLACE "${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_ARCH_${arch}_PATH}"
"" absolute_libc_arch_include_path ${SWIFT_SDK_${sdk}_ARCH_${arch}_LIBC_ARCHITECTURE_INCLUDE_DIRECTORY})
handle_gyb_source_single(glibc_modulemap_native_target
SOURCE "${glibc_modulemap_source}"
OUTPUT "${glibc_sysroot_relative_modulemap_out}"
FLAGS "-DCMAKE_SDK=${sdk}"
"-DGLIBC_INCLUDE_PATH=${absolute_libc_include_path}"
"-DGLIBC_ARCH_INCLUDE_PATH=${absolute_libc_arch_include_path}")
list(APPEND glibc_modulemap_target_list ${glibc_modulemap_native_target})
set(glibc_modulemap_out ${glibc_sysroot_relative_modulemap_out})
endif()
# FIXME: When SDK is a cross-compile target (SDK != Host), the generated
# modulemap will be relative to the Host, with hardcoded paths.
# It is not relocatable to the target platform itself.
# This affects any cross-comipled targets that use glibc.modulemap.
swift_install_in_component(FILES "${glibc_modulemap_out}"
DESTINATION "lib/swift/${arch_subdir}"
COMPONENT sdk-overlay)
if(SWIFT_BUILD_STATIC_STDLIB)
swift_install_in_component(FILES "${glibc_modulemap_out}"
DESTINATION "lib/swift_static/${arch_subdir}"
COMPONENT sdk-overlay)
endif()
endforeach()
endforeach()
add_custom_target(glibc_modulemap DEPENDS ${glibc_modulemap_target_list})
set_property(TARGET glibc_modulemap PROPERTY FOLDER "Miscellaneous")
add_dependencies(sdk-overlay glibc_modulemap)