blob: 9fe4fe7a96dd02ce86014767c9e63d5d8eacbd7f [file] [log] [blame] [edit]
# Copyright 2019 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}/scripts/dawn_features.gni")
# Use Chromium's dcheck_always_on when available so that we respect it when
# running tests on the GPU builders
if (build_with_chromium) {
import("//build/config/dcheck_always_on.gni")
} else {
dcheck_always_on = false
}
if (build_with_chromium) {
import("//build/config/sanitizers/sanitizers.gni")
} else {
use_fuzzing_engine = false
}
###############################################################################
# Common dawn configs
###############################################################################
config("dawn_public_include_dirs") {
include_dirs = [
"${target_gen_dir}/../../src/include",
"${dawn_root}/src/include",
]
}
config("dawn_internal") {
include_dirs = [
"${target_gen_dir}/../../src",
"${dawn_root}/src",
]
defines = []
if (dawn_always_assert || dcheck_always_on || is_debug ||
use_fuzzing_engine) {
defines += [ "DAWN_ENABLE_ASSERTS" ]
}
if (use_fuzzing_engine) {
# Does a hard abort when an assertion fails so that fuzzers catch and parse the failure.
defines += [ "DAWN_ABORT_ON_ASSERT" ]
}
if (dawn_enable_d3d12) {
defines += [ "DAWN_ENABLE_BACKEND_D3D12" ]
}
if (dawn_enable_metal) {
defines += [ "DAWN_ENABLE_BACKEND_METAL" ]
}
if (dawn_enable_null) {
defines += [ "DAWN_ENABLE_BACKEND_NULL" ]
}
if (dawn_enable_opengl) {
defines += [ "DAWN_ENABLE_BACKEND_OPENGL" ]
}
if (dawn_enable_desktop_gl) {
defines += [ "DAWN_ENABLE_BACKEND_DESKTOP_GL" ]
}
if (dawn_enable_opengles) {
defines += [ "DAWN_ENABLE_BACKEND_OPENGLES" ]
}
if (dawn_enable_vulkan) {
defines += [ "DAWN_ENABLE_BACKEND_VULKAN" ]
}
if (dawn_use_x11) {
defines += [ "DAWN_USE_X11" ]
}
if (dawn_enable_error_injection) {
defines += [ "DAWN_ENABLE_ERROR_INJECTION" ]
}
# Only internal Dawn targets can use this config, this means only targets in
# this BUILD.gn file and related subdirs.
visibility = [
"../*",
"../../examples/*",
]
cflags = []
if (is_clang) {
cflags += [ "-Wno-shadow" ]
}
# Enable more warnings that were found when using Dawn in other projects.
# Add them only when building in standalone because we control which clang
# version we use. Otherwise we risk breaking projects depending on Dawn when
# the use a different clang version.
if (dawn_standalone && is_clang) {
cflags += [
"-Wconditional-uninitialized",
"-Wcstring-format-directive",
"-Wc++11-narrowing",
"-Wdeprecated-copy",
"-Wdeprecated-copy-dtor",
"-Wduplicate-enum",
"-Wextra-semi-stmt",
"-Wimplicit-fallthrough",
"-Winconsistent-missing-destructor-override",
"-Winvalid-offsetof",
"-Wmissing-field-initializers",
"-Wnon-c-typedef-for-linkage",
"-Wpessimizing-move",
"-Wrange-loop-analysis",
"-Wredundant-move",
"-Wshadow-field",
"-Wstrict-prototypes",
"-Wtautological-unsigned-zero-compare",
"-Wunreachable-code-aggressive",
"-Wunused-but-set-variable",
]
if (is_win) {
cflags += [
# clang-cl doesn't know -pedantic, pass it explicitly to the clang driver
"/clang:-pedantic",
# Allow the use of __uuidof()
"-Wno-language-extension-token",
]
} else {
cflags += [ "-pedantic" ]
}
}
if (!is_clang && is_win) {
# Dawn extends wgpu enums with internal enums.
# MSVC considers these invalid switch values. crbug.com/dawn/397.
cflags += [ "/wd4063" ]
# MSVC things that a switch over all the enum values of an enum class is
# not sufficient to cover all control paths. Turn off this warning so that
# the respective clang warning tells us where to add switch cases
# (otherwise we have to add default: UNREACHABLE() that silences clang too)
cflags += [ "/wd4715" ]
# MSVC emits warnings when using constructs deprecated in C++17. Silence
# them until they are fixed.
# TODO(dawn:824): Fix all uses of C++ features deprecated in C++17.
defines += [ "_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS" ]
if (dawn_is_winuwp) {
# /ZW makes sure we don't add calls that are forbidden in UWP.
# and /EHsc is required to be used in combination with it,
# even if it is already added by the windows GN defaults,
# we still add it to make every /ZW paired with a /EHsc
cflags_cc = [
"/ZW:nostdlib",
"/EHsc",
]
}
}
}
###############################################################################
# Common dawn library
###############################################################################
# This GN file is discovered by all Chromium builds, but common doesn't support
# all of Chromium's OSes so we explicitly make the target visible only on
# systems we know Dawn is able to compile on.
if (is_win || is_linux || is_chromeos || is_mac || is_fuchsia || is_android) {
static_library("common") {
sources = [
"Alloc.h",
"Assert.cpp",
"Assert.h",
"BitSetIterator.h",
"Compiler.h",
"ConcurrentCache.h",
"Constants.h",
"CoreFoundationRef.h",
"DynamicLib.cpp",
"DynamicLib.h",
"GPUInfo.cpp",
"GPUInfo.h",
"HashUtils.h",
"IOKitRef.h",
"LinkedList.h",
"Log.cpp",
"Log.h",
"Math.cpp",
"Math.h",
"NSRef.h",
"NonCopyable.h",
"PlacementAllocated.h",
"Platform.h",
"Preprocessor.h",
"RefBase.h",
"RefCounted.cpp",
"RefCounted.h",
"Result.cpp",
"Result.h",
"SerialMap.h",
"SerialQueue.h",
"SerialStorage.h",
"SlabAllocator.cpp",
"SlabAllocator.h",
"StackContainer.h",
"SwapChainUtils.h",
"SystemUtils.cpp",
"SystemUtils.h",
"TypeTraits.h",
"TypedInteger.h",
"UnderlyingType.h",
"ityp_array.h",
"ityp_bitset.h",
"ityp_span.h",
"ityp_stack_vec.h",
"ityp_vector.h",
"vulkan_platform.h",
"xlib_with_undefs.h",
]
if (is_mac) {
sources += [ "SystemUtils_mac.mm" ]
}
public_configs = [ ":dawn_internal" ]
deps = [
"${dawn_root}/src/dawn:dawn_headers",
"${dawn_root}/src/dawn:dawncpp_headers",
]
if (is_win) {
sources += [
"WindowsUtils.cpp",
"WindowsUtils.h",
"windows_with_undefs.h",
]
}
if (dawn_enable_vulkan) {
public_deps = [ "${dawn_root}/third_party/khronos:vulkan_headers" ]
}
if (is_android) {
libs = [ "log" ]
}
}
}