Files
swift-mirror/Runtimes/Resync.cmake
Saleem Abdulrasool c040f97aff Overlay: add C++ interop libraries
This introduces a build of the C++ interop runtime support to the new runtime library build.

Co-authored-by: Eric Miotto <1094986+edymtt@users.noreply.github.com>
2025-08-07 08:41:17 -07:00

197 lines
7.0 KiB
CMake

# This CMake script keeps the files in the new standard library build in sync
# with the existing standard library.
# TODO: Once the migration is completed, we can delete this file
cmake_minimum_required(VERSION 3.21)
# Where the standard library lives today
set(StdlibSources "${CMAKE_CURRENT_LIST_DIR}/../stdlib")
# Copy a list of files
function(copy_files from_prefix to_prefix)
cmake_parse_arguments(ARG "" "ROOT" "FILES" ${ARGN})
if(NOT ARG_ROOT)
set(ARG_ROOT ${StdlibSources})
endif()
set(full_to_prefix "${CMAKE_CURRENT_LIST_DIR}/${to_prefix}")
foreach(file ${ARG_FILES})
# Get and create the directory
get_filename_component(dirname ${file} DIRECTORY)
file(MAKE_DIRECTORY "${full_to_prefix}/${dirname}")
file(COPY_FILE
"${ARG_ROOT}/${from_prefix}/${file}" # From
"${full_to_prefix}/${file}" # To
RESULT _output
ONLY_IF_DIFFERENT)
if(_output)
message(SEND_ERROR
"Copy ${ARG_ROOT}/${from_prefix}/${file} -> ${full_to_prefix}/${file} Failed: ${_output}")
endif()
endforeach()
endfunction()
# Copy the files under the "name" directory in the standard library into the new
# location under Runtimes
function(copy_library_sources name from_prefix to_prefix)
cmake_parse_arguments(ARG "" "ROOT" "" ${ARGN})
if(NOT ARG_ROOT)
set(ARG_ROOT ${StdlibSources})
endif()
message(STATUS "${name}[${ARG_ROOT}/${from_prefix}/${name}] -> ${to_prefix}/${name} ")
set(full_to_prefix "${CMAKE_CURRENT_LIST_DIR}/${to_prefix}")
file(GLOB_RECURSE filenames
FOLLOW_SYMLINKS
LIST_DIRECTORIES FALSE
RELATIVE "${ARG_ROOT}/${from_prefix}"
"${ARG_ROOT}/${from_prefix}/${name}/*.swift"
"${ARG_ROOT}/${from_prefix}/${name}/*.h"
"${ARG_ROOT}/${from_prefix}/${name}/*.cpp"
"${ARG_ROOT}/${from_prefix}/${name}/*.c"
"${ARG_ROOT}/${from_prefix}/${name}/*.mm"
"${ARG_ROOT}/${from_prefix}/${name}/*.m"
"${ARG_ROOT}/${from_prefix}/${name}/*.def"
"${ARG_ROOT}/${from_prefix}/${name}/*.gyb"
"${ARG_ROOT}/${from_prefix}/${name}/*.apinotes"
"${ARG_ROOT}/${from_prefix}/${name}/*.yaml"
"${ARG_ROOT}/${from_prefix}/${name}/*.inc"
"${ARG_ROOT}/${from_prefix}/${name}/*.modulemap"
"${ARG_ROOT}/${from_prefix}/${name}/*.json")
copy_files("${from_prefix}" "${to_prefix}"
ROOT "${ARG_ROOT}"
FILES ${filenames})
endfunction()
# Directories in the existing standard library that make up the Core project
# Copy shared core headers
copy_library_sources(include "" "Core")
# Copy magic linker symbols
copy_library_sources("linker-support" "" "Core")
set(CoreLibs
LLVMSupport
SwiftShims
runtime
CompatibilityOverride
stubs
CommandLineSupport
core
SwiftOnoneSupport
Concurrency
Concurrency/InternalShims)
foreach(library ${CoreLibs})
copy_library_sources(${library} "public" "Core")
endforeach()
message(STATUS "plist[${StdlibSources}/Info.plist.in] -> Core/Info.plist.in")
copy_files("" "Core" FILES "Info.plist.in")
message(STATUS "plist[${StdlibSources}/Info.plist.in] -> Supplemental/Distributed/Info.plist.in")
copy_files("" "Supplemental/Distributed" FILES "Info.plist.in")
message(STATUS "plist[${StdlibSources}/Info.plist.in] -> Supplemental/Differentiation/Info.plist.in")
copy_files("" "Supplemental/Differentiation" FILES "Info.plist.in")
message(STATUS "plist[${StdlibSources}/Info.plist.in] -> Supplemental/Observation/Info.plist.in")
copy_files("" "Supplemental/Observation" FILES "Info.plist.in")
message(STATUS "plist[${StdlibSources}/Info.plist.in] -> Supplemental/StringProcessing/Info.plist.in")
copy_files("" "Supplemental/StringProcessing" FILES "Info.plist.in")
message(STATUS "plist[${StdlibSources}/Info.plist.in] -> Supplemental/Synchronization/Info.plist.in")
copy_files("" "Supplemental/Synchronization" FILES "Info.plist.in")
message(STATUS "plist[${StdlibSources}/Info.plist.in] -> Supplemental/Volatile/Info.plist.in")
copy_files("" "Supplemental/Volatile" FILES "Info.plist.in")
# Platform Overlays
# Copy magic linker symbols
copy_library_sources("linker-support" "public/ClangOverlays" "Overlay")
message(STATUS "Clang[${StdlibSources}/public/ClangOverlays] -> ${CMAKE_CURRENT_LIST_DIR}/Overlay/clang")
copy_files(public/ClangOverlays Overlay/clang FILES float.swift.gyb)
copy_library_sources("Cxx" "public" "Overlay")
# Android Overlay
message(STATUS "Android modulemaps[${StdlibSources}/Platform] -> ${CMAKE_CURRENT_LIST_DIR}/Overlay/Android/clang")
copy_files(public/Platform Overlay/Android/clang
FILES
android.modulemap
posix_filesystem.apinotes
spawn.apinotes
SwiftAndroidNDK.h
SwiftBionic.h)
message(STATUS "Android Android[${StdlibSources}/Platform] -> ${CMAKE_CURRENT_LIST_DIR}/Overlay/Android/Android")
copy_files(public/Platform Overlay/Android/Android
FILES
Android.swift
Platform.swift
POSIXError.swift
TiocConstants.swift
tgmath.swift.gyb)
message(STATUS "Android Math[${StdlibSources}/Platform] -> ${CMAKE_CURRENT_LIST_DIR}/Overlay/Android/Math")
copy_files(public/Platform Overlay/Android/Math
FILES
Math.swift)
# Windows Overlay
message(STATUS "WinSDK[${StdlibSources}/public/Windows] -> ${CMAKE_CURRENT_LIST_DIR}/Overlay/Windows/WinSDK")
copy_files(public/Windows Overlay/Windows/WinSDK FILES WinSDK.swift)
message(STATUS "Windows modulemaps[${StdlibSources}/Platform] -> ${CMAKE_CURRENT_LIST_DIR}/Overlay/Windows/clang")
copy_files(public/Platform Overlay/Windows/clang
FILES
ucrt.modulemap
winsdk.modulemap
vcruntime.modulemap
vcruntime.apinotes)
message(STATUS "CRT[${StdlibSources}/public/Platform] -> ${CMAKE_CURRENT_LIST_DIR}/Overlay/Windows/CRT")
copy_files(public/Platform Overlay/Windows/CRT
FILES
ucrt.swift
Platform.swift
POSIXError.swift
TiocConstants.swift
tgmath.swift.gyb)
if(NOT DEFINED StringProcessing_ROOT_DIR)
find_path(StringProcessing_ROOT_DIR
"swift-experimental-string-processing/Package.swift"
HINTS "${CMAKE_CURRENT_LIST_DIR}/../../")
endif()
message(STATUS "String Processing Root: ${StringProcessing_ROOT_DIR}")
# Supplemental Libraries
copy_library_sources(Differentiation "public" "Supplemental")
copy_library_sources(Distributed "public" "Supplemental")
copy_library_sources(Observation "public" "Supplemental")
copy_library_sources(Synchronization "public" "Supplemental")
copy_library_sources(Volatile "public" "Supplemental")
copy_library_sources(_RegexParser "Sources" "Supplemental/StringProcessing"
ROOT "${StringProcessing_ROOT_DIR}/swift-experimental-string-processing")
copy_library_sources(_StringProcessing "Sources" "Supplemental/StringProcessing"
ROOT "${StringProcessing_ROOT_DIR}/swift-experimental-string-processing")
copy_library_sources(_CUnicode "Sources" "Supplemental/StringProcessing/_StringProcessing"
ROOT "${StringProcessing_ROOT_DIR}/swift-experimental-string-processing")
copy_library_sources(RegexBuilder "Sources" "Supplemental/StringProcessing"
ROOT "${StringProcessing_ROOT_DIR}/swift-experimental-string-processing")
copy_library_sources("linker-support" "" "Supplemental/Differentiation")
copy_library_sources(include "" "Supplemental/Distributed")