# Copyright 2014-2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# import the use_x11 variable
import("//build/config/dcheck_always_on.gni")
import("//build/config/ui.gni")
import("//third_party/angle/build/angle_common.gni")

angle_git_is_present = exec_script("src/commit_id.py",
                                   [
                                     "check",
                                     rebase_path(".", root_build_dir),
                                   ],
                                   "value")

angle_use_commit_id = angle_git_is_present == 1

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

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

# This config is exported to dependent targets (and also applied to internal
# ones).
config("external_config") {
  include_dirs = [ "include" ]
}

# This config is applied to internal Angle targets (not pushed to dependents).
config("internal_config") {
  include_dirs = [
    "include",
    "src",
  ]
}

if (is_win) {
  copy("copy_compiler_dll") {
    sources = [
      "$windows_sdk_path/Redist/D3D/$target_cpu/d3dcompiler_47.dll",
    ]
    outputs = [
      "$root_out_dir/d3dcompiler_47.dll",
    ]
  }
}

angle_undefine_configs = [
  "//build/config/compiler:chromium_code",
  "//build/config/compiler:default_include_dirs",
]

component("translator") {
  sources = [
    "src/compiler/translator/ShaderLang.cpp",
    "src/compiler/translator/ShaderVars.cpp",
  ]

  defines = [ "ANGLE_TRANSLATOR_IMPLEMENTATION" ]

  configs -= angle_undefine_configs
  configs += [
    ":internal_config",
    "//build/config/compiler:no_chromium_code",
  ]

  public_deps = [
    ":translator_lib",
  ]
}

# Holds the shared includes so we only need to list them once.
source_set("includes") {
  sources = [
    "include/EGL/egl.h",
    "include/EGL/eglext.h",
    "include/EGL/eglplatform.h",
    "include/GLES2/gl2.h",
    "include/GLES2/gl2ext.h",
    "include/GLES2/gl2platform.h",
    "include/GLES3/gl3.h",
    "include/GLES3/gl31.h",
    "include/GLES3/gl32.h",
    "include/GLES3/gl3platform.h",
    "include/GLSLANG/ShaderLang.h",
    "include/KHR/khrplatform.h",
  ]
}

static_library("preprocessor") {
  sources = rebase_path(compiler_gypi.angle_preprocessor_sources, ".", "src")

  configs -= angle_undefine_configs
  configs += [
    ":internal_config",
    "//build/config/compiler:no_chromium_code",
  ]
}

config("translator_static_config") {
  defines = [ "ANGLE_TRANSLATOR_STATIC" ]
}

config("debug_annotations_config") {
  if (is_debug) {
    defines = [ "ANGLE_ENABLE_DEBUG_ANNOTATIONS" ]
  }
}

config("angle_release_asserts_config") {
  if (dcheck_always_on) {
    defines = [ "ANGLE_ENABLE_RELEASE_ASSERTS" ]
  }
}

config("angle_common_config") {
  include_dirs = [ "src/common/third_party/numerics" ]
}

static_library("angle_common") {
  sources = rebase_path(gles_gypi.libangle_common_sources, ".", "src")

  configs -= angle_undefine_configs
  configs += [
    ":angle_common_config",
    ":debug_annotations_config",
    ":internal_config",
    "//build/config/compiler:no_chromium_code",
  ]

  public_deps = [
    ":commit_id",
  ]
  public_configs = [
    ":angle_release_asserts_config",
    ":angle_common_config",
  ]
}

static_library("translator_lib") {
  sources = rebase_path(compiler_gypi.angle_translator_lib_sources, ".", "src")
  defines = []

  if (angle_enable_essl) {
    sources +=
        rebase_path(compiler_gypi.angle_translator_lib_essl_sources, ".", "src")
    defines += [ "ANGLE_ENABLE_ESSL" ]
  }

  if (angle_enable_glsl) {
    sources +=
        rebase_path(compiler_gypi.angle_translator_lib_glsl_sources, ".", "src")
    defines += [ "ANGLE_ENABLE_GLSL" ]
  }

  if (angle_enable_hlsl) {
    sources +=
        rebase_path(compiler_gypi.angle_translator_lib_hlsl_sources, ".", "src")
    defines += [ "ANGLE_ENABLE_HLSL" ]
  }
  configs -= angle_undefine_configs
  configs += [
    ":internal_config",
    ":translator_static_config",
    "//build/config/compiler:no_chromium_code",
  ]
  public_configs = [ ":external_config" ]

  deps = [
    ":includes",
    ":preprocessor",
  ]

  public_deps = [
    ":angle_common",
  ]
}

static_library("translator_static") {
  sources = [
    "src/compiler/translator/ShaderLang.cpp",
    "src/compiler/translator/ShaderVars.cpp",
  ]

  if (angle_enable_hlsl) {
    defines = [ "ANGLE_ENABLE_HLSL" ]
  }

  configs -= angle_undefine_configs
  configs += [
    ":internal_config",
    "//build/config/compiler:no_chromium_code",
  ]
  public_configs = [ ":translator_static_config" ]

  public_deps = [
    ":translator_lib",
  ]
}

config("commit_id_config") {
  include_dirs = [ "$root_gen_dir/angle" ]
}

commit_id_output_file = "$root_gen_dir/angle/id/commit.h"
if (angle_use_commit_id) {
  action("commit_id") {
    script = "src/commit_id.py"
    outputs = [
      commit_id_output_file,
    ]

    args = [
      "gen",
      rebase_path(".", root_build_dir),
      rebase_path(commit_id_output_file, root_build_dir),
    ]

    public_configs = [ ":commit_id_config" ]
  }
} else {
  copy("commit_id") {
    sources = [
      "src/commit.h",
    ]
    outputs = [
      commit_id_output_file,
    ]
    public_configs = [ ":commit_id_config" ]
  }
}

config("libANGLE_config") {
  cflags = []
  defines = []
  if (angle_enable_d3d9) {
    defines += [ "ANGLE_ENABLE_D3D9" ]
  }
  if (angle_enable_d3d11) {
    defines += [ "ANGLE_ENABLE_D3D11" ]
  }
  if (angle_enable_gl) {
    defines += [ "ANGLE_ENABLE_OPENGL" ]
    if (use_x11) {
      defines += [ "ANGLE_USE_X11" ]
    }
  }
  if (angle_enable_vulkan) {
    defines += [ "ANGLE_ENABLE_VULKAN" ]
  }
  defines += [
    "GL_GLEXT_PROTOTYPES",
    "EGL_EGLEXT_PROTOTYPES",
  ]

  if (is_win) {
    defines += [
      "GL_APICALL=",
      "EGLAPI=",
    ]
  } else {
    defines += [
      "GL_APICALL=__attribute__((visibility(\"default\")))",
      "EGLAPI=__attribute__((visibility(\"default\")))",
    ]
  }
  if (is_win) {
    cflags += [ "/wd4530" ]  # C++ exception handler used, but unwind semantics are not enabled.
  }
}

static_library("libANGLE") {
  sources = rebase_path(gles_gypi.libangle_sources, ".", "src")

  include_dirs = []
  libs = []
  defines = [ "LIBANGLE_IMPLEMENTATION" ]
  public_deps = [
    ":angle_common",
  ]
  deps = [
    ":commit_id",
    ":includes",
    ":translator_static",
  ]

  # Shared D3D sources.
  if (angle_enable_d3d9 || angle_enable_d3d11) {
    sources += rebase_path(gles_gypi.libangle_d3d_shared_sources, ".", "src")

    defines += [ "ANGLE_PRELOADED_D3DCOMPILER_MODULE_NAMES={ " + "\"d3dcompiler_47.dll\", \"d3dcompiler_46.dll\", \"d3dcompiler_43.dll\" }" ]
  }

  if (angle_enable_d3d9) {
    sources += rebase_path(gles_gypi.libangle_d3d9_sources, ".", "src")
    libs += [ "d3d9.lib" ]
  }

  if (angle_enable_d3d11) {
    sources += rebase_path(gles_gypi.libangle_d3d11_sources, ".", "src")
    sources += rebase_path(gles_gypi.libangle_d3d11_win32_sources, ".", "src")
    libs += [ "dxguid.lib" ]
  }

  if (angle_enable_gl) {
    sources += rebase_path(gles_gypi.libangle_gl_sources, ".", "src")
    include_dirs += [ "src/third_party/khronos" ]

    if (is_win) {
      sources += rebase_path(gles_gypi.libangle_gl_wgl_sources, ".", "src")
    }
    if (use_x11) {
      sources += rebase_path(gles_gypi.libangle_gl_glx_sources, ".", "src")
      deps += [ "src/third_party/libXNVCtrl:libXNVCtrl" ]
      libs += [
        "X11",
        "Xi",
        "Xext",
      ]
    }
    if (is_mac) {
      sources += rebase_path(gles_gypi.libangle_gl_cgl_sources, ".", "src")
      libs += [
        "Cocoa.framework",
        "IOSurface.framework",
        "OpenGL.framework",
        "QuartzCore.framework",
      ]
    }
  }

  if (angle_enable_vulkan) {
    sources += rebase_path(gles_gypi.libangle_vulkan_sources, ".", "src")
  }

  if (is_debug) {
    defines += [ "ANGLE_GENERATE_SHADER_DEBUG_INFO" ]
  }

  configs -= angle_undefine_configs
  configs += [
    ":commit_id_config",
    ":debug_annotations_config",
    ":libANGLE_config",
    ":internal_config",
    "//build/config/compiler:no_chromium_code",
  ]

  if (is_win) {
    data_deps = [
      ":copy_compiler_dll",
    ]
  }
}

shared_library("libGLESv2") {
  sources = rebase_path(gles_gypi.libglesv2_sources, ".", "src")

  if (is_win) {
    ldflags =
        [ "/DEF:" + rebase_path("src/libGLESv2/libGLESv2.def", root_build_dir) ]
  }

  configs -= angle_undefine_configs
  configs += [
    ":internal_config",
    ":commit_id_config",
    ":debug_annotations_config",
    ":libANGLE_config",
    "//build/config/compiler:no_chromium_code",
  ]

  defines = [ "LIBGLESV2_IMPLEMENTATION" ]

  deps = [
    ":includes",
    ":libANGLE",
  ]
}

shared_library("libEGL") {
  sources = rebase_path(gles_gypi.libegl_sources, ".", "src")

  if (is_win) {
    ldflags = [ "/DEF:" + rebase_path("src/libEGL/libEGL.def", root_build_dir) ]
  }

  configs -= angle_undefine_configs
  configs += [
    ":internal_config",
    ":commit_id_config",
    ":debug_annotations_config",
    ":libANGLE_config",
    "//build/config/compiler:no_chromium_code",
  ]

  defines = [ "LIBEGL_IMPLEMENTATION" ]

  deps = [
    ":includes",
    ":libGLESv2",
  ]
}

util_gypi = exec_script("//build/gypi_to_gn.py",
                        [ rebase_path("util/util.gyp") ],
                        "scope",
                        [ "util/util.gyp" ])

config("angle_util_config") {
  include_dirs = [ "util" ]
  if (is_linux) {
    libs = [ "X11" ]
  }
}

static_library("angle_util") {
  sources = rebase_path(util_gypi.util_sources, ".", "util")

  if (is_win) {
    sources += rebase_path(util_gypi.util_win32_sources, ".", "util")
  }

  if (is_linux) {
    sources += rebase_path(util_gypi.util_linux_sources, ".", "util")
    libs = [
      "rt",
      "dl",
    ]
  }

  if (is_mac) {
    sources += rebase_path(util_gypi.util_osx_sources, ".", "util")
  }

  if (use_x11) {
    sources += rebase_path(util_gypi.util_x11_sources, ".", "util")
  }

  defines = [
    "GL_GLEXT_PROTOTYPES",
    "EGL_EGLEXT_PROTOTYPES",
  ]

  configs += [ ":debug_annotations_config" ]

  public_configs = [
    ":angle_util_config",
    ":internal_config",
  ]

  deps = [
    ":angle_common",
    ":libEGL",
    ":libGLESv2",
  ]
}
