# 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",
      "-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" ]
    }

    # Note that while this doesn't make `internal_config` a public config of
    # Dawn libraries because `:common` is only used as a private deps of Dawn
    # targets, so `internal_config` doesn't leak out of Dawn.
    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" ]
    }
  }
}
