301 lines
8.3 KiB
Plaintext
301 lines
8.3 KiB
Plaintext
# 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}/generator/dawn_generator.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("internal_config") {
|
|
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) {
|
|
defines += [
|
|
# Does a hard abort when an assertion fails so that fuzzers catch and parse the failure.
|
|
"DAWN_ABORT_ON_ASSERT",
|
|
|
|
# Disable logging to make fuzzing more efficient.
|
|
"DAWN_DISABLE_LOGGING",
|
|
]
|
|
}
|
|
|
|
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_wayland) {
|
|
defines += [ "DAWN_USE_WAYLAND" ]
|
|
}
|
|
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 = [
|
|
"${dawn_root}/samples/dawn/*",
|
|
"${dawn_root}/src/dawn/*",
|
|
]
|
|
|
|
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",
|
|
"-Wsuggest-destructor-override",
|
|
"-Wsuggest-override",
|
|
"-Wtautological-unsigned-zero-compare",
|
|
"-Wunreachable-code-aggressive",
|
|
"-Wunused-but-set-variable",
|
|
"-Wunused-macros",
|
|
]
|
|
|
|
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
|
|
###############################################################################
|
|
|
|
dawn_generator("dawn_version_gen") {
|
|
script = "${dawn_root}/generator/dawn_version_generator.py"
|
|
args = [
|
|
"--dawn-dir",
|
|
rebase_path("${dawn_root}", root_build_dir),
|
|
]
|
|
|
|
# We can use the explicit version file if it is generated instead of relying
|
|
# on the existence of git.
|
|
if (dawn_version_file != "") {
|
|
args += [
|
|
"--version-file",
|
|
rebase_path(dawn_version_file, root_build_dir),
|
|
]
|
|
}
|
|
|
|
outputs = [ "src/dawn/common/Version_autogen.h" ]
|
|
}
|
|
|
|
dawn_generator("dawn_gpu_info_gen") {
|
|
script = "${dawn_root}/generator/dawn_gpu_info_generator.py"
|
|
args = [
|
|
"--gpu-info-json",
|
|
rebase_path("${dawn_root}/src/dawn/gpu_info.json", root_build_dir),
|
|
]
|
|
outputs = [
|
|
"src/dawn/common/GPUInfo_autogen.h",
|
|
"src/dawn/common/GPUInfo_autogen.cpp",
|
|
]
|
|
}
|
|
|
|
# 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",
|
|
"Numeric.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",
|
|
]
|
|
sources += get_target_outputs(":dawn_gpu_info_gen")
|
|
|
|
public_deps = [
|
|
":dawn_gpu_info_gen",
|
|
":dawn_version_gen",
|
|
]
|
|
|
|
if (is_mac) {
|
|
sources += [ "SystemUtils_mac.mm" ]
|
|
}
|
|
|
|
public_configs = [ ":internal_config" ]
|
|
deps = [
|
|
"${dawn_root}/include/dawn:cpp_headers",
|
|
"${dawn_root}/include/dawn:headers",
|
|
]
|
|
|
|
if (is_win) {
|
|
sources += [
|
|
"WindowsUtils.cpp",
|
|
"WindowsUtils.h",
|
|
"windows_with_undefs.h",
|
|
]
|
|
}
|
|
if (dawn_enable_vulkan) {
|
|
public_deps += [ "${dawn_vulkan_headers_dir}:vulkan_headers" ]
|
|
}
|
|
if (is_android) {
|
|
libs = [ "log" ]
|
|
}
|
|
}
|
|
}
|