| # 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_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. |
| visibility = [ ":*" ] |
| |
| # Enable more warnings that were found when using Dawn in other projects |
| if (is_clang) { |
| cflags = [ |
| "-Wconditional-uninitialized", |
| "-Wcstring-format-directive", |
| "-Wc++11-narrowing", |
| "-Wdeprecated-copy", |
| "-Wextra-semi-stmt", |
| "-Winconsistent-missing-destructor-override", |
| "-Winvalid-offsetof", |
| "-Wmissing-field-initializers", |
| "-Wpessimizing-move", |
| "-Wreturn-std-move-in-c++11", |
| "-Wshadow-field", |
| "-Wstrict-prototypes", |
| "-Wtautological-unsigned-zero-compare", |
| ] |
| |
| # clang-cl doesn't know -pedantic, pass it explicitly to the clang driver on Windows |
| if (is_win) { |
| cflags += [ "/clang:-pedantic" ] |
| } else { |
| cflags += [ "-pedantic" ] |
| } |
| |
| # Flags for -pedantic warnings that haven't been fixed yet. |
| cflags += [ |
| "-Wno-c++20-designator", |
| "-Wno-four-char-constants", |
| "-Wno-gnu-anonymous-struct", |
| "-Wno-gnu-zero-variadic-macro-arguments", |
| "-Wno-language-extension-token", |
| "-Wno-microsoft-enum-value", |
| "-Wno-nested-anon-types", |
| "-Wno-vla-extension", |
| ] |
| } |
| } |
| |
| ############################################################################### |
| # 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_mac || is_fuchsia || is_android) { |
| static_library("common") { |
| sources = [ |
| "Assert.cpp", |
| "Assert.h", |
| "BitSetIterator.h", |
| "Compiler.h", |
| "Constants.h", |
| "DynamicLib.cpp", |
| "DynamicLib.h", |
| "GPUInfo.cpp", |
| "GPUInfo.h", |
| "HashUtils.h", |
| "LinkedList.h", |
| "Log.cpp", |
| "Log.h", |
| "Math.cpp", |
| "Math.h", |
| "PlacementAllocated.h", |
| "Platform.h", |
| "RefCounted.cpp", |
| "RefCounted.h", |
| "Result.cpp", |
| "Result.h", |
| "Serial.h", |
| "SerialMap.h", |
| "SerialQueue.h", |
| "SerialStorage.h", |
| "SlabAllocator.cpp", |
| "SlabAllocator.h", |
| "SwapChainUtils.h", |
| "SystemUtils.cpp", |
| "SystemUtils.h", |
| "vulkan_platform.h", |
| "windows_with_undefs.h", |
| "xlib_with_undefs.h", |
| ] |
| |
| public_configs = [ ":dawn_internal" ] |
| deps = [ "${dawn_root}/src/dawn:dawn_headers" ] |
| if (dawn_enable_vulkan) { |
| public_deps = [ "${dawn_root}/third_party/khronos:vulkan_headers" ] |
| } |
| if (is_android) { |
| libs = [ "log" ] |
| } |
| } |
| } |