mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
In order to substitute the path into the VFS overlay, we need to escape the paths. Instead, opt on the CMake behaviour of `get_filename_component` providing the canonicalised path with forward slashes rather than backslashes. This allows the overlay to be used on Windows as well as Linux.
78 lines
2.5 KiB
CMake
78 lines
2.5 KiB
CMake
|
|
include(SwiftUtils)
|
|
|
|
function(swift_windows_arch_spelling arch var)
|
|
if(${arch} STREQUAL i686)
|
|
set(${var} x86 PARENT_SCOPE)
|
|
elseif(${arch} STREQUAL x86_64)
|
|
set(${var} x64 PARENT_SCOPE)
|
|
elseif(${arch} STREQUAL armv7)
|
|
set(${var} arm PARENT_SCOPE)
|
|
elseif(${arch} STREQUAL aarch64)
|
|
set(${var} arm64 PARENT_SCOPE)
|
|
else()
|
|
message(FATAL_ERROR "do not know MSVC spelling for ARCH: `${arch}`")
|
|
endif()
|
|
endfunction()
|
|
|
|
function(swift_verify_windows_environment_variables)
|
|
set(VCToolsInstallDir $ENV{VCToolsInstallDir})
|
|
set(UniversalCRTSdkDir $ENV{UniversalCRTSdkDir})
|
|
set(UCRTVersion $ENV{UCRTVersion})
|
|
|
|
precondition(VCToolsInstallDir
|
|
MESSAGE
|
|
"VCToolsInstallDir environment variable must be set")
|
|
precondition(UniversalCRTSdkDir
|
|
MESSAGE
|
|
"UniversalCRTSdkDir environment variable must be set")
|
|
precondition(UCRTVersion
|
|
MESSAGE
|
|
"UCRTVersion environment variable must be set")
|
|
endfunction()
|
|
|
|
function(swift_windows_include_for_arch arch var)
|
|
swift_verify_windows_environment_variables()
|
|
|
|
set(paths
|
|
"$ENV{VCToolsInstallDir}/include"
|
|
"$ENV{UniversalCRTSdkDir}/Include/$ENV{UCRTVersion}/ucrt"
|
|
"$ENV{UniversalCRTSdkDir}/Include/$ENV{UCRTVersion}/shared"
|
|
"$ENV{UniversalCRTSdkDir}/Include/$ENV{UCRTVersion}/um")
|
|
set(${var} ${paths} PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
function(swift_windows_lib_for_arch arch var)
|
|
swift_verify_windows_environment_variables()
|
|
swift_windows_arch_spelling(${arch} ARCH)
|
|
|
|
set(paths)
|
|
if(${ARCH} STREQUAL x86)
|
|
list(APPEND paths "$ENV{VCToolsInstallDir}/Lib")
|
|
else()
|
|
list(APPEND paths "$ENV{VCToolsInstallDir}/Lib/${ARCH}")
|
|
endif()
|
|
list(APPEND paths
|
|
"$ENV{UniversalCRTSdkDir}/Lib/$ENV{UCRTVersion}/ucrt/${ARCH}"
|
|
"$ENV{UniversalCRTSdkDir}/Lib/$ENV{UCRTVersion}/um/${ARCH}")
|
|
set(${var} ${paths} PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
function(swift_windows_generate_sdk_vfs_overlay flags)
|
|
swift_verify_windows_environment_variables()
|
|
|
|
get_filename_component(VCToolsInstallDir $ENV{VCToolsInstallDir} ABSOLUTE)
|
|
get_filename_component(UniversalCRTSdkDir $ENV{UniversalCRTSdkDir} ABSOLUTE)
|
|
set(UCRTVersion $ENV{UCRTVersion})
|
|
|
|
# TODO(compnerd) use a target to avoid re-creating this file all the time
|
|
configure_file("${CMAKE_SOURCE_DIR}/utils/WindowsSDKVFSOverlay.yaml.in"
|
|
"${CMAKE_BINARY_DIR}/windows-sdk-vfs-overlay.yaml"
|
|
@ONLY)
|
|
|
|
set(${flags}
|
|
-ivfsoverlay;"${CMAKE_BINARY_DIR}/windows-sdk-vfs-overlay.yaml"
|
|
PARENT_SCOPE)
|
|
endfunction()
|
|
|