dawn-cmake/src/dawn/native/CMakeLists.txt

575 lines
18 KiB
CMake
Raw Normal View History

# Copyright 2020 The Dawn Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
DawnJSONGenerator(
TARGET "native_utils"
PRINT_NAME "Dawn native utilities"
RESULT_VARIABLE "DAWN_NATIVE_UTILS_GEN_SOURCES"
)
add_library(dawn_native ${DAWN_PLACEHOLDER_FILE})
common_compile_options(dawn_native)
target_compile_definitions(dawn_native PRIVATE "DAWN_NATIVE_IMPLEMENTATION")
if(BUILD_SHARED_LIBS)
target_compile_definitions(dawn_native PRIVATE "DAWN_NATIVE_SHARED_LIBRARY")
endif()
target_sources(dawn_native PRIVATE
"${DAWN_INCLUDE_DIR}/dawn/native/DawnNative.h"
"${DAWN_INCLUDE_DIR}/dawn/native/dawn_native_export.h"
${DAWN_NATIVE_UTILS_GEN_SOURCES}
"Adapter.cpp"
"Adapter.h"
"AsyncTask.cpp"
"AsyncTask.h"
"AttachmentState.cpp"
"AttachmentState.h"
"BackendConnection.cpp"
"BackendConnection.h"
"BindGroup.cpp"
"BindGroup.h"
"BindGroupLayout.cpp"
"BindGroupLayout.h"
"BindGroupTracker.h"
"BindingInfo.cpp"
"BindingInfo.h"
"BlobCache.cpp"
"BlobCache.h"
"BuddyAllocator.cpp"
"BuddyAllocator.h"
"BuddyMemoryAllocator.cpp"
"BuddyMemoryAllocator.h"
"Buffer.cpp"
"Buffer.h"
"CachedObject.cpp"
"CachedObject.h"
"CacheKey.cpp"
"CacheKey.h"
"CallbackTaskManager.cpp"
"CallbackTaskManager.h"
"CommandAllocator.cpp"
"CommandAllocator.h"
"CommandBuffer.cpp"
"CommandBuffer.h"
"CommandBufferStateTracker.cpp"
"CommandBufferStateTracker.h"
"CommandEncoder.cpp"
"CommandEncoder.h"
"CommandValidation.cpp"
"CommandValidation.h"
"Commands.cpp"
"Commands.h"
"CompilationMessages.cpp"
"CompilationMessages.h"
"ComputePassEncoder.cpp"
"ComputePassEncoder.h"
"ComputePipeline.cpp"
"ComputePipeline.h"
"CopyTextureForBrowserHelper.cpp"
"CopyTextureForBrowserHelper.h"
"CreatePipelineAsyncTask.cpp"
"CreatePipelineAsyncTask.h"
"Device.cpp"
"Device.h"
"DynamicUploader.cpp"
"DynamicUploader.h"
"EncodingContext.cpp"
"EncodingContext.h"
"EnumClassBitmasks.h"
"EnumMaskIterator.h"
"Error.cpp"
"Error.h"
"ErrorData.cpp"
"ErrorData.h"
"ErrorInjector.cpp"
"ErrorInjector.h"
"ErrorScope.cpp"
"ErrorScope.h"
"Features.cpp"
"Features.h"
"ExternalTexture.cpp"
"ExternalTexture.h"
"IndirectDrawMetadata.cpp"
"IndirectDrawMetadata.h"
"IndirectDrawValidationEncoder.cpp"
"IndirectDrawValidationEncoder.h"
"ObjectContentHasher.cpp"
"ObjectContentHasher.h"
"Format.cpp"
"Format.h"
"Forward.h"
"Instance.cpp"
"Instance.h"
"InternalPipelineStore.cpp"
"InternalPipelineStore.h"
"IntegerTypes.h"
"Limits.cpp"
"Limits.h"
"ObjectBase.cpp"
"ObjectBase.h"
"PassResourceUsage.cpp"
"PassResourceUsage.h"
"PassResourceUsageTracker.cpp"
"PassResourceUsageTracker.h"
"PerStage.cpp"
"PerStage.h"
"Pipeline.cpp"
"Pipeline.h"
"PipelineCache.cpp"
"PipelineCache.h"
"PipelineLayout.cpp"
"PipelineLayout.h"
"PooledResourceMemoryAllocator.cpp"
"PooledResourceMemoryAllocator.h"
"ProgrammableEncoder.cpp"
"ProgrammableEncoder.h"
"QueryHelper.cpp"
"QueryHelper.h"
"QuerySet.cpp"
"QuerySet.h"
"Queue.cpp"
"Queue.h"
"RefCountedWithExternalCount.cpp"
"RefCountedWithExternalCount.h"
"RenderBundle.cpp"
"RenderBundle.h"
"RenderBundleEncoder.cpp"
"RenderBundleEncoder.h"
"RenderEncoderBase.cpp"
"RenderEncoderBase.h"
"RenderPassEncoder.cpp"
"RenderPassEncoder.h"
"RenderPipeline.cpp"
"RenderPipeline.h"
"ResourceHeap.h"
"ResourceHeapAllocator.h"
"ResourceMemoryAllocation.cpp"
"ResourceMemoryAllocation.h"
"RingBufferAllocator.cpp"
"RingBufferAllocator.h"
"Sampler.cpp"
"Sampler.h"
"ScratchBuffer.cpp"
"ScratchBuffer.h"
"ShaderModule.cpp"
"ShaderModule.h"
"StagingBuffer.cpp"
"StagingBuffer.h"
"Subresource.cpp"
"Subresource.h"
"SubresourceStorage.h"
"Surface.cpp"
"Surface.h"
"SwapChain.cpp"
"SwapChain.h"
"Texture.cpp"
"Texture.h"
"TintUtils.cpp"
"TintUtils.h"
"ToBackend.h"
"Toggles.cpp"
"Toggles.h"
"VertexFormat.cpp"
"VertexFormat.h"
"dawn_platform.h"
"webgpu_absl_format.cpp"
"webgpu_absl_format.h"
"utils/WGPUHelpers.cpp"
"utils/WGPUHelpers.h"
)
target_link_libraries(dawn_native
PUBLIC dawncpp_headers
PRIVATE dawn_common
dawn_platform
dawn_internal_config
libtint
SPIRV-Tools-opt
absl_strings
absl_str_format_internal
)
target_include_directories(dawn_native PRIVATE ${DAWN_ABSEIL_DIR})
if (DAWN_USE_X11)
find_package(X11 REQUIRED)
target_link_libraries(dawn_native PRIVATE ${X11_LIBRARIES})
target_include_directories(dawn_native PRIVATE ${X11_INCLUDE_DIR})
target_sources(dawn_native PRIVATE
"XlibXcbFunctions.cpp"
"XlibXcbFunctions.h"
)
endif()
# Only win32 app needs to link with user32.lib
# In UWP, all availiable APIs are defined in WindowsApp.lib
# and is automatically linked when WINDOWS_STORE set
if (WIN32 AND NOT WINDOWS_STORE)
target_link_libraries(dawn_native PRIVATE user32.lib)
endif()
# DXGIGetDebugInterface1 is defined in dxgi.lib
# But this API is tagged as a development-only capability
# which implies that linking to this function will cause
# the application to fail Windows store certification
# So we only link to it in debug build when compiling for UWP.
# In win32 we load dxgi.dll using LoadLibrary
# so no need for static linking.
if (WINDOWS_STORE)
target_link_libraries(dawn_native PRIVATE debug dxgi.lib)
endif()
if (DAWN_ENABLE_D3D12)
target_sources(dawn_native PRIVATE
"${DAWN_INCLUDE_DIR}/dawn/native/D3D12Backend.h"
"d3d12/AdapterD3D12.cpp"
"d3d12/AdapterD3D12.h"
"d3d12/BackendD3D12.cpp"
"d3d12/BackendD3D12.h"
"d3d12/BindGroupD3D12.cpp"
"d3d12/BindGroupD3D12.h"
"d3d12/BindGroupLayoutD3D12.cpp"
"d3d12/BindGroupLayoutD3D12.h"
"d3d12/BufferD3D12.cpp"
"d3d12/BufferD3D12.h"
"d3d12/CPUDescriptorHeapAllocationD3D12.cpp"
"d3d12/CPUDescriptorHeapAllocationD3D12.h"
"d3d12/CommandAllocatorManager.cpp"
"d3d12/CommandAllocatorManager.h"
"d3d12/CacheKeyD3D12.cpp"
"d3d12/CommandBufferD3D12.cpp"
"d3d12/CommandBufferD3D12.h"
"d3d12/CommandRecordingContext.cpp"
"d3d12/CommandRecordingContext.h"
"d3d12/ComputePipelineD3D12.cpp"
"d3d12/ComputePipelineD3D12.h"
"d3d12/D3D11on12Util.cpp"
"d3d12/D3D11on12Util.h"
"d3d12/D3D12Error.cpp"
"d3d12/D3D12Error.h"
"d3d12/D3D12Info.cpp"
"d3d12/D3D12Info.h"
"d3d12/DeviceD3D12.cpp"
"d3d12/DeviceD3D12.h"
"d3d12/Forward.h"
"d3d12/GPUDescriptorHeapAllocationD3D12.cpp"
"d3d12/GPUDescriptorHeapAllocationD3D12.h"
"d3d12/HeapAllocatorD3D12.cpp"
"d3d12/HeapAllocatorD3D12.h"
"d3d12/HeapD3D12.cpp"
"d3d12/HeapD3D12.h"
"d3d12/IntegerTypes.h"
"d3d12/NativeSwapChainImplD3D12.cpp"
"d3d12/NativeSwapChainImplD3D12.h"
"d3d12/PageableD3D12.cpp"
"d3d12/PageableD3D12.h"
"d3d12/PipelineCacheD3D12.cpp"
"d3d12/PipelineLayoutD3D12.cpp"
"d3d12/PipelineLayoutD3D12.h"
"d3d12/PlatformFunctions.cpp"
"d3d12/PlatformFunctions.h"
"d3d12/QuerySetD3D12.cpp"
"d3d12/QuerySetD3D12.h"
"d3d12/QueueD3D12.cpp"
"d3d12/QueueD3D12.h"
"d3d12/RenderPassBuilderD3D12.cpp"
"d3d12/RenderPassBuilderD3D12.h"
"d3d12/RenderPipelineD3D12.cpp"
"d3d12/RenderPipelineD3D12.h"
"d3d12/ResidencyManagerD3D12.cpp"
"d3d12/ResidencyManagerD3D12.h"
"d3d12/ResourceAllocatorManagerD3D12.cpp"
"d3d12/ResourceAllocatorManagerD3D12.h"
"d3d12/ResourceHeapAllocationD3D12.cpp"
"d3d12/ResourceHeapAllocationD3D12.h"
"d3d12/SamplerD3D12.cpp"
"d3d12/SamplerD3D12.h"
"d3d12/SamplerHeapCacheD3D12.cpp"
"d3d12/SamplerHeapCacheD3D12.h"
"d3d12/ShaderModuleD3D12.cpp"
"d3d12/ShaderModuleD3D12.h"
"d3d12/ShaderVisibleDescriptorAllocatorD3D12.cpp"
"d3d12/ShaderVisibleDescriptorAllocatorD3D12.h"
"d3d12/StagingBufferD3D12.cpp"
"d3d12/StagingBufferD3D12.h"
"d3d12/StagingDescriptorAllocatorD3D12.cpp"
"d3d12/StagingDescriptorAllocatorD3D12.h"
"d3d12/SwapChainD3D12.cpp"
"d3d12/SwapChainD3D12.h"
"d3d12/TextureCopySplitter.cpp"
"d3d12/TextureCopySplitter.h"
"d3d12/TextureD3D12.cpp"
"d3d12/TextureD3D12.h"
"d3d12/UtilsD3D12.cpp"
"d3d12/UtilsD3D12.h"
"d3d12/d3d12_platform.h"
)
target_link_libraries(dawn_native PRIVATE dxguid.lib)
endif()
if (DAWN_ENABLE_METAL)
target_sources(dawn_native PRIVATE
"${DAWN_INCLUDE_DIR}/dawn/native/MetalBackend.h"
"Surface_metal.mm"
"metal/BackendMTL.h"
"metal/BackendMTL.mm"
"metal/BindGroupLayoutMTL.h"
"metal/BindGroupLayoutMTL.mm"
"metal/BindGroupMTL.h"
"metal/BindGroupMTL.mm"
"metal/BufferMTL.h"
"metal/BufferMTL.mm"
"metal/CommandBufferMTL.h"
"metal/CommandBufferMTL.mm"
"metal/CommandRecordingContext.h"
"metal/CommandRecordingContext.mm"
"metal/ComputePipelineMTL.h"
"metal/ComputePipelineMTL.mm"
"metal/DeviceMTL.h"
"metal/DeviceMTL.mm"
"metal/Forward.h"
"metal/PipelineLayoutMTL.h"
"metal/PipelineLayoutMTL.mm"
"metal/QueueMTL.h"
"metal/QueueMTL.mm"
"metal/QuerySetMTL.h"
"metal/QuerySetMTL.mm"
"metal/RenderPipelineMTL.h"
"metal/RenderPipelineMTL.mm"
"metal/SamplerMTL.h"
"metal/SamplerMTL.mm"
"metal/ShaderModuleMTL.h"
"metal/ShaderModuleMTL.mm"
"metal/StagingBufferMTL.h"
"metal/StagingBufferMTL.mm"
"metal/SwapChainMTL.h"
"metal/SwapChainMTL.mm"
"metal/TextureMTL.h"
"metal/TextureMTL.mm"
"metal/UtilsMetal.h"
"metal/UtilsMetal.mm"
)
target_link_libraries(dawn_native PRIVATE
"-framework Cocoa"
"-framework IOKit"
"-framework IOSurface"
"-framework QuartzCore"
"-framework Metal"
)
endif()
if (DAWN_ENABLE_NULL)
target_sources(dawn_native PRIVATE
"${DAWN_INCLUDE_DIR}/dawn/native/NullBackend.h"
"null/DeviceNull.cpp"
"null/DeviceNull.h"
)
endif()
if (DAWN_ENABLE_OPENGL OR DAWN_ENABLE_VULKAN)
target_sources(dawn_native PRIVATE
"SpirvValidation.cpp"
"SpirvValidation.h"
)
endif()
if (DAWN_ENABLE_OPENGL)
DawnGenerator(
SCRIPT "${Dawn_SOURCE_DIR}/generator/opengl_loader_generator.py"
PRINT_NAME "OpenGL function loader"
ARGS "--gl-xml"
"${Dawn_SOURCE_DIR}/third_party/khronos/gl.xml"
"--supported-extensions"
"${Dawn_SOURCE_DIR}/src/dawn/native/opengl/supported_extensions.json"
RESULT_VARIABLE "DAWN_NATIVE_OPENGL_AUTOGEN_SOURCES"
)
target_sources(dawn_native PRIVATE
"${DAWN_INCLUDE_DIR}/dawn/native/OpenGLBackend.h"
${DAWN_NATIVE_OPENGL_AUTOGEN_SOURCES}
"opengl/BackendGL.cpp"
"opengl/BackendGL.h"
"opengl/BindGroupGL.cpp"
"opengl/BindGroupGL.h"
"opengl/BindGroupLayoutGL.cpp"
"opengl/BindGroupLayoutGL.h"
"opengl/BufferGL.cpp"
"opengl/BufferGL.h"
"opengl/CommandBufferGL.cpp"
"opengl/CommandBufferGL.h"
"opengl/ComputePipelineGL.cpp"
"opengl/ComputePipelineGL.h"
"opengl/DeviceGL.cpp"
"opengl/DeviceGL.h"
"opengl/Forward.h"
"opengl/GLFormat.cpp"
"opengl/GLFormat.h"
"opengl/NativeSwapChainImplGL.cpp"
"opengl/NativeSwapChainImplGL.h"
"opengl/OpenGLFunctions.cpp"
"opengl/OpenGLFunctions.h"
"opengl/OpenGLVersion.cpp"
"opengl/OpenGLVersion.h"
"opengl/PersistentPipelineStateGL.cpp"
"opengl/PersistentPipelineStateGL.h"
"opengl/PipelineGL.cpp"
"opengl/PipelineGL.h"
"opengl/PipelineLayoutGL.cpp"
"opengl/PipelineLayoutGL.h"
"opengl/QuerySetGL.cpp"
"opengl/QuerySetGL.h"
"opengl/QueueGL.cpp"
"opengl/QueueGL.h"
"opengl/RenderPipelineGL.cpp"
"opengl/RenderPipelineGL.h"
"opengl/SamplerGL.cpp"
"opengl/SamplerGL.h"
"opengl/ShaderModuleGL.cpp"
"opengl/ShaderModuleGL.h"
"opengl/SwapChainGL.cpp"
"opengl/SwapChainGL.h"
"opengl/TextureGL.cpp"
"opengl/TextureGL.h"
"opengl/UtilsGL.cpp"
"opengl/UtilsGL.h"
"opengl/opengl_platform.h"
)
target_link_libraries(dawn_native PRIVATE dawn_khronos_platform)
endif()
if (DAWN_ENABLE_SWIFTSHADER)
target_compile_definitions(dawn_native PRIVATE "DAWN_ENABLE_SWIFTSHADER")
endif()
if (DAWN_ENABLE_VULKAN)
target_sources(dawn_native PRIVATE
"${DAWN_INCLUDE_DIR}/dawn/native/VulkanBackend.h"
"vulkan/AdapterVk.cpp"
"vulkan/AdapterVk.h"
"vulkan/BackendVk.cpp"
"vulkan/BackendVk.h"
"vulkan/BindGroupLayoutVk.cpp"
"vulkan/BindGroupLayoutVk.h"
"vulkan/BindGroupVk.cpp"
"vulkan/BindGroupVk.h"
"vulkan/BufferVk.cpp"
"vulkan/BufferVk.h"
"vulkan/CacheKeyVk.cpp"
"vulkan/CacheKeyVk.h"
"vulkan/CommandBufferVk.cpp"
"vulkan/CommandBufferVk.h"
"vulkan/CommandRecordingContext.h"
"vulkan/ComputePipelineVk.cpp"
"vulkan/ComputePipelineVk.h"
"vulkan/DescriptorSetAllocation.h"
"vulkan/DescriptorSetAllocator.cpp"
"vulkan/DescriptorSetAllocator.h"
"vulkan/DeviceVk.cpp"
"vulkan/DeviceVk.h"
"vulkan/ExternalHandle.h"
"vulkan/FencedDeleter.cpp"
"vulkan/FencedDeleter.h"
"vulkan/Forward.h"
"vulkan/NativeSwapChainImplVk.cpp"
"vulkan/NativeSwapChainImplVk.h"
"vulkan/PipelineCacheVk.cpp"
"vulkan/PipelineCacheVk.h"
"vulkan/PipelineLayoutVk.cpp"
"vulkan/PipelineLayoutVk.h"
"vulkan/QuerySetVk.cpp"
"vulkan/QuerySetVk.h"
"vulkan/QueueVk.cpp"
"vulkan/QueueVk.h"
"vulkan/RenderPassCache.cpp"
"vulkan/RenderPassCache.h"
"vulkan/RenderPipelineVk.cpp"
"vulkan/RenderPipelineVk.h"
"vulkan/ResourceHeapVk.cpp"
"vulkan/ResourceHeapVk.h"
"vulkan/ResourceMemoryAllocatorVk.cpp"
"vulkan/ResourceMemoryAllocatorVk.h"
"vulkan/SamplerVk.cpp"
"vulkan/SamplerVk.h"
"vulkan/ShaderModuleVk.cpp"
"vulkan/ShaderModuleVk.h"
"vulkan/StagingBufferVk.cpp"
"vulkan/StagingBufferVk.h"
"vulkan/SwapChainVk.cpp"
"vulkan/SwapChainVk.h"
"vulkan/TextureVk.cpp"
"vulkan/TextureVk.h"
"vulkan/UtilsVulkan.cpp"
"vulkan/UtilsVulkan.h"
"vulkan/VulkanError.cpp"
"vulkan/VulkanError.h"
"vulkan/VulkanExtensions.cpp"
"vulkan/VulkanExtensions.h"
"vulkan/VulkanFunctions.cpp"
"vulkan/VulkanFunctions.h"
"vulkan/VulkanInfo.cpp"
"vulkan/VulkanInfo.h"
"vulkan/external_memory/MemoryService.h"
"vulkan/external_semaphore/SemaphoreService.h"
)
target_link_libraries(dawn_native PUBLIC Vulkan-Headers)
target_include_directories(dawn_native PRIVATE ${DAWN_VULKAN_TOOLS_DIR})
if (UNIX AND NOT APPLE)
target_sources(dawn_native PRIVATE
"vulkan/external_memory/MemoryServiceOpaqueFD.cpp"
Vulkan: Export VkSemaphores as SYNC_FDs instead of OPAQUE_FDs For Dawn/Chrome interop, Chrome OS differs from Linux as it uses the NativePixmap-based SharedImageBacking which stores image memory as dma-bufs as opposed to opaque FDs. Likewise, for synchronization, Chrome OS wants to use sync obj FDs as opposed to opaque FDs for more flexibility. The motivating difference between sync obj FDs and their opaque counterparts is how they are created. As their name suggests, Opaque FDs are mostly meaningless outside of the Vulkan ecosystem and must be created from a VkDevice. As a result, Linux’s ExternalVkImageBacking needs the Vulkan implementation to create the FD even when accessing the SharedImage as a GL texture [1]. On Chrome OS, however, we don’t guarantee Vulkan outside of Dawn, so we aren’t able to create the opaque FD directly in Chrome. Instead, we are always able to create sync objs (e.g. via a fence [2]) which can be imported as VkSemaphores by simply changing VkImportSemaphoreFdInfoKHR::handleType. Similarly, we can export signal VkSemaphores as sync objs as well by updating VkSemaphoreGetFdInfoKHR::handleType. This CL adds conditional support for using SYNC_FDs on Chrome OS when importing/exporting VkSemaphores and renames SemaphoreServiceOpaqueFD accordingly. With this, we can properly wait on reads/writes on a GL SharedImage representation before accessing the same memory in Dawn [3]. [1] https://source.chromium.org/chromium/chromium/src/+/main:gpu/command_buffer/service/external_vk_image_gl_representation.cc;l=75;drc=f887797b3b527feabd5dfe9b3f2cc7f6deade49f [2] https://source.chromium.org/chromium/chromium/src/+/main:gpu/command_buffer/service/shared_image_backing_gl_image.cc;l=681;drc=f887797b3b527feabd5dfe9b3f2cc7f6deade49f [3] https://chromium-review.googlesource.com/c/chromium/src/+/3042460 BUG=b:172208313 Change-Id: I5357847fea40e41d1b982054e3573d363e17530c Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/59080 Reviewed-by: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Austin Eng <enga@chromium.org> Commit-Queue: Brian Ho <hob@chromium.org>
2021-07-21 10:49:20 -07:00
"vulkan/external_semaphore/SemaphoreServiceFD.cpp"
)
else()
target_sources(dawn_native PRIVATE
"vulkan/external_memory/MemoryServiceNull.cpp"
"vulkan/external_semaphore/SemaphoreServiceNull.cpp"
)
endif()
endif()
# TODO how to do the component build in CMake?
target_sources(dawn_native PRIVATE "DawnNative.cpp")
if (DAWN_ENABLE_D3D12)
target_sources(dawn_native PRIVATE "d3d12/D3D12Backend.cpp")
endif()
if (DAWN_ENABLE_METAL)
target_sources(dawn_native PRIVATE "metal/MetalBackend.mm")
endif()
if (DAWN_ENABLE_NULL)
target_sources(dawn_native PRIVATE "null/NullBackend.cpp")
endif()
if (DAWN_ENABLE_OPENGL)
target_sources(dawn_native PRIVATE "opengl/OpenGLBackend.cpp")
endif()
if (DAWN_ENABLE_VULKAN)
target_sources(dawn_native PRIVATE "vulkan/VulkanBackend.cpp")
endif()
DawnJSONGenerator(
TARGET "webgpu_dawn_native_proc"
PRINT_NAME "Dawn native WebGPU procs"
RESULT_VARIABLE "WEBGPU_DAWN_NATIVE_PROC_GEN"
)
add_library(webgpu_dawn ${DAWN_PLACEHOLDER_FILE})
common_compile_options(webgpu_dawn)
target_link_libraries(webgpu_dawn PRIVATE dawn_native)
target_compile_definitions(webgpu_dawn PRIVATE "WGPU_IMPLEMENTATION")
if(BUILD_SHARED_LIBS)
target_compile_definitions(webgpu_dawn PRIVATE "WGPU_SHARED_LIBRARY")
endif()
target_sources(webgpu_dawn PRIVATE ${WEBGPU_DAWN_NATIVE_PROC_GEN})