aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/ports/dawn
diff options
context:
space:
mode:
authorEthan Morgan <ethan@gweithio.com>2026-02-14 16:44:06 +0000
committerEthan Morgan <ethan@gweithio.com>2026-02-14 16:44:06 +0000
commit54409423f767d8b1cf30cb7d0efca6b4ca138823 (patch)
treed915ac7828703ce4b963efdd9728a1777ba18c1e /vcpkg/ports/dawn
move to own git serverHEADmaster
Diffstat (limited to 'vcpkg/ports/dawn')
-rw-r--r--vcpkg/ports/dawn/000-fix-emdawnwebgpu.patch19
-rw-r--r--vcpkg/ports/dawn/001-fix-windows-build.patch23
-rw-r--r--vcpkg/ports/dawn/002-fix-uwp.patch19
-rw-r--r--vcpkg/ports/dawn/003-fix-d3d11.patch26
-rw-r--r--vcpkg/ports/dawn/004-deps.patch127
-rw-r--r--vcpkg/ports/dawn/005-bsd-support.patch42
-rw-r--r--vcpkg/ports/dawn/006-fix-x11-include-dirs.patch23
-rw-r--r--vcpkg/ports/dawn/DawnConfig.cmake7
-rw-r--r--vcpkg/ports/dawn/portfile.cmake213
-rw-r--r--vcpkg/ports/dawn/unofficial_webgpu_dawn.pc.in13
-rw-r--r--vcpkg/ports/dawn/usage8
-rw-r--r--vcpkg/ports/dawn/vcpkg.json102
12 files changed, 622 insertions, 0 deletions
diff --git a/vcpkg/ports/dawn/000-fix-emdawnwebgpu.patch b/vcpkg/ports/dawn/000-fix-emdawnwebgpu.patch
new file mode 100644
index 0000000..1802d45
--- /dev/null
+++ b/vcpkg/ports/dawn/000-fix-emdawnwebgpu.patch
@@ -0,0 +1,19 @@
+diff --git a/emdawnwebgpu.port.py b/emdawnwebgpu.port.py
+index 4b90064..1956d0b 100644
+--- a/emdawnwebgpu.port.py
++++ b/emdawnwebgpu.port.py
+@@ -70,10 +70,10 @@ def _walk(path):
+ yield os.path.join(dirpath, filename)
+
+
+-_pkg_dir = os.path.dirname(os.path.realpath(__file__))
+-_c_include_dir = os.path.join(_pkg_dir, 'webgpu', 'include')
+-_cpp_include_dir = os.path.join(_pkg_dir, 'webgpu_cpp', 'include')
+-_src_dir = os.path.join(_pkg_dir, 'webgpu', 'src')
++_pkg_dir = os.path.dirname(os.path.realpath(os.path.join(__file__, '..', '..')))
++_c_include_dir = os.path.join(_pkg_dir, 'include')
++_cpp_include_dir = os.path.join(_pkg_dir, 'include')
++_src_dir = os.path.join(_pkg_dir, 'share', 'dawn', 'src')
+ _srcs = [
+ os.path.join(_src_dir, 'webgpu.cpp'),
+ ]
diff --git a/vcpkg/ports/dawn/001-fix-windows-build.patch b/vcpkg/ports/dawn/001-fix-windows-build.patch
new file mode 100644
index 0000000..7db9098
--- /dev/null
+++ b/vcpkg/ports/dawn/001-fix-windows-build.patch
@@ -0,0 +1,23 @@
+diff --git a/src/cmake/DawnLibrary.cmake b/src/cmake/DawnLibrary.cmake
+index a5352433f0..d8aa1788d2 100644
+--- a/src/cmake/DawnLibrary.cmake
++++ b/src/cmake/DawnLibrary.cmake
+@@ -180,12 +180,12 @@ function(dawn_install_target name)
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ )
+ # When building in debug mode with MSVC, install PDB files together with binaries
+- if (MSVC)
+- get_target_property(target_type "${name}" TYPE)
+- if ((target_type STREQUAL "STATIC_LIBRARY") OR (target_type STREQUAL "SHARED_LIBRARY") OR (target_type STREQUAL "EXECUTABLE"))
+- install(FILES $<TARGET_PDB_FILE:${name}> DESTINATION ${CMAKE_INSTALL_BINDIR} OPTIONAL)
+- endif()
+- endif (MSVC)
++ # if (MSVC)
++ # get_target_property(target_type "${name}" TYPE)
++ # if ((target_type STREQUAL "STATIC_LIBRARY") OR (target_type STREQUAL "SHARED_LIBRARY") OR (target_type STREQUAL "EXECUTABLE"))
++ # install(FILES $<TARGET_PDB_FILE:${name}> DESTINATION ${CMAKE_INSTALL_BINDIR} OPTIONAL)
++ # endif()
++ # endif (MSVC)
+
+ # Automatically determine where each header should go based on its subdirectory in the include dir.
+ foreach(header IN LISTS arg_HEADERS)
diff --git a/vcpkg/ports/dawn/002-fix-uwp.patch b/vcpkg/ports/dawn/002-fix-uwp.patch
new file mode 100644
index 0000000..15213d3
--- /dev/null
+++ b/vcpkg/ports/dawn/002-fix-uwp.patch
@@ -0,0 +1,19 @@
+diff --git a/src/dawn/native/d3d/PlatformFunctions.cpp b/src/dawn/native/d3d/PlatformFunctions.cpp
+index 12d65e0db5..d3abb05fb5 100644
+--- a/src/dawn/native/d3d/PlatformFunctions.cpp
++++ b/src/dawn/native/d3d/PlatformFunctions.cpp
+@@ -121,10 +121,14 @@ MaybeError PlatformFunctions::EnsureFXC(std::span<const std::string> searchPaths
+ }
+
+ void PlatformFunctions::InitWindowsVersion() {
++#if DAWN_PLATFORM_IS(WINUWP)
++ return;
++#else
+ // Currently we only care about the build number of Windows 10 and Windows 11.
+ if (!IsWindows10OrGreater()) {
+ return;
+ }
++#endif
+
+ // Referenced from base/win/windows_version.cc in Chromium
+ constexpr wchar_t kRegKeyWindowsNTCurrentVersion[] =
diff --git a/vcpkg/ports/dawn/003-fix-d3d11.patch b/vcpkg/ports/dawn/003-fix-d3d11.patch
new file mode 100644
index 0000000..bf20915
--- /dev/null
+++ b/vcpkg/ports/dawn/003-fix-d3d11.patch
@@ -0,0 +1,26 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 5826595d6f..9521fcf6a7 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -214,6 +214,12 @@ else()
+ set(TINT_DEFAULT_GLSL OFF)
+ endif()
+
++if (DAWN_ENABLE_D3D11 OR DAWN_ENABLE_D3D12)
++ set(TINT_DEFAULT_HLSL ON)
++else()
++ set(TINT_DEFAULT_HLSL OFF)
++endif()
++
+ option(TINT_ENABLE_INSTALL "Enable install step for Tint libraries" OFF)
+ option(TINT_BUILD_CMD_TOOLS "Build the Tint command line tools" ON)
+
+@@ -227,7 +233,7 @@ option(TINT_BUILD_SPV_READER "Build the SPIR-V input reader" ${DAWN_ENABLE_VULKA
+ option(TINT_BUILD_WGSL_READER "Build the WGSL input reader" ON)
+ option(TINT_BUILD_GLSL_WRITER "Build the GLSL output writer" ${TINT_DEFAULT_GLSL})
+ option(TINT_BUILD_GLSL_VALIDATOR "Build the GLSL output validator" ON)
+-option(TINT_BUILD_HLSL_WRITER "Build the HLSL output writer" ${DAWN_ENABLE_D3D12})
++option(TINT_BUILD_HLSL_WRITER "Build the HLSL output writer" ${TINT_DEFAULT_HLSL})
+ option(TINT_BUILD_MSL_WRITER "Build the MSL output writer" ${DAWN_ENABLE_METAL})
+ option(TINT_BUILD_SPV_WRITER "Build the SPIR-V output writer" ${DAWN_ENABLE_VULKAN})
+ option(TINT_BUILD_WGSL_WRITER "Build the WGSL output writer" ON)
diff --git a/vcpkg/ports/dawn/004-deps.patch b/vcpkg/ports/dawn/004-deps.patch
new file mode 100644
index 0000000..9a65efd
--- /dev/null
+++ b/vcpkg/ports/dawn/004-deps.patch
@@ -0,0 +1,127 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 9521fcf6a7..9c38142ec2 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -460,6 +460,11 @@ set(TINT_SPIRV_TOOLS_DIR ${DAWN_SPIRV_TOOLS_DIR})
+ ################################################################################
+ # Run on all subdirectories
+ ################################################################################
++find_package(absl CONFIG REQUIRED)
++if (DAWN_ENABLE_VULKAN)
++ find_package(VulkanHeaders CONFIG REQUIRED)
++ find_package(VulkanUtilityLibraries CONFIG REQUIRED)
++endif()
+ add_subdirectory(third_party)
+
+ # TODO(crbug.com/tint/455): Tint does not currently build with CMake when
+diff --git a/src/cmake/BundleLibraries.cmake b/src/cmake/BundleLibraries.cmake
+index 682a73924c..1ec358c54c 100644
+--- a/src/cmake/BundleLibraries.cmake
++++ b/src/cmake/BundleLibraries.cmake
+@@ -92,7 +92,18 @@ function(bundle_libraries output_target library_type)
+
+ # Collect $<TARGET_OBJECTS:...> from STATIC and OBJECT library dependencies
+ set(all_objects "")
++ set(all_libraries "")
++ message(STATUS "all_dependencies: ${all_dependencies}")
+ foreach(dependency IN LISTS all_dependencies)
++ if("${dependency}" MATCHES "^absl::")
++ list(APPEND all_libraries ${dependency})
++ continue()
++ endif()
++ if("${dependency}" MATCHES "^Vulkan-Headers" OR "${dependency}" MATCHES "^VulkanUtility")
++ list(APPEND all_libraries ${dependency})
++ continue()
++ endif()
++
+ get_target_property(type ${dependency} TYPE)
+
+ # We only want object files from static or object libraries.
+@@ -112,6 +123,7 @@ function(bundle_libraries output_target library_type)
+ # Create the output library using the validated type and collected objects
+ # If all_objects is empty, add_library will still create an empty library of the specified type.
+ add_library(${output_target} ${library_type} ${all_objects})
++ target_link_libraries(${output_target} PRIVATE ${all_libraries})
+
+ # Add dependencies to ensure input targets are built before the bundled library.
+ # This handles the build order correctly.
+diff --git a/src/cmake/DawnConfig.cmake.in b/src/cmake/DawnConfig.cmake.in
+index 8bfeda55bc..a0f9858530 100644
+--- a/src/cmake/DawnConfig.cmake.in
++++ b/src/cmake/DawnConfig.cmake.in
+@@ -31,4 +31,9 @@
+ # 2. https://cmake.org/cmake/help/latest/guide/tutorial/Adding%20Export%20Configuration.html
+
+ @PACKAGE_INIT@
++
++include(CMakeFindDependencyMacro)
++
++find_dependency(absl CONFIG)
++
+ include ("${CMAKE_CURRENT_LIST_DIR}/DawnTargets.cmake")
+diff --git a/src/dawn/native/CMakeLists.txt b/src/dawn/native/CMakeLists.txt
+index 21ef415451..7f4867fee6 100644
+--- a/src/dawn/native/CMakeLists.txt
++++ b/src/dawn/native/CMakeLists.txt
+@@ -636,11 +636,17 @@ if ((DAWN_ENABLE_OPENGL OR DAWN_ENABLE_VULKAN) AND DAWN_ENABLE_SPIRV_VALIDATION)
+ endif()
+
+ if (DAWN_ENABLE_OPENGL)
++ find_path(OPENGL_REGISTRY_INCLUDE_DIRS "GL/glcorearb.h")
++ find_file(
++ OPENGL_XML_FILE
++ NAMES "opengl/gl.xml"
++ PATHS "${OPENGL_REGISTRY_INCLUDE_DIRS}/../share"
++ )
+ DawnGenerator(
+ SCRIPT "${Dawn_SOURCE_DIR}/generator/opengl_loader_generator.py"
+ PRINT_NAME "OpenGL function loader"
+ EXTRA_PARAMETERS "--gl-xml"
+- "${Dawn_SOURCE_DIR}/third_party/khronos/OpenGL-Registry/xml/gl.xml"
++ "${OPENGL_XML_FILE}"
+ "--supported-extensions"
+ "${Dawn_SOURCE_DIR}/src/dawn/native/opengl/supported_extensions.json"
+ OUTPUT_HEADERS DAWN_NATIVE_OPENGL_AUTOGEN_HEADERS
+diff --git a/third_party/CMakeLists.txt b/third_party/CMakeLists.txt
+index b423c43d27..068a784b3d 100644
+--- a/third_party/CMakeLists.txt
++++ b/third_party/CMakeLists.txt
+@@ -41,6 +41,7 @@ if (DAWN_FETCH_DEPENDENCIES)
+ )
+ endif ()
+
++if(0)
+ set(ABSL_ROOT_DIR ${DAWN_ABSEIL_DIR})
+ if (NOT TARGET absl::strings)
+ # Recommended setting for compatibility with future abseil releases.
+@@ -62,6 +63,7 @@ if (NOT TARGET absl::strings)
+
+ add_subdirectory(${DAWN_ABSEIL_DIR} "${CMAKE_CURRENT_BINARY_DIR}/abseil")
+ endif()
++endif()
+
+ if (DAWN_BUILD_PROTOBUF AND EXISTS "${DAWN_PROTOBUF_DIR}/cmake")
+ if (("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") AND WIN32)
+@@ -175,10 +177,12 @@ endif()
+ if (DAWN_ENABLE_DESKTOP_GL OR DAWN_ENABLE_OPENGLES)
+ # Header-only library for khrplatform.h
+ add_library(dawn_khronos_platform INTERFACE)
+- target_sources(dawn_khronos_platform INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/khronos/EGL-Registry/api/KHR/khrplatform.h")
+- target_include_directories(dawn_khronos_platform INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/khronos/EGL-Registry/api")
++ find_path(EGL_REGISTRY_INCLUDE_DIRS "EGL/egl.h")
++ target_sources(dawn_khronos_platform INTERFACE "${EGL_REGISTRY_INCLUDE_DIRS}/KHR/khrplatform.h")
++ target_include_directories(dawn_khronos_platform INTERFACE "${EGL_REGISTRY_INCLUDE_DIRS}")
+ endif()
+
++if (0)
+ if (NOT TARGET Vulkan::Headers AND DAWN_ENABLE_VULKAN)
+ message(STATUS "Dawn: using Vulkan::Headers at ${DAWN_VULKAN_HEADERS_DIR}")
+
+@@ -190,6 +194,7 @@ if (NOT TARGET Vulkan::UtilityHeaders AND DAWN_ENABLE_VULKAN)
+ message(STATUS "Dawn: using VulkanUtilityLibraries at ${DAWN_VULKAN_UTILITY_LIBRARIES_DIR}")
+ add_subdirectory(${DAWN_VULKAN_UTILITY_LIBRARIES_DIR} "${CMAKE_CURRENT_BINARY_DIR}/vulkan-utility-libraries/src")
+ endif()
++endif()
+
+ if (DAWN_ENABLE_SWIFTSHADER AND NOT TARGET vk_swiftshader)
+ set(SWIFTSHADER_BUILD_TESTS OFF CACHE BOOL "" FORCE)
diff --git a/vcpkg/ports/dawn/005-bsd-support.patch b/vcpkg/ports/dawn/005-bsd-support.patch
new file mode 100644
index 0000000..ecbe73c
--- /dev/null
+++ b/vcpkg/ports/dawn/005-bsd-support.patch
@@ -0,0 +1,42 @@
+diff --git a/include/dawn/native/VulkanBackend.h b/include/dawn/native/VulkanBackend.h
+index 201bc324..3221ad2e 100644
+--- a/include/dawn/native/VulkanBackend.h
++++ b/include/dawn/native/VulkanBackend.h
+@@ -83,7 +83,7 @@ struct ExternalImageExportInfoVk : ExternalImageExportInfo {
+ };
+
+ // Can't use DAWN_PLATFORM_IS(LINUX) since header included in both Dawn and Chrome
+-#if defined(__linux__) || defined(__Fuchsia__)
++#if defined(__linux__) || defined(__Fuchsia__) || defined(__OpenBSD__) || defined(__FreeBSD__)
+
+ // Common properties of external images represented by FDs. On successful import the file
+ // descriptor's ownership is transferred to the Dawn implementation and they shouldn't be
+diff --git a/src/dawn/common/Platform.h b/src/dawn/common/Platform.h
+index b4ac6100..cbc5c7b8 100644
+--- a/src/dawn/common/Platform.h
++++ b/src/dawn/common/Platform.h
+@@ -60,6 +60,11 @@
+ #error "Unsupported Windows platform."
+ #endif
+
++#elif defined(__OpenBSD__) || defined(__FreeBSD__)
++#define DAWN_PLATFORM_IS_LINUX 1
++#define DAWN_PLATFORM_IS_BSD 1
++#define DAWN_PLATFORM_IS_POSIX 1
++
+ #elif defined(__linux__)
+ #define DAWN_PLATFORM_IS_LINUX 1
+ #define DAWN_PLATFORM_IS_POSIX 1
+diff --git a/src/dawn/native/vulkan/BackendVk.cpp b/src/dawn/native/vulkan/BackendVk.cpp
+index 058cbecc..9bae2d27 100644
+--- a/src/dawn/native/vulkan/BackendVk.cpp
++++ b/src/dawn/native/vulkan/BackendVk.cpp
+@@ -56,7 +56,7 @@ constexpr char kSwiftshaderLibName[] = "libvk_swiftshader.dylib";
+ #endif
+
+ #if DAWN_PLATFORM_IS(LINUX)
+-#if DAWN_PLATFORM_IS(ANDROID)
++#if DAWN_PLATFORM_IS(ANDROID) || DAWN_PLATFORM_IS(BSD)
+ constexpr char kVulkanLibName[] = "libvulkan.so";
+ #else
+ constexpr char kVulkanLibName[] = "libvulkan.so.1";
diff --git a/vcpkg/ports/dawn/006-fix-x11-include-dirs.patch b/vcpkg/ports/dawn/006-fix-x11-include-dirs.patch
new file mode 100644
index 0000000..fdc24d3
--- /dev/null
+++ b/vcpkg/ports/dawn/006-fix-x11-include-dirs.patch
@@ -0,0 +1,23 @@
+diff --git a/src/dawn/native/CMakeLists.txt b/src/dawn/native/CMakeLists.txt
+index 72b92fc8..a1c6016c 100644
+--- a/src/dawn/native/CMakeLists.txt
++++ b/src/dawn/native/CMakeLists.txt
+@@ -926,6 +926,7 @@ if(BUILD_SHARED_LIBS)
+ endif()
+
+ if (DAWN_USE_X11)
++ target_include_directories(dawn_native_objects PRIVATE ${X11_INCLUDE_DIR})
+ target_include_directories(dawn_native PRIVATE ${X11_INCLUDE_DIR})
+ endif()
+
+@@ -999,6 +1000,10 @@ if (DAWN_BUILD_MONOLITHIC_LIBRARY)
+ )
+ endif()
+
++ if (DAWN_USE_X11)
++ target_include_directories(webgpu_dawn_objects PRIVATE ${X11_INCLUDE_DIR})
++ endif()
++
+ # Do the bundling of all the objects and dependencies together.
+ include(BundleLibraries)
+ bundle_libraries(webgpu_dawn ${DAWN_BUILD_MONOLITHIC_LIBRARY} webgpu_dawn_objects)
diff --git a/vcpkg/ports/dawn/DawnConfig.cmake b/vcpkg/ports/dawn/DawnConfig.cmake
new file mode 100644
index 0000000..70dfa19
--- /dev/null
+++ b/vcpkg/ports/dawn/DawnConfig.cmake
@@ -0,0 +1,7 @@
+if (NOT TARGET dawn::webgpu_dawn)
+ add_library(dawn::webgpu_dawn INTERFACE IMPORTED)
+ set_target_properties(dawn::webgpu_dawn PROPERTIES
+ INTERFACE_COMPILE_OPTIONS "--use-port=${CMAKE_CURRENT_LIST_DIR}/emdawnwebgpu.port.py"
+ INTERFACE_LINK_OPTIONS "--use-port=${CMAKE_CURRENT_LIST_DIR}/emdawnwebgpu.port.py"
+ )
+endif()
diff --git a/vcpkg/ports/dawn/portfile.cmake b/vcpkg/ports/dawn/portfile.cmake
new file mode 100644
index 0000000..90cf215
--- /dev/null
+++ b/vcpkg/ports/dawn/portfile.cmake
@@ -0,0 +1,213 @@
+if (VCPKG_TARGET_IS_EMSCRIPTEN)
+ vcpkg_download_distfile(ARCHIVE
+ URLS "https://github.com/google/dawn/releases/download/v${VERSION}/emdawnwebgpu_pkg-v${VERSION}.zip"
+ FILENAME "emdawnwebgpu_pkg-v${VERSION}.zip"
+ SHA512 a0544b3bf2d81abee91fb43901d384b021005d4158b43fec996977607f08852b211940a3ca71d37ac8bda52821c361bbaa93d0e4e63f72ff186863ef48a6a3d0
+ )
+ vcpkg_extract_source_archive(
+ SOURCE_PATH
+ ARCHIVE ${ARCHIVE}
+ PATCHES
+ 000-fix-emdawnwebgpu.patch
+ )
+ set(VCPKG_BUILD_TYPE release)
+ file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/DawnConfig.cmake" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
+ file(INSTALL "${SOURCE_PATH}/webgpu/include" DESTINATION "${CURRENT_PACKAGES_DIR}")
+ file(INSTALL "${SOURCE_PATH}/webgpu_cpp/include" DESTINATION "${CURRENT_PACKAGES_DIR}")
+ file(INSTALL "${SOURCE_PATH}/webgpu/src" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" PATTERN "LICENSE" EXCLUDE)
+ file(INSTALL "${SOURCE_PATH}/emdawnwebgpu.port.py" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
+ set(DAWN_PKGCONFIG_CFLAGS "--use-port=\${prefix}/share/${PORT}/emdawnwebgpu.port.py")
+ set(DAWN_PKGCONFIG_LIBS "--use-port=\${prefix}/share/${PORT}/emdawnwebgpu.port.py")
+ set(DAWN_PKGCONFIG_REQUIRES "")
+ configure_file("${CMAKE_CURRENT_LIST_DIR}/unofficial_webgpu_dawn.pc.in" "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/unofficial_webgpu_dawn.pc" @ONLY)
+ vcpkg_fixup_pkgconfig()
+ vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/webgpu/src/LICENSE" "${SOURCE_PATH}/webgpu_cpp/LICENSE")
+ file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
+ return()
+endif()
+
+vcpkg_from_github(
+ OUT_SOURCE_PATH SOURCE_PATH
+ REPO google/dawn
+ REF "v${VERSION}"
+ SHA512 6962d1526ac88d4e00d236b4ae86bd885d67f493d6b7342117e3b658fa6f37bf6d6b8617af4d74ef0bf9e3e95cf91aed567fb0f90bf836ad132dff4a304525f8
+ HEAD_REF master
+ PATCHES
+ 001-fix-windows-build.patch
+ 002-fix-uwp.patch
+ 003-fix-d3d11.patch
+ 004-deps.patch
+ 005-bsd-support.patch
+ 006-fix-x11-include-dirs.patch
+)
+
+# vcpkg_find_acquire_program(PYTHON3)
+# vcpkg_execute_in_download_mode(
+# COMMAND "${PYTHON3}" tools/fetch_dawn_dependencies.py
+# WORKING_DIRECTORY "${SOURCE_PATH}"
+# )
+#
+# get_dawn_deps_commit() { curl -s "https://dawn.googlesource.com/dawn/+/refs/heads/chromium/7371/$1" | htmlq .gitlink-detail --text; }
+#
+
+function(checkout_in_path PATH URL REF)
+ if(EXISTS "${PATH}")
+ file(GLOB_RECURSE subdirectory_children "${CURRENT_PACKAGES_DIR}/include/${directory_child}/*")
+ if(NOT "${subdirectory_children}" STREQUAL "")
+ return()
+ else()
+ file(REMOVE_RECURSE "${PATH}")
+ endif()
+ endif()
+
+ vcpkg_from_git(
+ OUT_SOURCE_PATH DEP_SOURCE_PATH
+ URL "${URL}"
+ REF "${REF}"
+ )
+ file(RENAME "${DEP_SOURCE_PATH}" "${PATH}")
+ file(REMOVE_RECURSE "${DEP_SOURCE_PATH}")
+endfunction()
+
+checkout_in_path(
+ "${SOURCE_PATH}/third_party/jinja2"
+ "https://chromium.googlesource.com/chromium/src/third_party/jinja2"
+ "e2d024354e11cc6b041b0cff032d73f0c7e43a07"
+)
+
+checkout_in_path(
+ "${SOURCE_PATH}/third_party/markupsafe"
+ "https://chromium.googlesource.com/chromium/src/third_party/markupsafe"
+ "0bad08bb207bbfc1d6f3bbc82b9242b0c50e5794"
+)
+
+checkout_in_path(
+ "${SOURCE_PATH}/third_party/spirv-headers/src"
+ "https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Headers"
+ "a8637796c28386c3cf3b4e8107020fbb52c46f3f"
+)
+
+checkout_in_path(
+ "${SOURCE_PATH}/third_party/spirv-tools/src"
+ "https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools"
+ "f386417185be0601894b20d9ad000aceb73d898b"
+)
+
+vcpkg_find_acquire_program(PYTHON3)
+
+if (VCPKG_LIBRARY_LINKAGE STREQUAL "static")
+ set(DAWN_BUILD_MONOLITHIC_LIBRARY "STATIC")
+else()
+ set(DAWN_BUILD_MONOLITHIC_LIBRARY "SHARED")
+endif()
+
+# DAWN_BUILD_MONOLITHIC_LIBRARY SHARED/STATIC requires BUILD_SHARED_LIBS=OFF
+set(VCPKG_LIBRARY_LINKAGE_BACKUP ${VCPKG_LIBRARY_LINKAGE})
+set(VCPKG_LIBRARY_LINKAGE static)
+
+set(DAWN_ENABLE_NULL ON)
+set(DAWN_ENABLE_D3D11 OFF)
+if("d3d11" IN_LIST FEATURES)
+ set(DAWN_ENABLE_D3D11 ON)
+endif()
+set(DAWN_ENABLE_D3D12 OFF)
+if("d3d12" IN_LIST FEATURES)
+ set(DAWN_ENABLE_D3D12 ON)
+endif()
+set(DAWN_ENABLE_DESKTOP_GL OFF)
+if("gl" IN_LIST FEATURES)
+ set(DAWN_ENABLE_DESKTOP_GL ON)
+endif()
+set(DAWN_ENABLE_OPENGLES OFF)
+if("gles" IN_LIST FEATURES)
+ set(DAWN_ENABLE_OPENGLES ON)
+endif()
+set(DAWN_ENABLE_METAL OFF)
+if("metal" IN_LIST FEATURES)
+ set(DAWN_ENABLE_METAL ON)
+endif()
+set(DAWN_ENABLE_VULKAN OFF)
+if("vulkan" IN_LIST FEATURES)
+ set(DAWN_ENABLE_VULKAN ON)
+endif()
+set(DAWN_USE_WAYLAND OFF)
+if("wayland" IN_LIST FEATURES)
+ set(DAWN_USE_WAYLAND ON)
+endif()
+set(DAWN_USE_X11 OFF)
+if("x11" IN_LIST FEATURES)
+ set(DAWN_USE_X11 ON)
+endif()
+
+vcpkg_cmake_configure(
+ SOURCE_PATH "${SOURCE_PATH}"
+ OPTIONS
+ -DPython3_EXECUTABLE="${PYTHON3}"
+ -DDAWN_BUILD_MONOLITHIC_LIBRARY=${DAWN_BUILD_MONOLITHIC_LIBRARY}
+ -DDAWN_ENABLE_INSTALL=ON
+ -DDAWN_USE_GLFW=OFF
+ -DDAWN_BUILD_PROTOBUF=OFF
+ -DDAWN_BUILD_SAMPLES=OFF
+ -DDAWN_BUILD_TESTS=OFF
+ -DTINT_BUILD_TESTS=OFF
+ -DTINT_ENABLE_INSTALL=OFF
+ -DTINT_BUILD_CMD_TOOLS=OFF
+ -DDAWN_ENABLE_NULL=${DAWN_ENABLE_NULL}
+ -DDAWN_ENABLE_D3D11=${DAWN_ENABLE_D3D11}
+ -DDAWN_ENABLE_D3D12=${DAWN_ENABLE_D3D12}
+ -DDAWN_ENABLE_DESKTOP_GL=${DAWN_ENABLE_DESKTOP_GL}
+ -DDAWN_ENABLE_OPENGLES=${DAWN_ENABLE_OPENGLES}
+ -DDAWN_ENABLE_METAL=${DAWN_ENABLE_METAL}
+ -DDAWN_ENABLE_VULKAN=${DAWN_ENABLE_VULKAN}
+ -DDAWN_USE_WAYLAND=${DAWN_USE_WAYLAND}
+ -DDAWN_USE_X11=${DAWN_USE_X11}
+)
+
+vcpkg_cmake_install()
+vcpkg_cmake_config_fixup(CONFIG_PATH lib/cmake/Dawn)
+
+list(APPEND DAWN_ABSL_REQUIRES
+ absl_flat_hash_set
+ absl_flat_hash_map
+ absl_inlined_vector
+ absl_no_destructor
+ absl_overload
+ absl_str_format_internal
+ absl_strings
+ absl_span
+ absl_string_view
+)
+list(JOIN DAWN_ABSL_REQUIRES ", " DAWN_ABSL_REQUIRES)
+
+set(DAWN_PKGCONFIG_CFLAGS "")
+set(DAWN_PKGCONFIG_REQUIRES "${DAWN_ABSL_REQUIRES}")
+set(DAWN_PKGCONFIG_LIBS "-lwebgpu_dawn")
+
+if (VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW AND NOT VCPKG_TARGET_IS_UWP)
+ set(DAWN_PKGCONFIG_LIBS "${DAWN_PKGCONFIG_LIBS} -lonecore -luser32 -ldelayimp")
+endif()
+if (DAWN_ENABLE_D3D11 OR DAWN_ENABLE_D3D12)
+ set(DAWN_PKGCONFIG_LIBS "${DAWN_PKGCONFIG_LIBS} -ldxguid")
+endif()
+if (DAWN_ENABLE_METAL)
+ set(DAWN_PKGCONFIG_LIBS "${DAWN_PKGCONFIG_LIBS} -framework IOSurface -framework Metal -framework QuartzCore")
+ if (VCPKG_TARGET_IS_OSX)
+ set(DAWN_PKGCONFIG_LIBS "${DAWN_PKGCONFIG_LIBS} -framework Cocoa -framework IOKit")
+ endif()
+endif()
+
+if (EXISTS "${CURRENT_PACKAGES_DIR}/debug/lib")
+ configure_file("${CMAKE_CURRENT_LIST_DIR}/unofficial_webgpu_dawn.pc.in" "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/unofficial_webgpu_dawn.pc" @ONLY)
+endif()
+if (EXISTS "${CURRENT_PACKAGES_DIR}/lib")
+ configure_file("${CMAKE_CURRENT_LIST_DIR}/unofficial_webgpu_dawn.pc.in" "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/unofficial_webgpu_dawn.pc" @ONLY)
+endif()
+vcpkg_fixup_pkgconfig()
+
+# Restore the original library linkage
+set(VCPKG_LIBRARY_LINKAGE ${VCPKG_LIBRARY_LINKAGE_BACKUP})
+
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")
+
+vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE")
+file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
diff --git a/vcpkg/ports/dawn/unofficial_webgpu_dawn.pc.in b/vcpkg/ports/dawn/unofficial_webgpu_dawn.pc.in
new file mode 100644
index 0000000..d344c7c
--- /dev/null
+++ b/vcpkg/ports/dawn/unofficial_webgpu_dawn.pc.in
@@ -0,0 +1,13 @@
+prefix=${pcfiledir}/../..
+exec_prefix=${prefix}
+libdir=${prefix}/lib
+includedir=${prefix}/include
+
+Name: unofficial_webgpu_dawn
+Description: Dawn WebGPU library
+Version: @VERSION@
+URL: https://dawn.googlesource.com/dawn
+
+Libs: -L${libdir} @DAWN_PKGCONFIG_LIBS@
+Requires.private: @DAWN_PKGCONFIG_REQUIRES@
+Cflags: -I${includedir} @DAWN_PKGCONFIG_CFLAGS@
diff --git a/vcpkg/ports/dawn/usage b/vcpkg/ports/dawn/usage
new file mode 100644
index 0000000..e2c9a1d
--- /dev/null
+++ b/vcpkg/ports/dawn/usage
@@ -0,0 +1,8 @@
+dawn provides CMake targets:
+
+ find_package(Dawn CONFIG REQUIRED)
+ target_link_libraries(main PRIVATE dawn::webgpu_dawn)
+
+dawn provides pkg-config modules:
+
+ unofficial_webgpu_dawn
diff --git a/vcpkg/ports/dawn/vcpkg.json b/vcpkg/ports/dawn/vcpkg.json
new file mode 100644
index 0000000..466061a
--- /dev/null
+++ b/vcpkg/ports/dawn/vcpkg.json
@@ -0,0 +1,102 @@
+{
+ "name": "dawn",
+ "version": "20250922.223923",
+ "port-version": 1,
+ "description": "Dawn is an open-source and cross-platform implementation of the WebGPU standard.",
+ "homepage": "https://dawn.googlesource.com/dawn",
+ "license": "BSD-3-Clause",
+ "dependencies": [
+ {
+ "name": "abseil",
+ "platform": "!emscripten"
+ },
+ {
+ "name": "vcpkg-cmake",
+ "host": true
+ },
+ {
+ "name": "vcpkg-cmake-config",
+ "host": true
+ },
+ {
+ "name": "vcpkg-get-python-packages",
+ "host": true
+ }
+ ],
+ "default-features": [
+ {
+ "name": "d3d11",
+ "platform": "windows"
+ },
+ {
+ "name": "d3d12",
+ "platform": "windows"
+ },
+ {
+ "name": "gl",
+ "platform": "linux | freebsd | openbsd"
+ },
+ {
+ "name": "gles",
+ "platform": "android | linux | freebsd | openbsd"
+ },
+ {
+ "name": "metal",
+ "platform": "osx | ios"
+ },
+ {
+ "name": "vulkan",
+ "platform": "(windows & !uwp) | android | linux | freebsd | openbsd"
+ },
+ {
+ "name": "x11",
+ "platform": "linux | freebsd | openbsd"
+ }
+ ],
+ "features": {
+ "d3d11": {
+ "description": "Direct3D 11 backend support",
+ "supports": "windows"
+ },
+ "d3d12": {
+ "description": "Direct3D 12 backend support",
+ "supports": "windows"
+ },
+ "gl": {
+ "description": "Desktop OpenGL backend support",
+ "supports": "linux | freebsd | openbsd",
+ "dependencies": [
+ "egl-registry",
+ "opengl-registry"
+ ]
+ },
+ "gles": {
+ "description": "OpenGL ES backend support",
+ "supports": "android | linux | freebsd | openbsd",
+ "dependencies": [
+ "egl-registry",
+ "opengl-registry"
+ ]
+ },
+ "metal": {
+ "description": "Metal backend support",
+ "supports": "osx | ios"
+ },
+ "vulkan": {
+ "description": "Vulkan backend support",
+ "supports": "(windows & !uwp) | android | linux | freebsd | openbsd",
+ "dependencies": [
+ "vulkan-headers",
+ "vulkan-utility-libraries"
+ ]
+ },
+ "wayland": {
+ "description": "Wayland support",
+ "supports": "linux | freebsd | openbsd"
+ },
+ "x11": {
+ "description": "X11 support",
+ "supports": "linux | freebsd | openbsd"
+ }
+ }
+}