diff options
| author | Ethan Morgan <ethan@gweithio.com> | 2026-02-14 16:44:06 +0000 |
|---|---|---|
| committer | Ethan Morgan <ethan@gweithio.com> | 2026-02-14 16:44:06 +0000 |
| commit | 54409423f767d8b1cf30cb7d0efca6b4ca138823 (patch) | |
| tree | d915ac7828703ce4b963efdd9728a1777ba18c1e /vcpkg/ports/dawn | |
Diffstat (limited to 'vcpkg/ports/dawn')
| -rw-r--r-- | vcpkg/ports/dawn/000-fix-emdawnwebgpu.patch | 19 | ||||
| -rw-r--r-- | vcpkg/ports/dawn/001-fix-windows-build.patch | 23 | ||||
| -rw-r--r-- | vcpkg/ports/dawn/002-fix-uwp.patch | 19 | ||||
| -rw-r--r-- | vcpkg/ports/dawn/003-fix-d3d11.patch | 26 | ||||
| -rw-r--r-- | vcpkg/ports/dawn/004-deps.patch | 127 | ||||
| -rw-r--r-- | vcpkg/ports/dawn/005-bsd-support.patch | 42 | ||||
| -rw-r--r-- | vcpkg/ports/dawn/006-fix-x11-include-dirs.patch | 23 | ||||
| -rw-r--r-- | vcpkg/ports/dawn/DawnConfig.cmake | 7 | ||||
| -rw-r--r-- | vcpkg/ports/dawn/portfile.cmake | 213 | ||||
| -rw-r--r-- | vcpkg/ports/dawn/unofficial_webgpu_dawn.pc.in | 13 | ||||
| -rw-r--r-- | vcpkg/ports/dawn/usage | 8 | ||||
| -rw-r--r-- | vcpkg/ports/dawn/vcpkg.json | 102 |
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" + } + } +} |