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

is_msvc = is_win && !is_clang

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

# Glad
config("glad_public") {
  include_dirs = [ "glad/include" ]
}

static_library("glad") {
  sources = [
    "glad/include/KHR/khrplatform.h",
    "glad/include/glad/glad.h",
    "glad/src/glad.c",
  ]

  public_configs = [ ":glad_public" ]
}

# SPIRV-Cross
spirv_cross_dir = dawn_spirv_cross_dir

config("spirv_cross_public") {
  include_dirs = [ "${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",
  ]

  need_glsl_cross = dawn_enable_opengl

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

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

# An empty Vulkan target to add the include dirs and list the sources
# for the header inclusion check.
config("vulkan_headers_public") {
  include_dirs = [ "." ]
}

source_set("vulkan_headers") {
  sources = [
    "vulkan/vk_platform.h",
    "vulkan/vulkan.h",
  ]

  public_configs = [ ":vulkan_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
###############################################################################

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" ]

  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") {
    public_configs = [ ":glm_public_config" ]
    # GLM is header only but has too many files to list them.
  }

  # STB
  config("stb_public_config") {
    include_dirs = [ "stb" ]

    if (!is_msvc) {
      cflags_cc = [ "-Wno-implicit-fallthrough" ]
    }
  }
  source_set("stb") {
    public_configs = [ ":stb_public_config" ]
    sources = [
      "stb/stb_image.h",
    ]
  }

  # PicoJSON
  config("picojson_public_config") {
    include_dirs = [ "." ]
  }
  source_set("picojson") {
    public_configs = [ ":picojson_public_config" ]
    sources = [
      "picojson/picojson.h",
    ]
  }

  # Tiny glTF Loader
  config("tiny_gltf_loader_public_config") {
    include_dirs = [ "." ]
  }
  source_set("tiny_gltf_loader") {
    public_configs = [ ":tiny_gltf_loader_public_config" ]
    public_deps = [
      ":picojson",
      ":stb",
    ]
    sources = [
      "tinygltfloader/tiny_gltf_loader.h",
    ]
  }
}
