Skip to content

Commit 69b2b6d

Browse files
Fix dawn.cmake for macos
1 parent 3827c8b commit 69b2b6d

File tree

1 file changed

+179
-167
lines changed

1 file changed

+179
-167
lines changed

cmake/dawn.cmake

Lines changed: 179 additions & 167 deletions
Original file line numberDiff line numberDiff line change
@@ -1,167 +1,179 @@
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

Comments
 (0)