# 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_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
  need_reflection_cross = dawn_enable_cross_reflection

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

###############################################################################
# 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.
  }
}
