# Copyright 2018 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("//build_overrides/build.gni")
import("../scripts/dawn_features.gni")
import("../scripts/dawn_overrides_with_defaults.gni")

is_msvc = is_win && !is_clang

###############################################################################
# Third-party dependencies needed by libdawn_native
###############################################################################

# SPIRV-Cross
spirv_cross_dir = dawn_spirv_cross_dir

config("spirv_cross_public") {
  include_dirs = [
    "${spirv_cross_dir}",
    "${spirv_cross_dir}/..",
  ]
  defines = [ "SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS" ]
}

config("spirv_cross_internal") {
  if (!is_msvc) {
    cflags_cc = [
      "-Wno-implicit-fallthrough",
      "-Wno-return-type",
      "-Wno-sign-compare",
    ]
  } else {
    # Disable "not all control paths return a value" warning.
    cflags_cc = [ "/wd4715" ]
  }
}

static_library("spirv_cross") {
  public_configs = [ ":spirv_cross_public" ]
  configs += [ ":spirv_cross_internal" ]

  sources = [
    "${spirv_cross_dir}/GLSL.std.450.h",
    "${spirv_cross_dir}/spirv.hpp",
    "${spirv_cross_dir}/spirv_cfg.cpp",
    "${spirv_cross_dir}/spirv_cfg.hpp",
    "${spirv_cross_dir}/spirv_common.hpp",
    "${spirv_cross_dir}/spirv_cross.cpp",
    "${spirv_cross_dir}/spirv_cross.hpp",
    "${spirv_cross_dir}/spirv_cross_containers.hpp",
    "${spirv_cross_dir}/spirv_cross_error_handling.hpp",
    "${spirv_cross_dir}/spirv_cross_parsed_ir.cpp",
    "${spirv_cross_dir}/spirv_cross_parsed_ir.hpp",
    "${spirv_cross_dir}/spirv_parser.cpp",
    "${spirv_cross_dir}/spirv_parser.hpp",
  ]

  need_glsl_cross =
      dawn_enable_opengl || dawn_enable_cross_reflection || dawn_use_spvc
  need_reflection_cross = dawn_enable_cross_reflection || dawn_use_spvc

  if (dawn_enable_d3d12) {
    sources += [
      "${spirv_cross_dir}/spirv_hlsl.cpp",
      "${spirv_cross_dir}/spirv_hlsl.hpp",
    ]
    need_glsl_cross = true
  }

  if (dawn_enable_metal) {
    sources += [
      "${spirv_cross_dir}/spirv_msl.cpp",
      "${spirv_cross_dir}/spirv_msl.hpp",
    ]
    need_glsl_cross = true
  }

  if (need_glsl_cross) {
    sources += [
      "${spirv_cross_dir}/spirv_glsl.cpp",
      "${spirv_cross_dir}/spirv_glsl.hpp",
    ]
  }

  if (need_reflection_cross) {
    sources += [
      "${spirv_cross_dir}/spirv_reflect.cpp",
      "${spirv_cross_dir}/spirv_reflect.hpp",
    ]
  }
}

static_library("spirv_cross_full_for_fuzzers") {
  public_configs = [ ":spirv_cross_public" ]
  configs += [ ":spirv_cross_internal" ]

  sources = [
    "${spirv_cross_dir}/GLSL.std.450.h",
    "${spirv_cross_dir}/spirv.hpp",
    "${spirv_cross_dir}/spirv_cfg.cpp",
    "${spirv_cross_dir}/spirv_cfg.hpp",
    "${spirv_cross_dir}/spirv_common.hpp",
    "${spirv_cross_dir}/spirv_cross.cpp",
    "${spirv_cross_dir}/spirv_cross.hpp",
    "${spirv_cross_dir}/spirv_cross_containers.hpp",
    "${spirv_cross_dir}/spirv_cross_error_handling.hpp",
    "${spirv_cross_dir}/spirv_cross_parsed_ir.cpp",
    "${spirv_cross_dir}/spirv_cross_parsed_ir.hpp",
    "${spirv_cross_dir}/spirv_glsl.cpp",
    "${spirv_cross_dir}/spirv_glsl.hpp",
    "${spirv_cross_dir}/spirv_hlsl.cpp",
    "${spirv_cross_dir}/spirv_hlsl.hpp",
    "${spirv_cross_dir}/spirv_msl.cpp",
    "${spirv_cross_dir}/spirv_msl.hpp",
    "${spirv_cross_dir}/spirv_parser.cpp",
    "${spirv_cross_dir}/spirv_parser.hpp",
    "${spirv_cross_dir}/spirv_reflect.cpp",
    "${spirv_cross_dir}/spirv_reflect.hpp",
  ]
}

# Empty targets to add the include dirs and list the sources of Khronos headers for header inclusion check.
config("khronos_headers_public") {
  include_dirs = [ "khronos" ]
}

config("vulkan_headers_config") {
  include_dirs = [ "khronos" ]
  if (is_win) {
    defines = [ "VK_USE_PLATFORM_WIN32_KHR" ]
  }
  if (is_linux && !is_chromeos) {
    defines = [ "VK_USE_PLATFORM_XCB_KHR" ]
  }
  if (is_android) {
    defines = [ "VK_USE_PLATFORM_ANDROID_KHR" ]
  }
  if (is_fuchsia) {
    defines = [ "VK_USE_PLATFORM_FUCHSIA" ]
  }
}

source_set("vulkan_headers") {
  sources = [
    "khronos/vulkan/vk_icd.h",
    "khronos/vulkan/vk_layer.h",
    "khronos/vulkan/vk_platform.h",
    "khronos/vulkan/vk_sdk_platform.h",
    "khronos/vulkan/vulkan.h",
    "khronos/vulkan/vulkan_core.h",
  ]

  if (is_fuchsia) {
    sources += [ "khronos/vulkan/vulkan_fuchsia_extras.h" ]
  }

  public_configs = [ ":vulkan_headers_config" ]
}

source_set("khronos_platform") {
  sources = [
    "khronos/KHR/khrplatform.h",
  ]

  public_configs = [ ":khronos_headers_public" ]
}

###############################################################################
# Gtest Gmock - Handle building inside and outside of Chromium.
###############################################################################

# When building outside of Chromium we need to define our own targets for GTest
# and GMock. However when compiling inside of Chromium we need to reuse the
# existing targets, both because Chromium has a special harness for swarming
# and because otherwise the "gn check" fails.

if (!build_with_chromium) {
  # When we aren't in Chromium we define out own targets based on the location
  # of the googletest repo.
  googletest_dir = dawn_googletest_dir

  config("gtest_config") {
    include_dirs = [
      "${googletest_dir}/googletest",
      "${googletest_dir}/googletest/include",
    ]
  }

  static_library("gtest") {
    testonly = true
    sources = [
      "${googletest_dir}/googletest/src/gtest-all.cc",
    ]
    public_configs = [ ":gtest_config" ]
  }

  config("gmock_config") {
    include_dirs = [
      "${googletest_dir}/googlemock",
      "${googletest_dir}/googlemock/include",
      "${googletest_dir}/googletest/include",
    ]
  }

  static_library("gmock") {
    testonly = true
    sources = [
      "${googletest_dir}/googlemock/src/gmock-all.cc",
    ]
    public_configs = [ ":gmock_config" ]
  }

  group("gmock_and_gtest") {
    testonly = true
    public_deps = [
      ":gmock",
      ":gtest",
    ]
  }
} else {
  # When we are in Chromium we reuse its targets, and also add some deps that
  # are needed to launch the test in swarming mode.
  group("gmock_and_gtest") {
    testonly = true
    public_deps = [
      "//base",
      "//base/test:test_support",
      "//testing/gmock",
      "//testing/gtest",
    ]
  }
}

###############################################################################
# GLFW - good enough build targets
###############################################################################

# Only expose GLFW targets on platforms where GLFW is supported: otherwise they
# might get discovered by GN when another target in this file is referenced,
# and GLFW will bbe built as part of "all" builds, causing compilation failures.
if (is_win || (is_linux && !is_chromeos) || is_mac) {
  glfw_dir = dawn_glfw_dir

  config("glfw_public") {
    include_dirs = [ "${glfw_dir}/include" ]

    if (is_win) {
      defines = [ "_GLFW_WIN32" ]
    }

    if (is_mac) {
      defines = [ "_GLFW_COCOA" ]
    }

    if (is_linux) {
      defines = [ "_GLFW_X11" ]
    }
  }

  static_library("glfw") {
    public_configs = [ ":glfw_public" ]

    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]

    if (is_msvc) {
      # nonstandard extension, function/data pointer conversion in expression
      cflags_c = [ "/wd4152" ]
    } else {
      cflags_c = [
        "-Wno-sign-compare",
        "-Wno-missing-field-initializers",
      ]
    }

    sources = [
      "${glfw_dir}/include/GLFW/glfw3.h",
      "${glfw_dir}/include/GLFW/glfw3native.h",
      "${glfw_dir}/src/context.c",
      "${glfw_dir}/src/egl_context.c",
      "${glfw_dir}/src/egl_context.h",
      "${glfw_dir}/src/init.c",
      "${glfw_dir}/src/input.c",
      "${glfw_dir}/src/internal.h",
      "${glfw_dir}/src/monitor.c",
      "${glfw_dir}/src/osmesa_context.c",
      "${glfw_dir}/src/osmesa_context.h",
      "${glfw_dir}/src/vulkan.c",
      "${glfw_dir}/src/window.c",
    ]
    libs = []

    if (is_win) {
      sources += [
        "${glfw_dir}/src/wgl_context.c",
        "${glfw_dir}/src/wgl_context.h",
        "${glfw_dir}/src/win32_init.c",
        "${glfw_dir}/src/win32_joystick.c",
        "${glfw_dir}/src/win32_joystick.h",
        "${glfw_dir}/src/win32_monitor.c",
        "${glfw_dir}/src/win32_platform.h",
        "${glfw_dir}/src/win32_thread.c",
        "${glfw_dir}/src/win32_time.c",
        "${glfw_dir}/src/win32_window.c",
      ]
    }

    if (is_linux || is_mac) {
      sources += [
        "${glfw_dir}/src/posix_thread.c",
        "${glfw_dir}/src/posix_thread.h",
      ]
    }

    if (is_linux) {
      sources += [
        "${glfw_dir}/src/glx_context.c",
        "${glfw_dir}/src/glx_context.h",
        "${glfw_dir}/src/linux_joystick.c",
        "${glfw_dir}/src/linux_joystick.h",
        "${glfw_dir}/src/posix_time.c",
        "${glfw_dir}/src/posix_time.h",
        "${glfw_dir}/src/x11_init.c",
        "${glfw_dir}/src/x11_monitor.c",
        "${glfw_dir}/src/x11_platform.h",
        "${glfw_dir}/src/x11_window.c",
        "${glfw_dir}/src/xkb_unicode.c",
        "${glfw_dir}/src/xkb_unicode.h",
      ]

      libs += [
        "rt",
        "dl",
        "X11",
        "Xcursor",
        "Xinerama",
        "Xrandr",
      ]
    }

    if (is_mac) {
      sources += [
        "${glfw_dir}/src/cocoa_init.m",
        "${glfw_dir}/src/cocoa_joystick.h",
        "${glfw_dir}/src/cocoa_joystick.m",
        "${glfw_dir}/src/cocoa_monitor.m",
        "${glfw_dir}/src/cocoa_platform.h",
        "${glfw_dir}/src/cocoa_time.c",
        "${glfw_dir}/src/cocoa_window.m",
        "${glfw_dir}/src/nsgl_context.h",
        "${glfw_dir}/src/nsgl_context.m",
      ]
      libs += [
        "Cocoa.framework",
        "IOKit.framework",
        "CoreFoundation.framework",
        "CoreVideo.framework",
      ]
      cflags_objc = [
        "-Wno-sign-compare",
        "-Wno-unguarded-availability",
        "-Wno-objc-multiple-method-names",
      ]
    }
  }
}

###############################################################################
# Header-only dependencies for samples
###############################################################################

if (dawn_standalone) {
  # GLM
  config("glm_public_config") {
    include_dirs = [ "glm" ]
  }
  source_set("glm") {
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]

    public_configs = [ ":glm_public_config" ]

    # GLM is header only but has too many files to list them.
  }
}
