1
+ # Setup directories
2
+ set (FETCHCONTENT_BASE_DIR "${PROJECT_ROOT} /third_party" )
3
+ set (DAWN_DIR "${FETCHCONTENT_BASE_DIR} /dawn" CACHE INTERNAL "" )
4
+ set (DAWN_BUILD_DIR "${DAWN_DIR} /build" CACHE INTERNAL "" )
5
+
6
+ if (EMSCRIPTEN)
7
+ set (EM_SDK_DIR $ENV{EMSDK} CACHE INTERNAL "" )
8
+ set (DAWN_BUILD_DIR "${DAWN_DIR} /build_web" CACHE INTERNAL "" )
9
+ endif ()
10
+
11
+ function (find_dawn_library)
12
+ if (MSVC )
13
+ find_library (WEBGPU_DAWN_DEBUG webgpu_dawn
14
+ NAMES webgpu_dawn
15
+ HINTS "${DAWN_BUILD_DIR} /src/dawn/native/Debug"
16
+ )
17
+ find_library (WEBGPU_DAWN_RELEASE webgpu_dawn
18
+ NAMES webgpu_dawn
19
+ HINTS "${DAWN_BUILD_DIR} /src/dawn/native/Release"
20
+ )
21
+ elseif (NOT EMSCRIPTEN AND NOT MSVC )
22
+ find_library (WEBGPU_DAWN_LIB
23
+ NAMES webgpu_dawn
24
+ PATHS "${DAWN_BUILD_DIR} /src/dawn/native"
25
+ REQUIRED
26
+ )
27
+ endif ()
28
+
29
+ # Set result variables in parent scope
30
+ set (DAWN_BUILD_FOUND ON PARENT_SCOPE)
31
+ if (MSVC )
32
+ set (WEBGPU_DAWN_DEBUG ${WEBGPU_DAWN_DEBUG} PARENT_SCOPE)
33
+ set (WEBGPU_DAWN_RELEASE ${WEBGPU_DAWN_RELEASE} PARENT_SCOPE)
34
+ else ()
35
+ set (WEBGPU_DAWN_LIB ${WEBGPU_DAWN_LIB} PARENT_SCOPE)
36
+ endif ()
37
+ endfunction ()
38
+
39
+ # Enable find for no dawn rebuilds with flutter run
40
+ set (ENABLE_DAWN_FIND OFF CACHE BOOL "Enable finding Dawn" FORCE)
41
+ set (DAWN_BUILD_FOUND OFF CACHE BOOL "Dawn build found" FORCE)
42
+ if (ENABLE_DAWN_FIND)
43
+ # find_library, windows adds extra folder
44
+ if (MSVC )
45
+ find_library (WEBGPU_DAWN_DEBUG webgpu_dawn
46
+ NAMES webgpu_dawn
47
+ HINTS "${DAWN_BUILD_DIR} /src/dawn/native/Debug"
48
+ )
49
+ find_library (WEBGPU_DAWN_RELEASE webgpu_dawn
50
+ NAMES webgpu_dawn
51
+ HINTS "${DAWN_BUILD_DIR} /src/dawn/native/Release"
52
+ )
53
+ set (DAWN_BUILD_FOUND ON )
54
+ elseif (NOT EMSCRIPTEN AND NOT MSVC )
55
+ find_library (WEBGPU_DAWN_LIB
56
+ NAMES webgpu_dawn
57
+ PATHS "${DAWN_BUILD_DIR} /src/dawn/native"
58
+ REQUIRED
59
+ )
60
+ set (DAWN_BUILD_FOUND ON )
61
+ else ()
62
+ set (DAWN_BUILD_FOUND ON )
63
+ endif ()
64
+ endif ()
65
+
66
+ # Dawn options for more,
67
+ # see https://dawn.googlesource.com/dawn/+/refs/heads/main/CMakeLists.txt
68
+ set (DAWN_ALWAYS_ASSERT OFF CACHE INTERNAL "Always assert in Dawn" FORCE)
69
+ set (DAWN_BUILD_MONOLITHIC_LIBRARY ON CACHE INTERNAL "Build Dawn monolithically" FORCE)
70
+ set (DAWN_BUILD_EXAMPLES OFF CACHE INTERNAL "Build Dawn examples" FORCE)
71
+ set (DAWN_BUILD_SAMPLES OFF CACHE INTERNAL "Build Dawn samples" FORCE)
72
+ set (DAWN_BUILD_TESTS OFF CACHE INTERNAL "Build Dawn tests" FORCE)
73
+ set (DAWN_ENABLE_INSTALL OFF CACHE INTERNAL "Enable Dawn installation" FORCE)
74
+ set (DAWN_FETCH_DEPENDENCIES ON CACHE INTERNAL "Fetch Dawn dependencies" FORCE)
75
+ set (TINT_BUILD_TESTS OFF CACHE INTERNAL "Build Tint Tests" FORCE)
76
+ set (TINT_BUILD_IR_BINARY OFF CACHE INTERNAL "Build Tint IR binary" FORCE)
77
+ set (TINT_BUILD_CMD_TOOLS OFF CACHE INTERNAL "Build Tint command line tools" FORCE)
78
+
79
+ if (NOT DAWN_BUILD_FOUND)
80
+ include (FetchContent)
81
+ message ("webgpu_dawn not found start building" )
82
+ if (EMSCRIPTEN)
83
+ set (EMSCRIPTEN_DIR "${EM_SDK_DIR} /upstream/emscripten" CACHE INTERNAL "" FORCE)
84
+ set (DAWN_EMSCRIPTEN_TOOLCHAIN ${EMSCRIPTEN_DIR} CACHE INTERNAL "" FORCE)
85
+ endif ()
86
+
87
+ FetchContent_Declare(
88
+ dawn
89
+ DOWNLOAD_DIR ${DAWN_DIR}
90
+ SOURCE_DIR ${DAWN_DIR}
91
+ SUBBUILD_DIR ${DAWN_BUILD_DIR} /tmp
92
+ BINARY_DIR ${DAWN_BUILD_DIR}
93
+ DOWNLOAD_COMMAND
94
+ cd ${DAWN_DIR} &&
95
+ git init &&
96
+ git fetch --depth=1 https://dawn.googlesource.com/dawn &&
97
+ git reset --hard FETCH_HEAD
98
+ )
99
+
100
+ # Download the repository and add it as a subdirectory.
101
+ FetchContent_MakeAvailable(dawn)
102
+
103
+ # attempt fix flutter rebuilds
104
+ set (CMAKE_INCLUDE_PATH "${CMAKE_INCLUDE_PATH} ;${DAWN_DIR} /src" CACHE INTERNAL "" )
105
+
106
+ execute_process (
107
+ WORKING_DIRECTORY ${DAWN_DIR}
108
+ COMMAND ${CMAKE_COMMAND} -S ${DAWN_DIR}
109
+ -B ${DAWN_BUILD_DIR}
110
+ )
111
+
112
+ # Build Dawn
113
+ execute_process (
114
+ COMMAND ${CMAKE_COMMAND} --build ${DAWN_BUILD_DIR}
115
+ )
116
+
117
+ # find_library, windows adds extra folder
118
+ if (MSVC )
119
+ find_library (WEBGPU_DAWN_DEBUG webgpu_dawn
120
+ NAMES webgpu_dawn
121
+ HINTS "${DAWN_BUILD_DIR} /src/dawn/native/Debug"
122
+ )
123
+ find_library (WEBGPU_DAWN_RELEASE webgpu_dawn
124
+ NAMES webgpu_dawn
125
+ HINTS "${DAWN_BUILD_DIR} /src/dawn/native/Release"
126
+ )
127
+ set (DAWN_BUILD_FOUND ON )
128
+ elseif (NOT EMSCRIPTEN AND NOT MSVC )
129
+ find_library (WEBGPU_DAWN_LIB
130
+ NAMES webgpu_dawn
131
+ PATHS "${DAWN_BUILD_DIR} /src/dawn/native"
132
+ REQUIRED
133
+ )
134
+ set (DAWN_BUILD_FOUND ON )
135
+ else ()
136
+ set (DAWN_BUILD_FOUND ON )
137
+ endif ()
138
+ endif ()
139
+
140
+ if (EMSCRIPTEN)
141
+ add_library (webgpu_dawn INTERFACE IMPORTED )
142
+ target_include_directories (webgpu_dawn INTERFACE ${DAWN_BUILD_DIR} /gen/src/emdawnwebgpu/include )
143
+ target_include_directories (webgpu_dawn INTERFACE ${DAWN_BUILD_DIR} /gen/src/emdawnwebgpu/include /webgpu/webgpu.h)
144
+ target_link_libraries (webgpu_dawn INTERFACE ${DAWN_BUILD_DIR} /gen/src/emdawnwebgpu/library_webgpu_enum_tables.js)
145
+ target_link_libraries (webgpu_dawn INTERFACE ${DAWN_BUILD_DIR} /gen/src/emdawnwebgpu/library_webgpu_generated_struct_info.js)
146
+ target_link_libraries (webgpu_dawn INTERFACE ${DAWN_BUILD_DIR} /gen/src/emdawnwebgpu/library_webgpu_generated_sig_info.js)
147
+ target_link_libraries (webgpu_dawn INTERFACE ${DAWN_DIR} /third_party/emdawnwebgpu/library_webgpu.js)
148
+ else ()
149
+ endif ()
0 commit comments