Skip to content

[CMake] Refactor resync script individual file copying #80106

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Mar 19, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
176 changes: 68 additions & 108 deletions Runtimes/Resync.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -8,49 +8,67 @@ cmake_minimum_required(VERSION 3.21)
# Where the standard library lives today
set(StdlibSources "${CMAKE_CURRENT_LIST_DIR}/../stdlib")

message(STATUS "Source dir: ${StdlibSources}")

# 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)
message(STATUS "${name}[${StdlibSources}/${from_prefix}/${name}] -> ${to_prefix}/${name} ")
# 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}")

file(GLOB_RECURSE filenames
FOLLOW_SYMLINKS
LIST_DIRECTORIES FALSE
RELATIVE "${StdlibSources}/${from_prefix}"
"${StdlibSources}/${from_prefix}/${name}/*.swift"
"${StdlibSources}/${from_prefix}/${name}/*.h"
"${StdlibSources}/${from_prefix}/${name}/*.cpp"
"${StdlibSources}/${from_prefix}/${name}/*.c"
"${StdlibSources}/${from_prefix}/${name}/*.mm"
"${StdlibSources}/${from_prefix}/${name}/*.m"
"${StdlibSources}/${from_prefix}/${name}/*.def"
"${StdlibSources}/${from_prefix}/${name}/*.gyb"
"${StdlibSources}/${from_prefix}/${name}/*.apinotes"
"${StdlibSources}/${from_prefix}/${name}/*.yaml"
"${StdlibSources}/${from_prefix}/${name}/*.inc"
"${StdlibSources}/${from_prefix}/${name}/*.modulemap"
"${StdlibSources}/${from_prefix}/${name}/*.json")

foreach(file ${filenames})
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
"${StdlibSources}/${from_prefix}/${file}" # From
"${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}")
"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
Expand All @@ -59,63 +77,6 @@ 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
Expand All @@ -128,36 +89,35 @@ set(CoreLibs
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 "plist[${StdlibSources}/Info.plist.in] -> Core/Info.plist.in")
copy_files("" "Core" FILES "Info.plist.in")

# Platform Overlays

# Windows Overlay
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()
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)

# TODO: Add source directories for the platform overlays, supplemental
# libraries, and test support libraries.