# Copyright 2016 Google Inc.
#
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

declare_args() {
}

angle_root = "../externals/angle2"

import("../third_party.gni")
import("$angle_root/src/compiler.gni")
import("$angle_root/src/libGLESv2.gni")

third_party("angle2") {
  public_include_dirs = [ "$angle_root/include" ]
  deps = [
    ":libEGL",
    ":libGLESv2",
  ]
}

config("common") {
  defines = [
    "ANGLE_ENABLE_ESSL",
    "ANGLE_ENABLE_GLSL",
    "ANGLE_ENABLE_HLSL",
    "ANGLE_ENABLE_OPENGL",
    "EGL_EGLEXT_PROTOTYPES",
    "GL_GLEXT_PROTOTYPES",
  ]
  include_dirs = [
    "$root_gen_dir/angle2",
    "$angle_root/include",
    "$angle_root/src",
    "$angle_root/src/common/third_party/base",
    "$angle_root/src/third_party/khronos",
  ]
  cflags_cc = []
  assert(is_linux || is_win)  # TODO: is_mac?
  if (is_linux) {
    defines += [
      "ANGLE_USE_X11",
      "GL_APICALL=__attribute__((visibility(\"default\")))",
      "GL_API=__attribute__((visibility(\"default\")))",
      "EGLAPI=__attribute__((visibility(\"default\")))",
    ]
    cflags_cc += [ "-std=c++14" ]
  } else if (is_win) {
    defines += [
      "ANGLE_ENABLE_D3D11",
      "ANGLE_ENABLE_D3D9",
      "GL_APICALL=",
      "GL_API=",
      "EGLAPI=",
    ]

    # Allow noexcept, even though we build without exceptions
    cflags_cc += [ "/wd4577" ]
    if (is_clang) {
      # utilities.cpp includes an 'unsigned long' <= UINT_MAX check
      cflags_cc += [ "-Wno-tautological-constant-compare" ]
    }
  }
}

copy("commit_id") {
  sources = [
    "$angle_root/src/commit.h",
  ]
  outputs = [
    "$root_gen_dir/angle2/id/commit.h",
  ]
}

shared_library("libGLESv2") {
  configs += [ ":common" ]
  configs -= [ "//gn:warnings" ]
  defines = [
    "LIBANGLE_IMPLEMENTATION",
    "LIBGLESV2_IMPLEMENTATION",
  ]
  deps = [
    ":commit_id",
  ]
  libs = []
  sources = rebase_path(
          angle_preprocessor_sources + angle_translator_sources +
              angle_translator_essl_sources + angle_translator_glsl_sources +
              angle_translator_hlsl_sources + libangle_sources +
              libangle_common_sources + libangle_image_util_sources +
              libglesv2_sources + libangle_gl_sources,
          ".",
          angle_root)
  if (is_win) {
    sources += [ "$angle_root/src/libGLESv2/libGLESv2_autogen.def" ]
  }
  if (is_linux) {
    libs += [
      "X11",
      "Xi",
      "Xext",
    ]
    sources +=
        rebase_path(libangle_gl_glx_sources + libangle_common_linux_sources,
                    ".",
                    angle_root) +
        [ "$angle_root/src/third_party/libXNVCtrl/NVCtrl.c" ]
  } else if (is_win) {
    defines += [
      # TODO: ANGLE_PRELOADED_D3DCOMPILER_MODULE_NAMES
    ]
    sources += rebase_path(
            libangle_gl_wgl_sources + libangle_d3d_shared_sources +
                libangle_d3d9_sources + libangle_d3d11_sources +
                libangle_d3d11_win32_sources + libangle_common_win_sources,
            ".",
            angle_root)
    libs += [
      "d3d9.lib",
      "dxguid.lib",
      "gdi32.lib",
      "user32.lib",
    ]
    deps += [
      # TODO: copy_compiler_dll?
    ]
  }
}

shared_library("libEGL") {
  configs += [ ":common" ]
  configs -= [ "//gn:warnings" ]
  defines = [ "LIBEGL_IMPLEMENTATION" ]
  deps = [
    ":libGLESv2",
  ]
  sources = rebase_path(libegl_sources, ".", angle_root)
  if (is_win) {
    sources += [ "$angle_root/src/libEGL/libEGL.def" ]
  }
}
