DispatchWindowsSupport.cmake 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. function(dispatch_windows_arch_spelling arch var)
  2. if(${arch} STREQUAL i686)
  3. set(${var} x86 PARENT_SCOPE)
  4. elseif(${arch} STREQUAL x86_64 OR ${arch} STREQUAL AMD64)
  5. set(${var} x64 PARENT_SCOPE)
  6. elseif(${arch} STREQUAL armv7)
  7. set(${var} arm PARENT_SCOPE)
  8. elseif(${arch} STREQUAL aarch64 OR ${arch} STREQUAL ARM64)
  9. set(${var} arm64 PARENT_SCOPE)
  10. else()
  11. message(FATAL_ERROR "do not know MSVC spelling for ARCH: `${arch}`")
  12. endif()
  13. endfunction()
  14. function(dispatch_verify_windows_environment_variables)
  15. set(VCToolsInstallDir $ENV{VCToolsInstallDir})
  16. set(UniversalCRTSdkDir $ENV{UniversalCRTSdkDir})
  17. set(UCRTVersion $ENV{UCRTVersion})
  18. if("${VCToolsInstallDir}" STREQUAL "")
  19. message(SEND_ERROR "VCToolsInstallDir environment variable must be set")
  20. endif()
  21. if("${UniversalCRTSdkDir}" STREQUAL "")
  22. message(SEND_ERROR "UniversalCRTSdkDir environment variable must be set")
  23. endif()
  24. if("${UCRTVersion}" STREQUAL "")
  25. message(SEND_ERROR "UCRTVersion environment variable must be set")
  26. endif()
  27. endfunction()
  28. function(dispatch_windows_include_for_arch arch var)
  29. dispatch_verify_windows_environment_variables()
  30. set(paths
  31. "$ENV{VCToolsInstallDir}/include"
  32. "$ENV{UniversalCRTSdkDir}/Include/$ENV{UCRTVersion}/ucrt"
  33. "$ENV{UniversalCRTSdkDir}/Include/$ENV{UCRTVersion}/shared"
  34. "$ENV{UniversalCRTSdkDir}/Include/$ENV{UCRTVersion}/um")
  35. set(${var} ${paths} PARENT_SCOPE)
  36. endfunction()
  37. function(dispatch_windows_lib_for_arch arch var)
  38. dispatch_verify_windows_environment_variables()
  39. dispatch_windows_arch_spelling(${arch} ARCH)
  40. set(paths)
  41. if(${ARCH} STREQUAL x86)
  42. list(APPEND paths "$ENV{VCToolsInstallDir}/Lib")
  43. else()
  44. list(APPEND paths "$ENV{VCToolsInstallDir}/Lib/${ARCH}")
  45. endif()
  46. list(APPEND paths
  47. "$ENV{UniversalCRTSdkDir}/Lib/$ENV{UCRTVersion}/ucrt/${ARCH}"
  48. "$ENV{UniversalCRTSdkDir}/Lib/$ENV{UCRTVersion}/um/${ARCH}")
  49. set(${var} ${paths} PARENT_SCOPE)
  50. endfunction()
  51. function(dispatch_windows_generate_sdk_vfs_overlay flags)
  52. dispatch_verify_windows_environment_variables()
  53. get_filename_component(VCToolsInstallDir $ENV{VCToolsInstallDir} ABSOLUTE)
  54. get_filename_component(UniversalCRTSdkDir $ENV{UniversalCRTSdkDir} ABSOLUTE)
  55. set(UCRTVersion $ENV{UCRTVersion})
  56. # TODO(compnerd) use a target to avoid re-creating this file all the time
  57. configure_file("${PROJECT_SOURCE_DIR}/utils/WindowsSDKVFSOverlay.yaml.in"
  58. "${PROJECT_BINARY_DIR}/windows-sdk-vfs-overlay.yaml"
  59. @ONLY)
  60. set(${flags}
  61. -ivfsoverlay;"${PROJECT_BINARY_DIR}/windows-sdk-vfs-overlay.yaml"
  62. PARENT_SCOPE)
  63. endfunction()