# 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. import("../../../scripts/dawn_overrides_with_defaults.gni") import("//build_overrides/build.gni") import("${dawn_root}/generator/dawn_generator.gni") import("${dawn_root}/scripts/dawn_component.gni") import("${dawn_root}/scripts/dawn_features.gni") # The VVLs are an optional dependency, only use it if the path has been set. enable_vulkan_validation_layers = dawn_enable_vulkan_validation_layers && dawn_vulkan_validation_layers_dir != "" if (enable_vulkan_validation_layers) { import("//build_overrides/vulkan_validation_layers.gni") } # ANGLE is an optional dependency; only use it if the path has been set. use_angle = dawn_use_angle && defined(dawn_angle_dir) # Swiftshader is an optional dependency, only use it if the path has been set. use_swiftshader = dawn_use_swiftshader && dawn_swiftshader_dir != "" if (use_swiftshader) { assert(dawn_enable_vulkan, "dawn_use_swiftshader requires dawn_enable_vulkan=true") import("${dawn_swiftshader_dir}/src/Vulkan/vulkan.gni") } # The Vulkan loader is an optional dependency, only use it if the path has been # set. if (dawn_enable_vulkan) { enable_vulkan_loader = dawn_enable_vulkan_loader && dawn_vulkan_loader_dir != "" } group("abseil") { # When build_with_chromium=true we need to include "//third_party/abseil-cpp:absl" while # it's beneficial to be more specific with standalone Dawn, especially when it comes to # including it as a dependency in other projects (such as Skia). if (build_with_chromium) { public_deps = [ "$dawn_abseil_dir:absl" ] } else { public_deps = [ "${dawn_root}/third_party/gn/abseil-cpp:str_format", "${dawn_root}/third_party/gn/abseil-cpp:strings", ] } } config("internal") { configs = [ "${dawn_root}/src/dawn/common:internal_config" ] } config("weak_framework") { if (is_mac && dawn_enable_metal) { weak_frameworks = [ "Metal.framework" ] } } # Config that adds the @executable_path rpath if needed so that Swiftshader or the Vulkan loader are found. config("vulkan_rpath") { if (is_mac && dawn_enable_vulkan && (use_swiftshader || enable_vulkan_loader)) { ldflags = [ "-rpath", "@executable_path/", ] } } # Config that adds include directory for vulkan-tools. config("vulkan_tools_include") { include_dirs = [ "${dawn_vulkan_tools_dir}" ] } dawn_json_generator("utils_gen") { target = "native_utils" outputs = [ "src/dawn/native/ChainUtils_autogen.h", "src/dawn/native/ChainUtils_autogen.cpp", "src/dawn/native/ProcTable.cpp", "src/dawn/native/dawn_platform_autogen.h", "src/dawn/native/wgpu_structs_autogen.h", "src/dawn/native/wgpu_structs_autogen.cpp", "src/dawn/native/ValidationUtils_autogen.h", "src/dawn/native/ValidationUtils_autogen.cpp", "src/dawn/native/webgpu_absl_format_autogen.h", "src/dawn/native/webgpu_absl_format_autogen.cpp", "src/dawn/native/ObjectType_autogen.h", "src/dawn/native/ObjectType_autogen.cpp", "src/dawn/native/CacheKey_autogen.cpp", ] } if (dawn_enable_opengl) { dawn_generator("opengl_loader_gen") { script = "${dawn_root}/generator/opengl_loader_generator.py" args = [ "--gl-xml", rebase_path("${dawn_root}/third_party/khronos/gl.xml", root_build_dir), "--supported-extensions", rebase_path("opengl/supported_extensions.json", root_build_dir), ] outputs = [ "src/dawn/native/opengl/OpenGLFunctionsBase_autogen.cpp", "src/dawn/native/opengl/OpenGLFunctionsBase_autogen.h", "src/dawn/native/opengl/opengl_platform_autogen.h", ] } } # Public dawn native headers so they can be publicly visible for # dependencies of dawn native source_set("headers") { public_deps = [ "${dawn_root}/include/dawn:cpp_headers" ] all_dependent_configs = [ "${dawn_root}/include/dawn:public" ] sources = [ "${dawn_root}/include/dawn/native/DawnNative.h", "${dawn_root}/include/dawn/native/dawn_native_export.h", # Include all backend's public headers so that dependencies can include # them even when the backends are disabled. "${dawn_root}/include/dawn/native/D3D12Backend.h", "${dawn_root}/include/dawn/native/MetalBackend.h", "${dawn_root}/include/dawn/native/NullBackend.h", "${dawn_root}/include/dawn/native/OpenGLBackend.h", "${dawn_root}/include/dawn/native/VulkanBackend.h", ] } # The meat of the compilation for dawn native so that we can cheaply have # shared_library / static_library versions of it. It compiles all the files # except those that define exported symbols. source_set("sources") { deps = [ ":headers", ":utils_gen", "${dawn_root}/src/dawn/common", "${dawn_root}/src/tint:libtint", "${dawn_spirv_tools_dir}:spvtools_opt", "${dawn_spirv_tools_dir}:spvtools_val", ] defines = [] libs = [] data_deps = [] configs += [ ":internal" ] # Enable -Wglobal-constructors here only, instead of in internal_config, # because gtest and some other targets don't build with it. if (is_clang) { cflags = [ "-Wglobal-constructors" ] } # Dependencies that are needed to compile dawn native entry points in # FooBackend.cpp need to be public deps so they are propagated to the # dawn native target public_deps = [ ":abseil", "${dawn_root}/src/dawn/platform", ] sources = get_target_outputs(":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", "CacheKey.cpp", "CacheKey.h", "CachedObject.cpp", "CachedObject.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", "ExternalTexture.cpp", "ExternalTexture.h", "Features.cpp", "Features.h", "Format.cpp", "Format.h", "Forward.h", "IndirectDrawMetadata.cpp", "IndirectDrawMetadata.h", "IndirectDrawValidationEncoder.cpp", "IndirectDrawValidationEncoder.h", "Instance.cpp", "Instance.h", "IntegerTypes.h", "InternalPipelineStore.cpp", "InternalPipelineStore.h", "Limits.cpp", "Limits.h", "ObjectBase.cpp", "ObjectBase.h", "ObjectContentHasher.cpp", "ObjectContentHasher.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", "utils/WGPUHelpers.cpp", "utils/WGPUHelpers.h", "webgpu_absl_format.cpp", "webgpu_absl_format.h", ] if (dawn_use_x11) { libs += [ "X11" ] sources += [ "XlibXcbFunctions.cpp", "XlibXcbFunctions.h", ] } # Only win32 app needs to link with user32.lib # In UWP, all availiable APIs are defined in WindowsApp.lib if (is_win && !dawn_is_winuwp) { libs += [ "user32.lib" ] } if (dawn_is_winuwp && is_debug) { # 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. libs += [ "dxgi.lib" ] } # TODO(dawn:766): # Should link dxcompiler.lib and WinPixEventRuntime_UAP.lib in UWP # Somehow use dxcompiler.lib makes CoreApp unable to activate # WinPIX should be added as third party tools and linked statically if (dawn_enable_d3d12) { libs += [ "dxguid.lib" ] sources += [ "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/CacheKeyD3D12.cpp", "d3d12/CommandAllocatorManager.cpp", "d3d12/CommandAllocatorManager.h", "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", ] } if (dawn_enable_metal) { frameworks = [ "Cocoa.framework", "IOKit.framework", "IOSurface.framework", "QuartzCore.framework", ] sources += [ "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/QuerySetMTL.h", "metal/QuerySetMTL.mm", "metal/QueueMTL.h", "metal/QueueMTL.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", ] } if (dawn_enable_null) { sources += [ "null/DeviceNull.cpp", "null/DeviceNull.h", ] } if (dawn_enable_opengl || dawn_enable_vulkan) { sources += [ "SpirvValidation.cpp", "SpirvValidation.h", ] } if (dawn_enable_opengl) { public_deps += [ ":opengl_loader_gen", "${dawn_root}/third_party/khronos:khronos_platform", ] sources += get_target_outputs(":opengl_loader_gen") 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", ] } if (dawn_enable_vulkan) { configs += [ ":vulkan_tools_include" ] deps += [ "${dawn_vulkan_tools_dir}:vulkan_tools_headers" ] public_deps += [ "${dawn_vulkan_headers_dir}:vulkan_headers" ] sources += [ "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", ] if (is_chromeos) { sources += [ "vulkan/external_memory/MemoryServiceDmaBuf.cpp", "vulkan/external_semaphore/SemaphoreServiceFD.cpp", ] defines += [ "DAWN_USE_SYNC_FDS" ] } else if (is_linux) { sources += [ "vulkan/external_memory/MemoryServiceOpaqueFD.cpp", "vulkan/external_semaphore/SemaphoreServiceFD.cpp", ] } else if (is_fuchsia) { sources += [ "vulkan/external_memory/MemoryServiceZirconHandle.cpp", "vulkan/external_semaphore/SemaphoreServiceZirconHandle.cpp", ] } else { sources += [ "vulkan/external_memory/MemoryServiceNull.cpp", "vulkan/external_semaphore/SemaphoreServiceNull.cpp", ] } if (build_with_chromium && is_fuchsia) { # Necessary to ensure that the Vulkan libraries will be in the # final Fuchsia package. data_deps = [ "//third_party/fuchsia-sdk:vulkan_base", "//third_party/fuchsia-sdk:vulkan_validation", # NOTE: The line below is a work around for http://crbug.com/1001081 "//third_party/fuchsia-sdk/sdk:trace_engine", ] } if (dawn_is_winuwp) { defines += [ "DAWN_IS_WINUWP" ] } if (enable_vulkan_validation_layers) { defines += [ "DAWN_ENABLE_VULKAN_VALIDATION_LAYERS", "DAWN_VK_DATA_DIR=\"$vulkan_data_subdir\"", ] } if (enable_vulkan_loader) { data_deps += [ "${dawn_vulkan_loader_dir}:libvulkan" ] } if (use_swiftshader) { data_deps += [ "${dawn_swiftshader_dir}/src/Vulkan:swiftshader_libvulkan" ] defines += [ "DAWN_ENABLE_SWIFTSHADER" ] } } if (use_angle) { data_deps += [ "${dawn_angle_dir}:libEGL", "${dawn_angle_dir}:libGLESv2", ] } } # The static and shared libraries for dawn_native. Most of the files are # already compiled in dawn_native_sources, but we still need to compile # files defining exported symbols. dawn_component("native") { DEFINE_PREFIX = "DAWN_NATIVE" #Make headers publically visible public_deps = [ ":headers" ] deps = [ ":sources", "${dawn_root}/src/dawn/common", ] sources = [ "DawnNative.cpp" ] configs = [ ":internal" ] public_configs = [ ":weak_framework", ":vulkan_rpath", ] if (dawn_enable_d3d12) { sources += [ "d3d12/D3D12Backend.cpp" ] } if (dawn_enable_metal) { sources += [ "metal/MetalBackend.mm" ] } if (dawn_enable_null) { sources += [ "null/NullBackend.cpp" ] } if (dawn_enable_opengl) { sources += [ "opengl/OpenGLBackend.cpp" ] } if (dawn_enable_vulkan) { sources += [ "vulkan/VulkanBackend.cpp" ] if (enable_vulkan_validation_layers) { data_deps = [ "${dawn_vulkan_validation_layers_dir}:vulkan_validation_layers" ] if (!is_android) { data_deps += [ "${dawn_vulkan_validation_layers_dir}:vulkan_gen_json_files" ] } } } } dawn_json_generator("webgpu_dawn_native_proc_gen") { target = "webgpu_dawn_native_proc" outputs = [ "src/dawn/native/webgpu_dawn_native_proc.cpp" ] } dawn_component("webgpu_dawn") { # For a single library - build `webgpu_dawn_shared` with GN args: # dawn_complete_static_libs = true - to package a single lib # # is_debug = false # - setting this to true makes library over 50Mb # # use_custom_libcxx = false # - Otherwise, libc++ symbols may conflict if the # library is used outside of Chromium. # # dawn_use_swiftshader = false # angle_enable_swiftshader = false # - SwiftShader can't be built without use_custom_libcxx. # It should be built separately. DEFINE_PREFIX = "WGPU" sources = get_target_outputs(":webgpu_dawn_native_proc_gen") deps = [ ":static", ":webgpu_dawn_native_proc_gen", ] }