Files
swift-mirror/Runtimes/Resync.cmake
Evan Wilde 29de93de01 Split file copying
Splitting the file copying out of the library copying. This allows us to
list a specific set of files to copy into the new stdlib build from
specific locations.
2025-03-18 16:04:28 -07:00

182 lines
6.2 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 ${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")
# Copy Plist
message(STATUS "plist[${StdlibSources}/Info.plist.in] -> Core/Info.plist.in")
file(COPY_FILE
"${StdlibSources}/Info.plist.in" # From
"${CMAKE_CURRENT_LIST_DIR}/Core/Info.plist.in" # To
RESULT _output
ONLY_IF_DIFFERENT)
if(_output)
message(SEND_ERROR
"Copy ${StdlibSources}/Info.plist.in] -> Core/Info.plist.in Failed: ${_output}")
endif()
# Copy Windows clang overlays
message(STATUS "modulemap[${StdlibSources}/Windows/ucrt.modulemap] -> Overlay/Windows/clang")
file(COPY_FILE
"${StdlibSources}/public/Platform/ucrt.modulemap" # From
"${CMAKE_CURRENT_LIST_DIR}/Overlay/Windows/clang/ucrt.modulemap" # To
RESULT _output
ONLY_IF_DIFFERENT)
if(_output)
message(SEND_ERROR
"Copy ${StdlibSources}/public/Platform/ucrt.modulemap -> Overlay/Windows/clang/ucrt.modulemap Failed: ${_output}")
endif()
message(STATUS "modulemap[${StdlibSources}/Windows/winsdk.modulemap] -> Overlay/Windows/clang")
file(COPY_FILE
"${StdlibSources}/public/Platform/winsdk.modulemap" # From
"${CMAKE_CURRENT_LIST_DIR}/Overlay/Windows/clang/winsdk.modulemap" # To
RESULT _output
ONLY_IF_DIFFERENT)
if(_output)
message(SEND_ERROR
"Copy ${StdlibSources}/public/Platform/winsdk.modulemap -> Overlay/Windows/clang/winsdk.modulemap Failed: ${_output}")
endif()
message(STATUS "modulemap[${StdlibSources}/Windows/vcruntime.modulemap] -> Overlay/Windows/clang")
file(COPY_FILE
"${StdlibSources}/public/Platform/vcruntime.modulemap" # From
"${CMAKE_CURRENT_LIST_DIR}/Overlay/Windows/clang/vcruntime.modulemap" # To
RESULT _output
ONLY_IF_DIFFERENT)
if(_output)
message(SEND_ERROR
"Copy ${StdlibSources}/public/Platform/vcruntime.modulemap -> Overlay/Windows/clang/vcruntime.modulemap Failed: ${_output}")
endif()
message(STATUS "APINotes[${StdlibSources}/Windows/vcruntime.apinotes] -> Overlay/Windows/clang")
file(COPY_FILE
"${StdlibSources}/public/Platform/vcruntime.apinotes" # From
"${CMAKE_CURRENT_LIST_DIR}/Overlay/Windows/clang/vcruntime.apinotes" # To
RESULT _output
ONLY_IF_DIFFERENT)
if(_output)
message(SEND_ERROR
"Copy ${StdlibSources}/public/Platform/vcruntime.apinotes -> Overlay/Windows/clang/vcruntime.modulemap Failed: ${_output}")
endif()
set(CoreLibs
LLVMSupport
SwiftShims
runtime
CompatibilityOverride
stubs
CommandLineSupport
core
SwiftOnoneSupport
Concurrency
Concurrency/InternalShims)
# Add these as we get them building
# Demangling
foreach(library ${CoreLibs})
copy_library_sources(${library} "public" "Core")
endforeach()
message(STATUS "CRT[${StdlibSources}/public/Platform] -> ${CMAKE_CURRENT_LIST_DIR}/Overlay/Windows/CRT")
foreach(file ucrt.swift Platform.swift POSIXError.swift TiocConstants.swift tgmath.swift.gyb)
file(COPY_FILE
"${StdlibSources}/public/Platform/${file}"
"${CMAKE_CURRENT_LIST_DIR}/Overlay/Windows/CRT/${file}"
RESULT _output
ONLY_IF_DIFFERENT)
if(_output)
message(SEND_ERROR
"Copy Platform/${file} -> ${CMAKE_CURRENT_LIST_DIR}/Overlay/Windows/CRT/${file} Failed: ${_output}")
endif()
endforeach()
message(STATUS "WinSDK[${StdlibSources}/public/Windows] -> ${CMAKE_CURRENT_LIST_DIR}/Overlay/Windows/WinSDK")
file(COPY_FILE
"${StdlibSources}/public/Windows/WinSDK.swift"
"${CMAKE_CURRENT_LIST_DIR}/Overlay/Windows/WinSDK/WinSDK.swift"
RESULT _output
ONLY_IF_DIFFERENT)
if(_output)
message(SEND_ERROR
"Copy Windows/WinSDK.swift -> ${CMAKE_CURRENT_LIST_DIR}/Overlay/Windows/WinSDK/WinSDK.swift Failed: ${_output}")
endif()
# TODO: Add source directories for the platform overlays, supplemental
# libraries, and test support libraries.