blob: b64a7e866501b90fcc893696ced47f29a8295768 [file] [log] [blame] [edit]
# Copyright 2020 The Dawn & Tint Authors
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
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")
}
# 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 building within Chromium or ANGLE 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 || build_with_angle) {
public_deps = [ "$dawn_abseil_dir:absl" ]
} else {
public_deps = [
"${dawn_root}/third_party/gn/abseil-cpp:bits",
"${dawn_root}/third_party/gn/abseil-cpp:flat_hash_map",
"${dawn_root}/third_party/gn/abseil-cpp:flat_hash_set",
"${dawn_root}/third_party/gn/abseil-cpp:inlined_vector",
"${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",
"${dawn_root}/src/tint:tint_public_config",
]
}
# Config that adds the @executable_path rpath if needed so that Swiftshader or the Vulkan loader are found.
config("vulkan_rpath") {
if (is_apple && dawn_enable_vulkan &&
(use_swiftshader || enable_vulkan_loader)) {
ldflags = [
"-rpath",
"@executable_path/",
]
}
}
# Config that adds delayloads when built as a shared library or component,
# useful as we're linking user32.lib which can't always be loaded in the
# chromium sandbox under win32k lockdown.
config("win_delayload") {
ldflags = [ "/DELAYLOAD:user32.dll" ]
}
# Config that adds include directory for vulkan-utility-libraries.
config("vulkan_utility_libraries_include") {
include_dirs = [ "${dawn_vulkan_utility_libraries_dir}/include" ]
}
dawn_json_generator("utils_gen") {
target = "native_utils"
outputs = [
"src/dawn/native/ChainUtils_autogen.h",
"src/dawn/native/ChainUtils_autogen.cpp",
"src/dawn/native/Features_autogen.h",
"src/dawn/native/Features_autogen.inl",
"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/webgpu_StreamImpl_autogen.cpp",
"src/dawn/native/ObjectType_autogen.h",
"src/dawn/native/ObjectType_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_opengl_registry_dir}/xml/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/D3D11Backend.h",
"${dawn_root}/include/dawn/native/D3D12Backend.h",
"${dawn_root}/include/dawn/native/D3DBackend.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/api",
"${dawn_root}/src/tint/lang/wgsl/features",
]
defines = []
libs = []
data_deps = []
configs += [
":internal",
"${dawn_root}/src/tint:tint_public_config",
]
# 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/partition_alloc:raw_ptr",
"${dawn_root}/src/dawn/platform",
]
sources = get_target_outputs(":utils_gen")
sources += [
"Adapter.cpp",
"Adapter.h",
"ApplyClearColorValueWithDrawHelper.cpp",
"ApplyClearColorValueWithDrawHelper.h",
"AsyncTask.cpp",
"AsyncTask.h",
"AttachmentState.cpp",
"AttachmentState.h",
"BackendConnection.cpp",
"BackendConnection.h",
"BindGroup.cpp",
"BindGroup.h",
"BindGroupLayout.cpp",
"BindGroupLayout.h",
"BindGroupLayoutInternal.cpp",
"BindGroupLayoutInternal.h",
"BindGroupTracker.h",
"BindingInfo.cpp",
"BindingInfo.h",
"BlitBufferToDepthStencil.cpp",
"BlitBufferToDepthStencil.h",
"BlitColorToColorWithDraw.cpp",
"BlitColorToColorWithDraw.h",
"BlitDepthToDepth.cpp",
"BlitDepthToDepth.h",
"BlitTextureToBuffer.cpp",
"BlitTextureToBuffer.h",
"Blob.cpp",
"Blob.h",
"BlobCache.cpp",
"BlobCache.h",
"BuddyAllocator.cpp",
"BuddyAllocator.h",
"BuddyMemoryAllocator.cpp",
"BuddyMemoryAllocator.h",
"Buffer.cpp",
"Buffer.h",
"CacheKey.cpp",
"CacheKey.h",
"CacheRequest.cpp",
"CacheRequest.h",
"CacheResult.h",
"CachedObject.cpp",
"CachedObject.h",
"CallbackTaskManager.cpp",
"CallbackTaskManager.h",
"ChainUtils.h",
"ChainUtilsImpl.inl",
"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",
"CreatePipelineAsyncEvent.cpp",
"CreatePipelineAsyncEvent.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",
"ErrorSink.h",
"EventManager.cpp",
"EventManager.h",
"ExecutionQueue.cpp",
"ExecutionQueue.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",
"PhysicalDevice.cpp",
"PhysicalDevice.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.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",
"Serializable.h",
"ShaderModule.cpp",
"ShaderModule.h",
"SharedBufferMemory.cpp",
"SharedBufferMemory.h",
"SharedFence.cpp",
"SharedFence.h",
"SharedResourceMemory.cpp",
"SharedResourceMemory.h",
"SharedTextureMemory.cpp",
"SharedTextureMemory.h",
"Subresource.cpp",
"Subresource.h",
"SubresourceStorage.h",
"Surface.cpp",
"Surface.h",
"SwapChain.cpp",
"SwapChain.h",
"SystemEvent.cpp",
"SystemEvent.h",
"SystemHandle.cpp",
"SystemHandle.h",
"Texture.cpp",
"Texture.h",
"TintUtils.cpp",
"TintUtils.h",
"ToBackend.h",
"Toggles.cpp",
"Toggles.h",
"UsageValidationMode.h",
"VisitableMembers.h",
"WaitAnySystemEvent.h",
"dawn_platform.h",
"stream/BlobSource.cpp",
"stream/BlobSource.h",
"stream/ByteVectorSink.cpp",
"stream/ByteVectorSink.h",
"stream/Sink.h",
"stream/Source.h",
"stream/Stream.cpp",
"stream/Stream.h",
"utils/WGPUHelpers.cpp",
"utils/WGPUHelpers.h",
"webgpu_absl_format.cpp",
"webgpu_absl_format.h",
]
if (dawn_use_x11) {
sources += [
"X11Functions.cpp",
"X11Functions.h",
]
}
if (is_android) {
sources += [
"AHBFunctions.cpp",
"AHBFunctions.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",
"delayimp.lib",
]
public_configs = [ ":win_delayload" ]
}
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_d3d11 || dawn_enable_d3d12) {
sources += [
"d3d/BackendD3D.cpp",
"d3d/BackendD3D.h",
"d3d/BlobD3D.cpp",
"d3d/BlobD3D.h",
"d3d/D3DCompilationRequest.h",
"d3d/D3DError.cpp",
"d3d/D3DError.h",
"d3d/DeviceD3D.cpp",
"d3d/DeviceD3D.h",
"d3d/Forward.h",
"d3d/KeyedMutex.cpp",
"d3d/KeyedMutex.h",
"d3d/PhysicalDeviceD3D.cpp",
"d3d/PhysicalDeviceD3D.h",
"d3d/PlatformFunctions.cpp",
"d3d/PlatformFunctions.h",
"d3d/QueueD3D.cpp",
"d3d/QueueD3D.h",
"d3d/ShaderUtils.cpp",
"d3d/ShaderUtils.h",
"d3d/SharedFenceD3D.cpp",
"d3d/SharedFenceD3D.h",
"d3d/SharedTextureMemoryD3D.cpp",
"d3d/SharedTextureMemoryD3D.h",
"d3d/SwapChainD3D.cpp",
"d3d/SwapChainD3D.h",
"d3d/TextureD3D.cpp",
"d3d/TextureD3D.h",
"d3d/UtilsD3D.cpp",
"d3d/UtilsD3D.h",
"d3d/d3d_platform.h",
]
}
if (dawn_enable_d3d11) {
libs += [ "dxguid.lib" ]
sources += [
"d3d11/BackendD3D11.cpp",
"d3d11/BackendD3D11.h",
"d3d11/BindGroupD3D11.cpp",
"d3d11/BindGroupD3D11.h",
"d3d11/BindGroupLayoutD3D11.cpp",
"d3d11/BindGroupLayoutD3D11.h",
"d3d11/BindGroupTrackerD3D11.cpp",
"d3d11/BindGroupTrackerD3D11.h",
"d3d11/BufferD3D11.cpp",
"d3d11/BufferD3D11.h",
"d3d11/CommandBufferD3D11.cpp",
"d3d11/CommandBufferD3D11.h",
"d3d11/CommandRecordingContextD3D11.cpp",
"d3d11/CommandRecordingContextD3D11.h",
"d3d11/ComputePipelineD3D11.cpp",
"d3d11/ComputePipelineD3D11.h",
"d3d11/DeviceD3D11.cpp",
"d3d11/DeviceD3D11.h",
"d3d11/DeviceInfoD3D11.cpp",
"d3d11/DeviceInfoD3D11.h",
"d3d11/Forward.h",
"d3d11/PhysicalDeviceD3D11.cpp",
"d3d11/PhysicalDeviceD3D11.h",
"d3d11/PipelineLayoutD3D11.cpp",
"d3d11/PipelineLayoutD3D11.h",
"d3d11/PlatformFunctionsD3D11.cpp",
"d3d11/PlatformFunctionsD3D11.h",
"d3d11/QuerySetD3D11.cpp",
"d3d11/QuerySetD3D11.h",
"d3d11/QueueD3D11.cpp",
"d3d11/QueueD3D11.h",
"d3d11/RenderPipelineD3D11.cpp",
"d3d11/RenderPipelineD3D11.h",
"d3d11/SamplerD3D11.cpp",
"d3d11/SamplerD3D11.h",
"d3d11/ShaderModuleD3D11.cpp",
"d3d11/ShaderModuleD3D11.h",
"d3d11/SharedFenceD3D11.cpp",
"d3d11/SharedFenceD3D11.h",
"d3d11/SharedTextureMemoryD3D11.cpp",
"d3d11/SharedTextureMemoryD3D11.h",
"d3d11/SwapChainD3D11.cpp",
"d3d11/SwapChainD3D11.h",
"d3d11/TextureD3D11.cpp",
"d3d11/TextureD3D11.h",
"d3d11/UtilsD3D11.cpp",
"d3d11/UtilsD3D11.h",
]
}
if (dawn_enable_d3d12) {
if (dawn_use_built_dxc) {
deps += [ "$dawn_root/third_party/gn/dxc:dxcompiler" ]
defines += [ "DAWN_USE_BUILT_DXC" ]
data_deps += [ "$dawn_root/third_party/gn/dxc:copy_dxil_dll" ]
}
libs += [ "dxguid.lib" ]
sources += [
"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/CommandBufferD3D12.cpp",
"d3d12/CommandBufferD3D12.h",
"d3d12/CommandRecordingContext.cpp",
"d3d12/CommandRecordingContext.h",
"d3d12/ComputePipelineD3D12.cpp",
"d3d12/ComputePipelineD3D12.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/PageableD3D12.cpp",
"d3d12/PageableD3D12.h",
"d3d12/PhysicalDeviceD3D12.cpp",
"d3d12/PhysicalDeviceD3D12.h",
"d3d12/PipelineLayoutD3D12.cpp",
"d3d12/PipelineLayoutD3D12.h",
"d3d12/PlatformFunctionsD3D12.cpp",
"d3d12/PlatformFunctionsD3D12.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/SharedBufferMemoryD3D12.cpp",
"d3d12/SharedBufferMemoryD3D12.h",
"d3d12/SharedFenceD3D12.cpp",
"d3d12/SharedFenceD3D12.h",
"d3d12/SharedTextureMemoryD3D12.cpp",
"d3d12/SharedTextureMemoryD3D12.h",
"d3d12/StagingDescriptorAllocatorD3D12.cpp",
"d3d12/StagingDescriptorAllocatorD3D12.h",
"d3d12/StreamImplD3D12.cpp",
"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 = [
"IOKit.framework",
"IOSurface.framework",
"Metal.framework",
"QuartzCore.framework",
]
if (is_mac) {
frameworks += [ "Cocoa.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/PhysicalDeviceMTL.h",
"metal/PhysicalDeviceMTL.mm",
"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/SharedFenceMTL.h",
"metal/SharedFenceMTL.mm",
"metal/SharedTextureMemoryMTL.h",
"metal/SharedTextureMemoryMTL.mm",
"metal/SwapChainMTL.h",
"metal/SwapChainMTL.mm",
"metal/TextureMTL.h",
"metal/TextureMTL.mm",
"metal/UtilsMetal.h",
"metal/UtilsMetal.mm",
]
# If a "build with ARC" config is present, remove it.
if (filter_include(configs, [ "//build/config/compiler:enable_arc" ]) !=
[]) {
configs -= [ "//build/config/compiler:enable_arc" ]
}
}
if (dawn_enable_null) {
sources += [
"null/DeviceNull.cpp",
"null/DeviceNull.h",
]
}
if ((dawn_enable_opengl || dawn_enable_vulkan) &&
dawn_enable_spirv_validation) {
sources += [
"SpirvValidation.cpp",
"SpirvValidation.h",
]
deps += [
"${dawn_spirv_tools_dir}:spvtools_opt",
"${dawn_spirv_tools_dir}:spvtools_val",
]
}
if (dawn_enable_opengl) {
public_deps += [
":opengl_loader_gen",
"${dawn_root}/src/tint/api/common:common",
"${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/BindingPoint.h",
"opengl/BufferGL.cpp",
"opengl/BufferGL.h",
"opengl/CommandBufferGL.cpp",
"opengl/CommandBufferGL.h",
"opengl/ComputePipelineGL.cpp",
"opengl/ComputePipelineGL.h",
"opengl/ContextEGL.cpp",
"opengl/ContextEGL.h",
"opengl/DeviceGL.cpp",
"opengl/DeviceGL.h",
"opengl/EGLFunctions.cpp",
"opengl/EGLFunctions.h",
"opengl/Forward.h",
"opengl/GLFormat.cpp",
"opengl/GLFormat.h",
"opengl/OpenGLFunctions.cpp",
"opengl/OpenGLFunctions.h",
"opengl/OpenGLVersion.cpp",
"opengl/OpenGLVersion.h",
"opengl/PersistentPipelineStateGL.cpp",
"opengl/PersistentPipelineStateGL.h",
"opengl/PhysicalDeviceGL.cpp",
"opengl/PhysicalDeviceGL.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/TextureGL.cpp",
"opengl/TextureGL.h",
"opengl/UtilsEGL.cpp",
"opengl/UtilsEGL.h",
"opengl/UtilsGL.cpp",
"opengl/UtilsGL.h",
"opengl/opengl_platform.h",
]
include_dirs = [ "//third_party/khronos" ]
}
if (dawn_enable_vulkan) {
configs += [ ":vulkan_utility_libraries_include" ]
public_deps += [ "${dawn_vulkan_headers_dir}:vulkan_headers" ]
sources += [
"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/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/PhysicalDeviceVk.cpp",
"vulkan/PhysicalDeviceVk.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/RefCountedVkHandle.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/SharedFenceVk.cpp",
"vulkan/SharedFenceVk.h",
"vulkan/SharedTextureMemoryVk.cpp",
"vulkan/SharedTextureMemoryVk.h",
"vulkan/StreamImplVk.cpp",
"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/MemoryImportParams.h",
"vulkan/external_memory/MemoryService.cpp",
"vulkan/external_memory/MemoryService.h",
"vulkan/external_memory/MemoryServiceImplementation.cpp",
"vulkan/external_memory/MemoryServiceImplementation.h",
"vulkan/external_semaphore/SemaphoreService.cpp",
"vulkan/external_semaphore/SemaphoreService.h",
"vulkan/external_semaphore/SemaphoreServiceImplementation.cpp",
"vulkan/external_semaphore/SemaphoreServiceImplementation.h",
]
if (is_android || is_linux || is_chromeos) {
sources += [
"vulkan/external_semaphore/SemaphoreServiceImplementationFD.cpp",
"vulkan/external_semaphore/SemaphoreServiceImplementationFD.h",
]
if (is_android) {
sources += [
"vulkan/external_memory/MemoryServiceImplementationAHardwareBuffer.cpp",
"vulkan/external_memory/MemoryServiceImplementationAHardwareBuffer.h",
]
} else if (is_linux || is_chromeos) {
sources += [
"vulkan/external_memory/MemoryServiceImplementationDmaBuf.cpp",
"vulkan/external_memory/MemoryServiceImplementationDmaBuf.h",
"vulkan/external_memory/MemoryServiceImplementationOpaqueFD.cpp",
"vulkan/external_memory/MemoryServiceImplementationOpaqueFD.h",
]
}
} else if (is_fuchsia) {
sources += [
"vulkan/external_memory/MemoryServiceImplementationZirconHandle.cpp",
"vulkan/external_memory/MemoryServiceImplementationZirconHandle.h",
"vulkan/external_semaphore/SemaphoreServiceImplementationZirconHandle.cpp",
"vulkan/external_semaphore/SemaphoreServiceImplementationZirconHandle.h",
]
}
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 (dawn_enable_spirv_validation) {
defines += [ "DAWN_ENABLE_SPIRV_VALIDATION" ]
}
}
}
# 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 = [ ":vulkan_rpath" ]
if (dawn_enable_d3d11 || dawn_enable_d3d12) {
sources += [ "d3d/D3DBackend.cpp" ]
}
if (dawn_enable_d3d11) {
sources += [ "d3d11/D3D11Backend.cpp" ]
}
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" ]
}
source_set("webgpu_dawn_native_proc_sources") {
sources = get_target_outputs(":webgpu_dawn_native_proc_gen")
deps = [
":headers",
":webgpu_dawn_native_proc_gen",
]
}
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"
output_name = "webgpu_dawn"
deps = [
":static",
":webgpu_dawn_native_proc_sources",
]
}