1- cmake_minimum_required (VERSION 3.14)
2-
3- include (ExternalProject)
4- include (FetchContent)
5-
6- # include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/print_target.cmake")
7-
8-
9- # Setup directories and basic paths
10- set (FETCHCONTENT_BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR} /external" )
11- set (DAWN_DIR "${FETCHCONTENT_BASE_DIR} /dawn" CACHE INTERNAL "Dawn source directory" )
12-
13- # For Emscripten builds (if desired)
14- set (EM_SDK_DIR $ENV{EMSDK} CACHE INTERNAL "" )
15- set (EMSCRIPTEN_DIR "${EM_SDK_DIR} /upstream/emscripten" CACHE INTERNAL "" )
16-
17- # Decide where to build Dawn’s build files.
18- if (EMSCRIPTEN)
19- set (DAWN_BUILD_DIR "${DAWN_DIR} /build_web" CACHE INTERNAL "web build directory" FORCE)
20- elseif (WIN32 )
21- set (DAWN_BUILD_DIR "${DAWN_DIR} /build_win" CACHE INTERNAL "windows build directory" FORCE)
22- elseif (IOS)
23- set (DAWN_BUILD_DIR "${DAWN_DIR} /build_ios" CACHE INTERNAL "ios build directory" FORCE)
24- elseif (APPLE )
25- set (DAWN_BUILD_DIR "${DAWN_DIR} /build_mac" CACHE INTERNAL "mac build directory" FORCE)
26- elseif (ANDROID)
27- set (DAWN_BUILD_DIR "${DAWN_DIR} /build_android" CACHE INTERNAL "android build directory" FORCE)
28- else ()
29- set (DAWN_BUILD_DIR "${DAWN_DIR} /build_unix" CACHE INTERNAL "linux build directory" FORCE)
30- endif ()
31-
32- # Add Dawn header include directories so that they are available later.
33- include_directories (BEFORE PUBLIC
34- "${DAWN_BUILD_DIR} /src/dawn/native/"
35- "${DAWN_BUILD_DIR} /src/dawn/native/Debug"
36- "${DAWN_BUILD_DIR} /src/dawn/native/Release"
37- )
38-
39-
40- # Optionally try to find an existing Dawn build.
41- set (ENABLE_DAWN_FIND OFF CACHE BOOL "Attempt to find an existing Dawn build" FORCE)
42- set (DAWN_BUILD_FOUND OFF CACHE BOOL "Dawn build found" FORCE)
43-
44- if (ENABLE_DAWN_FIND)
45- message (STATUS "Attempting to find an existing Dawn build..." )
46- if (WIN32 )
47- find_library (WEBGPU_DAWN_DEBUG NAMES webgpu_dawn HINTS "${DAWN_BUILD_DIR} /src/dawn/native/Debug" )
48- find_library (WEBGPU_DAWN_RELEASE NAMES webgpu_dawn HINTS "${DAWN_BUILD_DIR} /src/dawn/native/Release" )
49-
50- if (WEBGPU_DAWN_DEBUG OR WEBGPU_DAWN_RELEASE)
51- message (STATUS "Dawn build found on Windows. Debug: ${WEBGPU_DAWN_DEBUG} , Release: ${WEBGPU_DAWN_RELEASE} " )
52- set (DAWN_BUILD_FOUND ON )
53- endif ()
54- elseif (NOT EMSCRIPTEN AND NOT WIN32 )
55- find_library (WEBGPU_DAWN_LIB NAMES webgpu_dawn.so PATHS "${DAWN_BUILD_DIR} /src/dawn/native" )
56-
57- if (WEBGPU_DAWN_LIB)
58- message (STATUS "Dawn build found on Linux/Unix. Library: ${WEBGPU_DAWN_LIB} " )
59- set (DAWN_BUILD_FOUND ON )
60- endif ()
61- endif ()
62- endif ()
63-
64-
65- # Pre-build Dawn at configuration time if not already built.
66- if (NOT DAWN_BUILD_FOUND)
67- message (STATUS "Dawn build not found - pre-building Dawn." )
68-
69- # Force Dawn build options.
70- set (DAWN_ALWAYS_ASSERT ON CACHE INTERNAL "Always assert in Dawn" FORCE)
71- set (DAWN_BUILD_MONOLITHIC_LIBRARY ON CACHE INTERNAL "Build Dawn monolithically" FORCE)
72- set (DAWN_BUILD_EXAMPLES OFF CACHE INTERNAL "Build Dawn examples" FORCE)
73- set (DAWN_BUILD_SAMPLES OFF CACHE INTERNAL "Build Dawn samples" FORCE)
74- set (DAWN_BUILD_TESTS OFF CACHE INTERNAL "Build Dawn tests" FORCE)
75- set (DAWN_ENABLE_INSTALL OFF CACHE INTERNAL "Enable Dawn installation" FORCE)
76- set (DAWN_FETCH_DEPENDENCIES ON CACHE INTERNAL "Fetch Dawn dependencies" FORCE)
77- set (TINT_BUILD_TESTS OFF CACHE INTERNAL "Build Tint Tests" FORCE)
78- set (TINT_BUILD_IR_BINARY OFF CACHE INTERNAL "Build Tint IR binary" FORCE)
79- set (TINT_BUILD_CMD_TOOLS OFF CACHE INTERNAL "Build Tint command line tools" FORCE)
80- set (DAWN_EMSCRIPTEN_TOOLCHAIN ${EMSCRIPTEN_DIR} CACHE INTERNAL "Emscripten toolchain" FORCE)
81-
82- set (DAWN_COMMIT "66d57f910357befb441b91162f29a97f687af6d9" CACHE STRING "Dawn commit to checkout" FORCE)
83-
84- file (MAKE_DIRECTORY ${DAWN_DIR} )
85- # Initialize Git and set/update remote.
86- execute_process (COMMAND git init
87- WORKING_DIRECTORY "${DAWN_DIR} "
88- )
89- execute_process (
90- COMMAND git remote add origin https://dawn.googlesource.com/dawn
91- WORKING_DIRECTORY "${DAWN_DIR} "
92- )
93- # Fetch and checkout the specified commit.
94- execute_process (
95- COMMAND git fetch origin ${DAWN_COMMIT}
96- WORKING_DIRECTORY "${DAWN_DIR} "
97- )
98- execute_process (
99- COMMAND git checkout ${DAWN_COMMIT}
100- WORKING_DIRECTORY "${DAWN_DIR} "
101- )
102- execute_process (
103- COMMAND git reset --hard ${DAWN_COMMIT}
104- WORKING_DIRECTORY "${DAWN_DIR} "
105- )
106- # Fetch the Dawn repository if not already present.
107- FetchContent_Declare(
108- dawn
109- SOURCE_DIR ${DAWN_DIR}
110- SUBBUILD_DIR ${DAWN_BUILD_DIR} /tmp
111- BINARY_DIR ${DAWN_BUILD_DIR}
112- )
113- FetchContent_MakeAvailable(dawn)
114-
115- set (CMAKE_INCLUDE_PATH "${CMAKE_INCLUDE_PATH} ;${DAWN_DIR} /src" CACHE INTERNAL "" )
116-
117- set (DAWN_BUILD_FOUND ON )
118- endif () # End pre-build Dawn
119-
120- # Create an IMPORTED target for the Dawn library.
121- # Adjust the expected output name/extension per platform.
122- if (MSVC )
123- message (STATUS "Dawn build found on Windows." )
124- # MSVC: use separate debug and release dlls.
125- if ((NOT WEBGPU_DAWN_DEBUG) OR (WEBGPU_DAWN_DEBUG MATCHES "NOTFOUND" ))
126- find_library (WEBGPU_DAWN_DEBUG NAMES webgpu_dawn PATHS "${DAWN_BUILD_DIR} /src/dawn/native/Debug" )
127- endif ()
128- if ((NOT WEBGPU_DAWN_RELEASE) OR (WEBGPU_DAWN_RELEASE MATCHES "NOTFOUND" ))
129- find_library (WEBGPU_DAWN_RELEASE NAMES webgpu_dawn PATHS "${DAWN_BUILD_DIR} /src/dawn/native/Release" )
130- endif ()
131-
132- if (WEBGPU_DAWN_DEBUG OR WEBGPU_DAWN_RELEASE)
133- if (NOT TARGET webgpu_dawn)
134- add_library (webgpu_dawn INTERFACE )
135- target_link_libraries (webgpu_dawn INTERFACE
136- $<$<CONFIG:Debug>:${WEBGPU_DAWN_DEBUG} >
137- $<$<CONFIG:Release>:${WEBGPU_DAWN_RELEASE} >
138- )
139- endif ()
140- endif ()
141- elseif (IOS)
142- # On iOS, it is common to build a static library.
143- if (NOT TARGET webgpu_dawn)
144- add_library (webgpu_dawn STATIC IMPORTED )
145- set_target_properties (webgpu_dawn PROPERTIES
146- IMPORTED_LOCATION "${DAWN_BUILD_DIR} /src/dawn/native/webgpu_dawn.a" )
147- endif ()
148- elseif (APPLE )
149- # On macOS (non-iOS), typically a dynamic library (.dylib) is built.
150- if (NOT TARGET webgpu_dawn)
151- add_library (webgpu_dawn SHARED IMPORTED )
152- set_target_properties (webgpu_dawn PROPERTIES
153- IMPORTED_LOCATION "${DAWN_BUILD_DIR} /src/dawn/native/webgpu_dawn.dylib" )
154- endif ()
155- elseif (ANDROID)
156- if (NOT TARGET webgpu_dawn)
157- add_library (webgpu_dawn SHARED IMPORTED )
158- set_target_properties (webgpu_dawn PROPERTIES
159- IMPORTED_LOCATION "${DAWN_BUILD_DIR} /src/dawn/native/webgpu_dawn.so" )
160- endif ()
161- elseif (NOT EMSCRIPTEN) # For Linux and other Unix-like systems.
162- if (NOT TARGET webgpu_dawn)
163- add_library (webgpu_dawn SHARED IMPORTED )
164- set_target_properties (webgpu_dawn PROPERTIES
165- IMPORTED_LOCATION "${DAWN_BUILD_DIR} /src/dawn/native/webgpu_dawn.so" )
166- endif ()
167- endif ()
1+ cmake_minimum_required (VERSION 3.14)
2+
3+ include (ExternalProject)
4+ include (FetchContent)
5+
6+ # include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/print_target.cmake")
7+
8+
9+ # Setup directories and basic paths
10+ set (FETCHCONTENT_BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR} /external" )
11+ set (DAWN_DIR "${FETCHCONTENT_BASE_DIR} /dawn" CACHE INTERNAL "Dawn source directory" )
12+
13+ # For Emscripten builds (if desired)
14+ set (EM_SDK_DIR $ENV{EMSDK} CACHE INTERNAL "" )
15+ set (EMSCRIPTEN_DIR "${EM_SDK_DIR} /upstream/emscripten" CACHE INTERNAL "" )
16+
17+ # Decide where to build Dawn’s build files.
18+ if (EMSCRIPTEN)
19+ set (DAWN_BUILD_DIR "${DAWN_DIR} /build_web" CACHE INTERNAL "web build directory" FORCE)
20+ elseif (WIN32 )
21+ set (DAWN_BUILD_DIR "${DAWN_DIR} /build_win" CACHE INTERNAL "windows build directory" FORCE)
22+ elseif (IOS)
23+ set (DAWN_BUILD_DIR "${DAWN_DIR} /build_ios" CACHE INTERNAL "ios build directory" FORCE)
24+ elseif (APPLE )
25+ set (DAWN_BUILD_DIR "${DAWN_DIR} /build_mac" CACHE INTERNAL "mac build directory" FORCE)
26+ elseif (ANDROID)
27+ set (DAWN_BUILD_DIR "${DAWN_DIR} /build_android" CACHE INTERNAL "android build directory" FORCE)
28+ else ()
29+ set (DAWN_BUILD_DIR "${DAWN_DIR} /build_unix" CACHE INTERNAL "linux build directory" FORCE)
30+ endif ()
31+
32+ # Add Dawn header include directories so that they are available later.
33+ include_directories (BEFORE PUBLIC
34+ "${DAWN_BUILD_DIR} /src/dawn/native/"
35+ "${DAWN_BUILD_DIR} /src/dawn/native/Debug"
36+ "${DAWN_BUILD_DIR} /src/dawn/native/Release"
37+ )
38+
39+
40+ # Optionally try to find an existing Dawn build.
41+ set (ENABLE_DAWN_FIND OFF CACHE BOOL "Attempt to find an existing Dawn build" FORCE)
42+ set (DAWN_BUILD_FOUND OFF CACHE BOOL "Dawn build found" FORCE)
43+
44+ if (ENABLE_DAWN_FIND)
45+ message (STATUS "Attempting to find an existing Dawn build..." )
46+ if (WIN32 )
47+ find_library (WEBGPU_DAWN_DEBUG NAMES webgpu_dawn HINTS "${DAWN_BUILD_DIR} /src/dawn/native/Debug" )
48+ find_library (WEBGPU_DAWN_RELEASE NAMES webgpu_dawn HINTS "${DAWN_BUILD_DIR} /src/dawn/native/Release" )
49+
50+ if (WEBGPU_DAWN_DEBUG OR WEBGPU_DAWN_RELEASE)
51+ message (STATUS "Dawn build found on Windows. Debug: ${WEBGPU_DAWN_DEBUG} , Release: ${WEBGPU_DAWN_RELEASE} " )
52+ set (DAWN_BUILD_FOUND ON )
53+ endif ()
54+ elseif (NOT EMSCRIPTEN AND NOT WIN32 )
55+ find_library (WEBGPU_DAWN_LIB NAMES webgpu_dawn.so PATHS "${DAWN_BUILD_DIR} /src/dawn/native" )
56+
57+ if (WEBGPU_DAWN_LIB)
58+ message (STATUS "Dawn build found on Linux/Unix. Library: ${WEBGPU_DAWN_LIB} " )
59+ set (DAWN_BUILD_FOUND ON )
60+ endif ()
61+ endif ()
62+ endif ()
63+
64+
65+ # Pre-build Dawn at configuration time if not already built.
66+ if (NOT DAWN_BUILD_FOUND)
67+ message (STATUS "Dawn build not found - pre-building Dawn." )
68+
69+ set (DAWN_ALWAYS_ASSERT ON CACHE INTERNAL "Always assert in Dawn" FORCE)
70+ set (DAWN_BUILD_PROTOBUF OFF CACHE INTERNAL "Build protobuf" FORCE)
71+ set (DAWN_BUILD_MONOLITHIC_LIBRARY ON CACHE INTERNAL "Build Dawn monolithically" FORCE)
72+ set (DAWN_BUILD_EXAMPLES OFF CACHE INTERNAL "Build Dawn examples" FORCE)
73+ set (DAWN_BUILD_SAMPLES OFF CACHE INTERNAL "Build Dawn samples" FORCE)
74+ set (DAWN_BUILD_TESTS OFF CACHE INTERNAL "Build Dawn tests" FORCE)
75+ set (DAWN_ENABLE_INSTALL ON CACHE INTERNAL "Enable Dawn installation" FORCE)
76+ set (DAWN_FETCH_DEPENDENCIES ON CACHE INTERNAL "Fetch Dawn dependencies" FORCE)
77+ set (TINT_BUILD_TESTS OFF CACHE INTERNAL "Build Tint Tests" FORCE)
78+ set (TINT_BUILD_IR_BINARY OFF CACHE INTERNAL "Build Tint IR binary" FORCE)
79+ set (TINT_BUILD_CMD_TOOLS OFF CACHE INTERNAL "Build Tint command line tools" FORCE)
80+ set (TINT_BUILD_DOCS OFF CACHE INTERNAL "Build Tint docs" FORCE)
81+ set (DAWN_EMSCRIPTEN_TOOLCHAIN ${EMSCRIPTEN_DIR} CACHE INTERNAL "Emscripten toolchain" FORCE)
82+
83+ set (DAWN_COMMIT "66d57f910357befb441b91162f29a97f687af6d9" CACHE STRING "Dawn commit to checkout" FORCE)
84+
85+ file (MAKE_DIRECTORY ${DAWN_DIR} )
86+ # Initialize Git and set/update remote.
87+ execute_process (COMMAND git init
88+ WORKING_DIRECTORY "${DAWN_DIR} "
89+ )
90+ execute_process (
91+ COMMAND git remote add origin https://dawn.googlesource.com/dawn
92+ WORKING_DIRECTORY "${DAWN_DIR} "
93+ )
94+ # Fetch and checkout the specified commit.
95+ execute_process (
96+ COMMAND git fetch origin ${DAWN_COMMIT}
97+ WORKING_DIRECTORY "${DAWN_DIR} "
98+ )
99+ execute_process (
100+ COMMAND git checkout ${DAWN_COMMIT}
101+ WORKING_DIRECTORY "${DAWN_DIR} "
102+ )
103+ execute_process (
104+ COMMAND git reset --hard ${DAWN_COMMIT}
105+ WORKING_DIRECTORY "${DAWN_DIR} "
106+ )
107+ # Fetch the Dawn repository if not already present.
108+ FetchContent_Declare(
109+ dawn
110+ SOURCE_DIR ${DAWN_DIR}
111+ SUBBUILD_DIR ${DAWN_BUILD_DIR} /tmp
112+ BINARY_DIR ${DAWN_BUILD_DIR}
113+ )
114+ FetchContent_MakeAvailable(dawn)
115+
116+ # Remove -msse4.1 flag from abseil-cpp after fetching Dawn
117+ if (APPLE )
118+ set (ABSEIL_COPTS_FILE "${DAWN_DIR} /third_party/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake" )
119+ if (EXISTS "${ABSEIL_COPTS_FILE} " )
120+ message (STATUS "Removing the '-msse4.1' flag from Abseil copts." )
121+ file (READ "${ABSEIL_COPTS_FILE} " COPTS_CONTENT)
122+ string (REGEX REPLACE "-msse4.1" "" COPTS_CONTENT "${COPTS_CONTENT} " )
123+ file (WRITE "${ABSEIL_COPTS_FILE} " "${COPTS_CONTENT} " )
124+ endif ()
125+ endif ()
126+
127+ set (CMAKE_INCLUDE_PATH "${CMAKE_INCLUDE_PATH} ;${DAWN_DIR} /src" CACHE INTERNAL "" )
128+
129+ set (DAWN_BUILD_FOUND ON )
130+ endif () # End pre-build Dawn
131+
132+ # Create an IMPORTED target for the Dawn library.
133+ # Adjust the expected output name/extension per platform.
134+ if (MSVC )
135+ message (STATUS "Dawn build found on Windows." )
136+ # MSVC: use separate debug and release dlls.
137+ if ((NOT WEBGPU_DAWN_DEBUG) OR (WEBGPU_DAWN_DEBUG MATCHES "NOTFOUND" ))
138+ find_library (WEBGPU_DAWN_DEBUG NAMES webgpu_dawn PATHS "${DAWN_BUILD_DIR} /src/dawn/native/Debug" )
139+ endif ()
140+ if ((NOT WEBGPU_DAWN_RELEASE) OR (WEBGPU_DAWN_RELEASE MATCHES "NOTFOUND" ))
141+ find_library (WEBGPU_DAWN_RELEASE NAMES webgpu_dawn PATHS "${DAWN_BUILD_DIR} /src/dawn/native/Release" )
142+ endif ()
143+
144+ if (WEBGPU_DAWN_DEBUG OR WEBGPU_DAWN_RELEASE)
145+ if (NOT TARGET webgpu_dawn)
146+ add_library (webgpu_dawn INTERFACE )
147+ target_link_libraries (webgpu_dawn INTERFACE
148+ $<$<CONFIG:Debug>:${WEBGPU_DAWN_DEBUG} >
149+ $<$<CONFIG:Release>:${WEBGPU_DAWN_RELEASE} >
150+ )
151+ endif ()
152+ endif ()
153+ elseif (IOS)
154+ # On iOS, it is common to build a static library.
155+ if (NOT TARGET webgpu_dawn)
156+ add_library (webgpu_dawn STATIC IMPORTED )
157+ set_target_properties (webgpu_dawn PROPERTIES
158+ IMPORTED_LOCATION "${DAWN_BUILD_DIR} /src/dawn/native/webgpu_dawn.a" )
159+ endif ()
160+ elseif (APPLE )
161+ # On macOS (non-iOS), typically a dynamic library (.dylib) is built.
162+ if (NOT TARGET webgpu_dawn)
163+ add_library (webgpu_dawn SHARED IMPORTED )
164+ set_target_properties (webgpu_dawn PROPERTIES
165+ IMPORTED_LOCATION "${DAWN_BUILD_DIR} /src/dawn/native/webgpu_dawn.dylib" )
166+ endif ()
167+ elseif (ANDROID)
168+ if (NOT TARGET webgpu_dawn)
169+ add_library (webgpu_dawn SHARED IMPORTED )
170+ set_target_properties (webgpu_dawn PROPERTIES
171+ IMPORTED_LOCATION "${DAWN_BUILD_DIR} /src/dawn/native/webgpu_dawn.so" )
172+ endif ()
173+ elseif (NOT EMSCRIPTEN) # For Linux and other Unix-like systems.
174+ if (NOT TARGET webgpu_dawn)
175+ add_library (webgpu_dawn SHARED IMPORTED )
176+ set_target_properties (webgpu_dawn PROPERTIES
177+ IMPORTED_LOCATION "${DAWN_BUILD_DIR} /src/dawn/native/webgpu_dawn.so" )
178+ endif ()
179+ endif ()
0 commit comments