forked from qt/qtbase
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathQtPublicWindowsHelpers.cmake
107 lines (93 loc) · 4.14 KB
/
QtPublicWindowsHelpers.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# Copyright (C) 2024 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
function(qt6_add_win_app_sdk target)
if(NOT MSVC)
message(WARNING
"qt6_add_win_app_sdk doesn't work when targeting platforms other than MSVC.")
return()
endif()
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64" OR
CMAKE_SYSTEM_PROCESSOR STREQUAL "ARM64")
set(win_app_sdk_arch "arm64")
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm*")
set(win_app_sdk_arch "arm")
elseif(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(win_app_sdk_arch "x64")
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
set(win_app_sdk_arch "x86")
endif()
if(WIN_APP_SDK_ROOT)
set(win_app_sdk_root "${WIN_APP_SDK_ROOT}")
elseif(DEFINED ENV{WIN_APP_SDK_ROOT})
set(win_app_sdk_root "$ENV{WIN_APP_SDK_ROOT}")
endif()
if(WEB_VIEW_ROOT)
set(web_view_root "${WEB_VIEW_ROOT}")
elseif(DEFINED ENV{WEB_VIEW_ROOT})
set(web_view_root "$ENV{WEB_VIEW_ROOT}")
endif()
set(generated_headers_path "${CMAKE_CURRENT_BINARY_DIR}/winrt_includes")
find_path(WINAPPSDK_GENERATED_INCLUDE_DIR
NAMES winrt/Microsoft.UI.h
HINTS "${generated_headers_path}")
# If headers are not already generated
if(NOT WINAPPSDK_GENERATED_INCLUDE_DIR)
if(CPP_WIN_RT_PATH)
set(cpp_win_rt_path "${CPP_WIN_RT_PATH}")
elseif(DEFINED ENV{CPP_WIN_RT_PATH})
set(cpp_win_rt_path "$ENV{CPP_WIN_RT_PATH}")
endif()
if(NOT cpp_win_rt_path)
find_file(CPP_WIN_RT_PATH
NAMES cppwinrt.exe
HINTS "C:/Program Files*/Windows Kits/*/bin/*/*${win_app_sdk_arch}*/")
set(cpp_win_rt_path ${CPP_WIN_RT_PATH})
endif()
if(NOT cpp_win_rt_path)
message(FATAL_ERROR "cppwinrt.exe could not be found")
endif()
find_path(WINAPPSDK_INCLUDE_DIR
NAMES MddBootstrap.h
HINTS ${win_app_sdk_root}/include)
find_library(WINAPPSDK_LIBRARY
NAMES Microsoft.WindowsAppRuntime
HINTS ${WINAPPSDK_LIBRARY_DIR} "${win_app_sdk_root}"
"${win_app_sdk_root}/lib"
"${win_app_sdk_root}/lib/win10-${win_app_sdk_arch}")
find_library(WINAPPSDK_BOOTSTRAP_LIBRARY
NAMES Microsoft.WindowsAppRuntime.Bootstrap
HINTS ${WINAPPSDK_LIBRARY_DIR} "${win_app_sdk_root}"
"${win_app_sdk_root}/lib"
"${win_app_sdk_root}/lib/win10-${win_app_sdk_arch}")
if(WINAPPSDK_INCLUDE_DIR AND WINAPPSDK_LIBRARY AND WINAPPSDK_BOOTSTRAP_LIBRARY)
execute_process(COMMAND
${cpp_win_rt_path} -out "${generated_headers_path}" -ref sdk
-in "${win_app_sdk_root}/lib/uap10.0"
-in "${win_app_sdk_root}/lib/uap10.0.17763"
-in "${win_app_sdk_root}/lib/uap10.0.18362"
-in "${web_view_root}/lib")
find_path(WINAPPSDK_GENERATED_INCLUDE_DIR
NAMES winrt/Microsoft.UI.h
HINTS "${generated_headers_path}")
if(NOT WINAPPSDK_GENERATED_INCLUDE_DIR)
message(FATAL_ERROR "Windows App SDK library headers generation failed")
endif()
else()
message(FATAL_ERROR "Windows App SDK library not found")
endif()
endif()
target_include_directories(${target} PRIVATE "${win_app_sdk_root}/include")
target_include_directories(${target}
PRIVATE "${generated_headers_path}")
target_link_directories(${target}
PRIVATE "${win_app_sdk_root}/lib/win10-${win_app_sdk_arch}")
target_link_directories(${target}
PRIVATE "${win_app_sdk_root}/runtimes/win-${win_app_sdk_arch}/native")
target_link_libraries(${target}
PRIVATE Microsoft.WindowsAppRuntime.lib Microsoft.WindowsAppRuntime.Bootstrap.lib)
endfunction()
if(NOT QT_NO_CREATE_VERSIONLESS_FUNCTIONS)
macro(qt_add_win_app_sdk)
qt6_add_win_app_sdk(${ARGV})
endmacro()
endif()