Files
swift-mirror/cmake/modules/SwiftWindowsSupport.cmake
Saleem Abdulrasool 5e4cd22e41 build: use VFS overlay for Windows SDK
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.
2017-11-03 12:50:47 -07:00

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()