# 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")

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

compiler_gypi = exec_script("//gn/gypi_to_gn.py",
                            [ rebase_path("$angle_root/src/compiler.gypi") ],
                            "scope",
                            [])

gles_gypi = exec_script("//gn/gypi_to_gn.py",
                        [ rebase_path("$angle_root/src/libGLESv2.gypi") ],
                        "scope",
                        [])

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/numerics",
    "$angle_root/src/third_party/khronos",
  ]

  assert(is_linux || is_win)  # TODO: is_mac?
  if (is_linux) {
    defines += [
      "ANGLE_USE_X11",
      "GL_APICALL=__attribute__((visibility(\"default\")))",
      "EGLAPI=__attribute__((visibility(\"default\")))",
    ]
  } else if (is_win) {
    defines += [
      "ANGLE_ENABLE_D3D11",
      "ANGLE_ENABLE_D3D9",
      "GL_APICALL=",
      "EGLAPI=",
    ]
  }
}

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(
          compiler_gypi.angle_preprocessor_sources +
              compiler_gypi.angle_translator_sources +
              compiler_gypi.angle_translator_essl_sources +
              compiler_gypi.angle_translator_glsl_sources +
              compiler_gypi.angle_translator_hlsl_sources +
              gles_gypi.libangle_sources + gles_gypi.libangle_common_sources +
              gles_gypi.libangle_image_util_sources +
              gles_gypi.libglesv2_sources + gles_gypi.libangle_gl_sources,
          ".",
          "$angle_root/src")
  if (!is_win) {
    sources -= [ "$angle_root/src/libGLESv2/libGLESv2.def" ]
  }

  if (is_linux) {
    libs += [
      "X11",
      "Xi",
      "Xext",
    ]
    sources +=
        rebase_path(gles_gypi.libangle_gl_glx_sources, ".", "$angle_root/src") +
        [ "$angle_root/src/third_party/libXNVCtrl/NVCtrl.c" ]
  } else if (is_win) {
    defines += [
      # TODO: ANGLE_PRELOADED_D3DCOMPILER_MODULE_NAMES
    ]
    sources += rebase_path(gles_gypi.libangle_gl_wgl_sources +
                               gles_gypi.libangle_d3d_shared_sources +
                               gles_gypi.libangle_d3d9_sources +
                               gles_gypi.libangle_d3d11_sources +
                               gles_gypi.libangle_d3d11_win32_sources,
                           ".",
                           "$angle_root/src")
    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(gles_gypi.libegl_sources, ".", "$angle_root/src")
  if (!is_win) {
    sources -= [ "$angle_root/src/libEGL/libEGL.def" ]
  }
}