mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
The Windows SDK provides headers which have incorrect cases. The incorrect cases are in the SDK headers as well. On case sensitive file systems this causes build issues due to the incorrect name. Use the clang VFS overlay to avoid the need for providing copies to the expected cases. This improves the cross-compilation on Linux to Windows.
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()
|
|
|
|
set(VCToolsInstallDir $ENV{VCToolsInstallDir})
|
|
set(UniversalCRTSdkDir $ENV{UniversalCRTSdkDir})
|
|
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()
|
|
|