# Copyright 2019 The ANGLE Project 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("gni/angle.gni")
if (angle_has_build) {
  import("//build/config/linux/pkg_config.gni")
  import("//build/config/ui.gni")
  import("//testing/libfuzzer/fuzzer_test.gni")

  if (is_android) {
    # android/rules.gni can only be imported for Android targets
    import("//build/config/android/config.gni")
    import("//build/config/android/rules.gni")
    import("android/angle_apk.gni")
  }
}

declare_args() {
  # Use the PCI lib to collect GPU information on Linux.
  use_libpci = is_linux && (!is_chromecast || is_cast_desktop_build) &&
               (angle_use_x11 || use_ozone)

  # Link in system libGL, to work with apitrace.  See doc/DebuggingTips.md.
  angle_link_glx = false

  # Defaults to capture building to $root_out_dir/angle_libs/with_capture.
  # Switch on to build capture to $root_out_dir.
  angle_with_capture_by_default = false

  # Don't build extra (test, samples etc) for Windows UWP. We don't have
  # infrastructure (e.g. windowing helper functions) in place to run them.
  angle_build_all = !angle_is_winuwp && angle_has_build
}

if (!build_with_chromium && angle_build_all) {
  group("all") {
    testonly = true
    deps = [
      ":angle_shader_translator",
      ":translator_fuzzer",
      ":xxhash_fuzzer",
      "//samples:all",
      "//src/tests:all",
    ]
  }
}

if (ozone_platform_gbm) {
  pkg_config("libdrm") {
    packages = [ "libdrm" ]
  }
}

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

import("src/compiler.gni")
import("src/libGLESv2.gni")

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

# Prevent the GL headers from redeclaring ANGLE entry points.
config("no_gl_prototypes") {
  defines = [
    "GL_GLES_PROTOTYPES=0",
    "EGL_EGL_PROTOTYPES=0",
  ]
}

config("gl_prototypes") {
  defines = [
    "GL_GLES_PROTOTYPES=1",
    "EGL_EGL_PROTOTYPES=1",
    "GL_GLEXT_PROTOTYPES",
    "EGL_EGLEXT_PROTOTYPES",
  ]
}

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

  defines = []

  if (angle_64bit_current_cpu) {
    defines += [ "ANGLE_IS_64_BIT_CPU" ]
  } else {
    defines += [ "ANGLE_IS_32_BIT_CPU" ]
  }

  if (angle_enable_trace) {
    defines += [ "ANGLE_ENABLE_DEBUG_TRACE=1" ]
  }

  if (is_chromeos) {
    defines += [ "ANGLE_PLATFORM_CHROMEOS" ]
  }
}

config("constructor_and_destructor_warnings") {
  if (is_clang) {
    cflags = [
      "-Wexit-time-destructors",
      "-Wglobal-constructors",
    ]
  }
}

config("extra_warnings") {
  cflags = []

  # Enable more default warnings on Windows.
  if (is_win) {
    cflags += [
      "/we4244",  # Conversion: possible loss of data.
      "/we4456",  # Variable shadowing.
      "/we4458",  # declaration hides class member.
      "/we4715",  # not all control paths return a value
      "/we4800",  # forcing value to bool.
      "/we4838",  # narrowing conversion.
    ]
  }
  if (is_clang) {
    cflags += [
      "-Wconditional-uninitialized",
      "-Wextra-semi-stmt",
      "-Wfloat-conversion",
      "-Winconsistent-missing-destructor-override",
      "-Wmissing-field-initializers",
      "-Wnon-virtual-dtor",
      "-Wredundant-parens",
      "-Wshadow-field",
      "-Wtautological-type-limit-compare",
      "-Wundefined-reinterpret-cast",
      "-Wunneeded-internal-declaration",

      # The below warnings are used by WebKit. We enable them to make rolling
      # ANGLE in WebKit easier.
      "-Wparentheses",
      "-Wrange-loop-analysis",
      "-Wstrict-prototypes",
      "-Wunreachable-code",
      "-Wshorten-64-to-32",
    ]
  }

  if (angle_is_winuwp) {
    cflags += [ "/wd4447" ]  # 'main' signature found without threading model.
  }
}

# This config adds build-ids to the associated library.
# -Wl is a special option that indicates that clang should pass the associated
# option --build-id to the linker. This will cause a build-id section to be added
# to the associated library. The build-id makes it possible for a debugger to
# find the right symbol file to use.
config("build_id_config") {
  ldflags = [ "-Wl,--build-id" ]
}

# Useful for more informative stack traces.
config("better_linux_stack_traces") {
  if (angle_better_stack_traces) {
    ldflags = [ "-Wl,--export-dynamic" ]
  }
}

_use_copy_compiler_dll = angle_has_build && is_win && target_cpu != "arm64"

# Windows ARM64 is available since 10.0.16299 so no need to copy
# d3dcompiler_47.dll because this file is available as inbox.
if (_use_copy_compiler_dll) {
  # We also ship an older DLL for compatiblity with Windows 7 machines without
  # the UCRT. This DLL isn't available in the standard SDK distribution.
  _old_compiler = "$windows_sdk_path/Redist/D3D/$target_cpu/d3dcompiler_old.dll"
  _has_old_compiler =
      exec_script("scripts/file_exists.py", [ _old_compiler ], "value")

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

    if (_has_old_compiler) {
      sources += [ _old_compiler ]
    }

    outputs = [
      "$root_out_dir/{{source_file_part}}",
    ]
  }
}

# Holds the shared includes so we only need to list them once.
config("includes_config") {
  include_dirs = [ "include" ]
}

angle_source_set("includes") {
  sources = libangle_includes
  public_configs = [ ":includes_config" ]
}

angle_static_library("preprocessor") {
  sources = angle_preprocessor_sources

  public_deps = [
    ":angle_common",
    ":angle_translator_headers",
  ]
}

config("angle_disable_pool_alloc") {
  defines = [ "ANGLE_DISABLE_POOL_ALLOC" ]
}

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/base" ]
  if (is_android) {
    libs = [ "log" ]
  }
}

if (is_win && !angle_is_winuwp) {
  angle_source_set("angle_stack_walker") {
    sources = [
      "util/windows/third_party/StackWalker/src/StackWalker.cpp",
      "util/windows/third_party/StackWalker/src/StackWalker.h",
    ]

    if (is_clang) {
      cflags_cc = [
        "-Wno-c++98-compat-extra-semi",
        "-Wno-missing-declarations",
        "-Wno-switch",
      ]
    } else {
      cflags_cc = [ "/wd4740" ]
    }
  }
}

angle_source_set("angle_system_utils") {
  sources = angle_system_utils_sources
}

angle_source_set("xxhash") {
  sources = xxhash_sources
}

if (angle_has_build) {
  fuzzer_test("xxhash_fuzzer") {
    sources = [
      "src/common/third_party/xxhash/xxhash_fuzzer.cpp",
    ]
    deps = [
      ":xxhash",
    ]
  }
}

angle_static_library("angle_common") {
  sources = libangle_common_sources

  configs += [
    ":angle_common_config",
    ":debug_annotations_config",
  ]

  deps = [
    ":xxhash",
  ]

  public_deps = [
    ":angle_system_utils",
    ":angle_version",
    ":includes",
  ]
  public_configs += [ ":angle_common_config" ]
  if (angle_has_build && use_fuzzing_engine) {
    all_dependent_configs = [ ":angle_disable_pool_alloc" ]
  }
}

config("angle_image_util_config") {
  include_dirs = [
    "include",
    "src",
  ]
}

angle_source_set("angle_image_util_headers") {
  sources = libangle_image_util_headers
  public_deps = [
    ":angle_common",
  ]
}

angle_static_library("angle_image_util") {
  sources = libangle_image_util_sources
  public_configs += [ ":angle_image_util_config" ]
  public_deps = [
    ":angle_image_util_headers",
  ]
}

config("angle_gl_visibility_config") {
  if (is_win) {
    defines = [
      "GL_APICALL=",
      "GL_API=",
    ]
  } else {
    defines = [
      "GL_APICALL=__attribute__((visibility(\"default\")))",
      "GL_API=__attribute__((visibility(\"default\")))",
    ]
  }
}

config("angle_gpu_info_util_config") {
  include_dirs = [
    "include",
    "src",
  ]
}

angle_static_library("angle_gpu_info_util") {
  public_configs += [
    ":angle_gpu_info_util_config",
    ":angle_backend_config",
  ]
  public_deps = [
    ":angle_common",
  ]
  sources = libangle_gpu_info_util_sources
  deps = []
  libs = []
  defines = []

  if (is_android) {
    sources += [ "src/gpu_info_util/SystemInfo_android.cpp" ]
  }

  if (is_win) {
    sources += libangle_gpu_info_util_win_sources
    if (!angle_is_winuwp) {
      libs += [ "setupapi.lib" ]
    }
    libs += [ "dxgi.lib" ]
  }

  if (is_linux || is_fuchsia) {
    sources += libangle_gpu_info_util_linux_sources

    if (angle_use_x11) {
      sources += libangle_gpu_info_util_x11_sources
      deps += [ "src/third_party/libXNVCtrl:libXNVCtrl" ]
      defines += [ "GPU_INFO_USE_X11" ]
      libs += [
        "X11",
        "Xi",
        "Xext",
      ]
    }
  }

  if (use_libpci) {
    sources += libangle_gpu_info_util_libpci_sources
    defines += [ "GPU_INFO_USE_LIBPCI" ]
    libs += [ "pci" ]
  }

  if (is_mac) {
    sources += libangle_gpu_info_util_mac_sources
    libs += [
      "IOKit.framework",
      "CoreFoundation.framework",
      "CoreGraphics.framework",
      "OpenGL.framework",
    ]
  }
}

angle_source_set("angle_translator_headers") {
  sources = angle_translator_exported_headers
  public_deps = [
    ":includes",
  ]
}

angle_static_library("translator") {
  sources = angle_translator_sources
  defines = []

  if (angle_enable_essl || use_fuzzing_engine) {
    sources += angle_translator_essl_sources
    defines += [ "ANGLE_ENABLE_ESSL" ]
  }

  if (angle_enable_glsl || use_fuzzing_engine) {
    sources += angle_translator_glsl_sources
    defines += [ "ANGLE_ENABLE_GLSL" ]
  }

  if (angle_enable_hlsl || use_fuzzing_engine) {
    sources += angle_translator_hlsl_sources
    defines += [ "ANGLE_ENABLE_HLSL" ]
  }

  if (angle_enable_vulkan || use_fuzzing_engine || angle_enable_metal) {
    # This translator is needed by metal backend also.
    sources += angle_translator_lib_vulkan_sources
  }

  if (angle_enable_vulkan || use_fuzzing_engine) {
    defines += [ "ANGLE_ENABLE_VULKAN" ]
  }

  if (angle_enable_metal) {
    sources += angle_translator_lib_metal_sources
    defines += [ "ANGLE_ENABLE_METAL" ]
  }

  public_configs += [ ":external_config" ]

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

  public_deps = [
    ":angle_common",
    ":angle_translator_headers",
  ]

  if (is_win) {
    # Necessary to suppress some system header xtree warnigns in Release.
    # For some reason this warning doesn't get triggered in Chromium
    cflags = [ "/wd4718" ]
  }
}

angle_source_set("translator_fuzzer") {
  sources = [
    "src/compiler/fuzz/translator_fuzzer.cpp",
  ]

  include_dirs = [
    "include",
    "src",
  ]

  deps = [
    ":translator",
  ]
}

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

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

    # commit id should depend on angle's HEAD revision
    inputs = [
      ".git/HEAD",
    ]

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

angle_source_set("angle_version") {
  sources = [
    "src/common/version.h",
  ]
  public_deps = [
    ":commit_id",
  ]
}

config("angle_backend_config") {
  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 (angle_enable_gl_null) {
      defines += [ "ANGLE_ENABLE_OPENGL_NULL" ]
    }
  }
  if (angle_enable_null) {
    defines += [ "ANGLE_ENABLE_NULL" ]
  }

  if (angle_enable_metal) {
    configs = [ "src/libANGLE/renderer/metal:angle_metal_backend_config" ]
  }

  if (angle_enable_vulkan) {
    configs = [ "src/libANGLE/renderer/vulkan:angle_vulkan_backend_config" ]
  }
}

config("libANGLE_config") {
  cflags = []
  defines = []
  libs = []
  ldflags = []
  if (angle_enable_d3d9) {
    ldflags += [ "/DELAYLOAD:d3d9.dll" ]
  }
  defines += [ "LIBANGLE_IMPLEMENTATION" ]

  if (is_win) {
    cflags += [ "/wd4530" ]  # C++ exception handler used, but unwind semantics are not enabled.
  }

  if (is_android && (angle_enable_gl || angle_enable_vulkan)) {
    # In API level 26 ANativeWindow APIs were moved from libandroid.so
    # into a separate library, libnativewindow.so
    if (ndk_api_level_at_least_26) {
      libs += [ "nativewindow" ]
    } else {
      libs += [ "android" ]
    }
  }

  if (angle_use_x11) {
    defines += [ "ANGLE_USE_X11" ]
  }
}

angle_source_set("libANGLE_headers") {
  sources = libangle_headers
  public_deps = [
    ":angle_common",
    ":angle_translator_headers",
  ]
}

# Don't even try to build glslang if Metal and Vulkan are disabled.
if (angle_enable_vulkan || angle_enable_metal) {
  angle_source_set("angle_glslang_wrapper") {
    sources = [
      "src/libANGLE/renderer/glslang_wrapper_utils.cpp",
      "src/libANGLE/renderer/glslang_wrapper_utils.h",
    ]
    deps = [
      ":libANGLE_headers",
      "${angle_glslang_dir}:glslang_default_resource_limits_sources",
      "${angle_glslang_dir}:glslang_sources",
    ]
  }
}

angle_source_set("libANGLE_base") {
  sources = libangle_sources

  include_dirs = []
  libs = []
  defines = []
  if (angle_link_glx) {
    libs += [ "GL" ]
    defines += [ "ANGLE_LINK_GLX" ]
  }
  public_deps = [
    ":angle_common",
    ":angle_gpu_info_util",
    ":angle_version",
    ":libANGLE_headers",
    ":translator",
  ]
  deps = [
    ":angle_image_util",
    ":includes",
  ]

  if (is_win) {
    libs += [
      "delayimp.lib",
      "gdi32.lib",
      "user32.lib",
    ]
  }

  if (angle_enable_vulkan) {
    public_deps += [ "src/libANGLE/renderer/vulkan:angle_vulkan_backend" ]
  }

  if (angle_enable_metal) {
    public_deps += [ "src/libANGLE/renderer/metal:angle_metal_backend" ]
  }

  # Enable extra Chromium style warnings for libANGLE.
  if (is_clang && angle_has_build) {
    suppressed_configs -= [ "//build/config/clang:find_bad_constructs" ]
  }

  # Shared D3D sources.
  if (angle_enable_d3d9 || angle_enable_d3d11) {
    sources += libangle_d3d_shared_sources

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

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

  if (angle_enable_d3d11) {
    sources += libangle_d3d11_sources

    if (angle_is_winuwp) {
      sources += libangle_d3d11_winuwp_sources
    } else {
      sources += libangle_d3d11_win32_sources
    }

    libs += [ "dxguid.lib" ]
    import("src/libANGLE/renderer/d3d/d3d11/d3d11_blit_shaders_autogen.gni")
    sources += libangle_d3d11_blit_shaders
  }

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

    if (angle_enable_gl_null) {
      sources += libangle_gl_null_sources
    }
    if (is_win) {
      sources += libangle_gl_wgl_sources
    }
    if (angle_use_x11) {
      sources += libangle_gl_glx_sources
      deps += [ "src/third_party/libXNVCtrl:libXNVCtrl" ]
      libs += [
        "X11",
        "Xi",
        "Xext",
      ]
    }
    if (is_mac) {
      sources += libangle_gl_cgl_sources
      libs += [
        "Cocoa.framework",
        "IOSurface.framework",
        "OpenGL.framework",
        "QuartzCore.framework",
      ]
    }
    if (is_android) {
      sources += libangle_gl_egl_sources
      sources += libangle_gl_egl_dl_sources
      sources += libangle_gl_egl_android_sources
    }
    if (ozone_platform_gbm) {
      configs += [ ":libdrm" ]
      defines += [ "ANGLE_USE_OZONE" ]
      deps += [ "//third_party/minigbm" ]
      sources += libangle_gl_egl_sources
      sources += libangle_gl_egl_dl_sources
      sources += libangle_gl_ozone_sources
    }
  }

  if (angle_enable_null) {
    sources += libangle_null_sources
  }

  if (is_mac) {
    sources += libangle_mac_sources
  }

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

  if (angle_enable_overlay) {
    defines += [ "ANGLE_ENABLE_OVERLAY=1" ]
  }

  configs += [ ":debug_annotations_config" ]
  public_configs += [
    ":libANGLE_config",
    ":angle_backend_config",
  ]

  # Windows ARM64 is available since 10.0.16299 so no need to copy
  # d3dcompiler_47.dll because this file is available as inbox.
  if (_use_copy_compiler_dll) {
    data_deps = [
      ":copy_compiler_dll",
    ]
  }
}

config("angle_frame_capture_disabled") {
  defines = [ "ANGLE_CAPTURE_ENABLED=0" ]
}

config("angle_frame_capture_enabled") {
  defines = [ "ANGLE_CAPTURE_ENABLED=1" ]
}

angle_source_set("libANGLE") {
  public_deps = [
    ":libANGLE_base",
  ]
  public_configs = [ ":angle_frame_capture_disabled" ]
  sources = [
    "src/libANGLE/FrameCapture_mock.cpp",
  ]

  # gl_enum_utils defaults included in with_capture build
  if (angle_enable_trace || is_debug) {
    sources += [
      "src/libANGLE/gl_enum_utils.cpp",
      "src/libANGLE/gl_enum_utils_autogen.cpp",
    ]
  }
}

angle_source_set("libANGLE_with_capture") {
  public_deps = [
    ":libANGLE_base",
  ]
  public_configs = [ ":angle_frame_capture_enabled" ]
  sources = libangle_capture_sources
}

config("shared_library_public_config") {
  if (is_mac && !is_component_build) {
    # Executable targets that depend on the shared libraries below need to have
    # the rpath setup in non-component build configurations.
    ldflags = [
      "-rpath",
      "@executable_path/",
    ]
  }
}

config("library_name_config") {
  defines = [
    "ANGLE_EGL_LIBRARY_NAME=\"libEGL${angle_libs_suffix}\"",
    "ANGLE_GLESV2_LIBRARY_NAME=\"libGLESv2${angle_libs_suffix}\"",
  ]
}

# This config controls export definitions on ANGLE API calls.
config("angle_static") {
  defines = [
    "ANGLE_EXPORT=",
    "ANGLE_UTIL_EXPORT=",
    "EGLAPI=",
    "GL_APICALL=",
    "GL_API=",
  ]
}

set_defaults("angle_libGLESv2") {
  sources = []
  output_name = "libGLESv2"
}

template("angle_libGLESv2") {
  angle_shared_library(target_name) {
    sources = libglesv2_sources + invoker.sources

    if (is_win) {
      sources += [ "src/libGLESv2/${invoker.output_name}_autogen.def" ]
    }

    output_name = "${invoker.output_name}${angle_libs_suffix}"

    configs += [
      ":angle_gl_visibility_config",
      ":debug_annotations_config",
      ":gl_prototypes",
    ]

    defines = [ "LIBGLESV2_IMPLEMENTATION" ]

    deps = invoker.deps + [ ":includes" ]

    public_deps = [
      ":angle_version",
    ]
  }
}

angle_libGLESv2("libGLESv2") {
  if (angle_with_capture_by_default) {
    deps = [
      ":libANGLE_with_capture",
    ]
  } else {
    deps = [
      ":libANGLE",
    ]
  }
}

# Output capture lib when `angle_with_capture_by_default` disabled, vice versa.
angle_libGLESv2("libGLESv2_capture_complement") {
  if (angle_with_capture_by_default) {
    deps = [
      ":libANGLE",
    ]
    output_name += "_no_capture"
  } else {
    deps = [
      ":libANGLE_with_capture",
    ]
    output_name += "_with_capture"
  }
}

if (is_win && !angle_is_winuwp) {
  angle_shared_library("libGL") {
    sources = libgl_sources

    output_name = "openGL32"
    output_dir = "$root_out_dir/angle_libs"

    configs += [
      ":angle_gl_visibility_config",
      ":debug_annotations_config",
      ":gl_prototypes",
    ]

    defines = [
      "ANGLE_CAPTURE_ENABLED=0",
      "LIBGL_IMPLEMENTATION",
    ]

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

    public_deps = [
      ":angle_version",
    ]
  }
}

angle_static_library("libGLESv2_static") {
  sources = libglesv2_sources
  configs += [ ":debug_annotations_config" ]
  public_configs += [ ":angle_static" ]
  deps = [
    ":includes",
  ]
  public_deps = [
    ":libANGLE",
  ]
}

angle_shared_library("libGLESv1_CM") {
  sources = libglesv1_cm_sources
  output_name = "libGLESv1_CM${angle_libs_suffix}"

  configs += [
    ":angle_gl_visibility_config",
    ":debug_annotations_config",
    ":gl_prototypes",
  ]

  defines = []

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

angle_static_library("libGLESv1_CM_static") {
  sources = libglesv1_cm_sources
  configs += [ ":debug_annotations_config" ]
  public_configs += [ ":angle_static" ]
  deps = [
    ":includes",
    ":libGLESv2_static",
  ]
}

config("libEGL_egl_loader_config") {
  defines = [ "ANGLE_USE_EGL_LOADER" ]
}

angle_source_set("libEGL_egl_loader") {
  sources = [
    "src/libEGL/egl_loader_autogen.cpp",
    "src/libEGL/egl_loader_autogen.h",
  ]

  public_configs += [
    ":libEGL_egl_loader_config",
    ":gl_prototypes",
  ]

  deps = [
    ":includes",
  ]
}

angle_shared_library("libEGL") {
  sources = libegl_sources
  output_name = "libEGL${angle_libs_suffix}"

  configs += [
    ":debug_annotations_config",
    ":library_name_config",
  ]

  defines = [ "LIBEGL_IMPLEMENTATION" ]
  if (is_win) {
    defines += [ "EGLAPI=" ]
  } else {
    defines += [ "EGLAPI=__attribute__((visibility(\"default\")))" ]
  }

  if (is_win) {
    sources += [ "src/libEGL/libEGL.def" ]
  }

  deps = [
    ":angle_common",
    ":angle_system_utils",
    ":angle_version",
    ":libEGL_egl_loader",
  ]

  public_deps = [
    ":includes",
  ]

  data_deps = [
    ":libGLESv2",
  ]
}

angle_static_library("libEGL_static") {
  sources = libegl_sources

  configs += [
    ":debug_annotations_config",
    ":library_name_config",
  ]

  public_configs += [ ":angle_static" ]

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

import("util/util.gni")

config("angle_util_loader_config") {
  defines = [ "ANGLE_USE_UTIL_LOADER" ]
}

angle_source_set("angle_util_loader_headers") {
  sources = [
    "util/egl_loader_autogen.h",
    "util/gles_loader_autogen.h",
    "util/util_export.h",
  ]

  if (is_win && !angle_is_winuwp) {
    sources += [ "util/windows/wgl_loader_autogen.h" ]
  }

  public_deps = [
    ":includes",
  ]
}

angle_source_set("angle_util_loader") {
  defines = [ "LIBANGLE_UTIL_IMPLEMENTATION" ]

  sources = [
    "util/egl_loader_autogen.cpp",
    "util/gles_loader_autogen.cpp",
  ]

  if (is_win && !angle_is_winuwp) {
    sources += [ "util/windows/wgl_loader_autogen.cpp" ]
  }

  deps = [
    ":angle_util_loader_headers",
  ]

  public_configs += [
    ":angle_util_config",
    ":angle_util_loader_config",
    ":no_gl_prototypes",
  ]
}

config("angle_util_config") {
  include_dirs = [ "." ]
  if (is_linux && angle_use_x11) {
    libs = [ "X11" ]
  }
}

foreach(is_shared_library,
        [
          true,
          false,
        ]) {
  if (is_shared_library) {
    library_type = "angle_shared_library"
    library_name = "angle_util"
    dep_suffix = "${angle_libs_suffix}"
  } else {
    library_type = "angle_static_library"
    library_name = "angle_util_static"
    dep_suffix = "_static"
  }

  target(library_type, library_name) {
    sources = util_sources
    deps = [
      ":angle_common",
      ":angle_util_loader_headers",
    ]
    public_deps = []
    libs = []

    if (is_win && !angle_is_winuwp) {
      sources += util_win_sources
      deps += [ ":angle_stack_walker" ]
    }

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

    if (is_mac) {
      sources += util_osx_sources
      libs += [
        "AppKit.framework",
        "QuartzCore.framework",
      ]
    }

    if (angle_use_x11) {
      sources += util_x11_sources
    }

    if (is_android) {
      # To prevent linux sources filtering on android
      set_sources_assignment_filter([])
      sources += util_android_sources
      libs += [
        "android",
        "log",
      ]
    }

    configs += [ ":debug_annotations_config" ]

    public_configs += [ ":angle_util_config" ]

    if (is_fuchsia) {
      sources += util_fuchsia_sources
      public_deps += [
        "$angle_root/src/common/fuchsia_egl",
        "src/libANGLE/renderer/vulkan:angle_vulkan",
        "//third_party/fuchsia-sdk/sdk:async_loop_cpp",
        "//third_party/fuchsia-sdk/sdk:async_loop_default",
        "//third_party/fuchsia-sdk/sdk:fdio",
        "//third_party/fuchsia-sdk/sdk:images",
        "//third_party/fuchsia-sdk/sdk:scenic_cpp",
        "//third_party/fuchsia-sdk/sdk:ui_policy",
        "//third_party/fuchsia-sdk/sdk:ui_scenic",
        "//third_party/fuchsia-sdk/sdk:ui_views",
      ]
    } else if (use_ozone) {
      sources += util_ozone_sources
    }

    if (is_shared_library) {
      defines = [ "LIBANGLE_UTIL_IMPLEMENTATION" ]

      if (is_win && !angle_is_winuwp) {
        sources += util_win_shared_sources
      }

      public_deps += [ ":angle_util_loader" ]

      if (is_mac && !is_component_build) {
        ldflags = [
          "-install_name",
          "@rpath/libangle_util.dylib",
        ]
      }
    } else {
      public_configs += [
        ":angle_static",
        ":gl_prototypes",
      ]
    }
  }
}

# Convenience targets for some of the samples so they can be built
# with Chromium's toolchain.

angle_executable("angle_shader_translator") {
  testonly = true

  sources = [
    "samples/shader_translator/shader_translator.cpp",
  ]

  deps = [
    ":translator",
  ]
}

if (angle_has_build) {
  config("angle_feature_support_config") {
    include_dirs = [
      "include",
      "src",
    ]
    defines = [ "LIBFEATURE_SUPPORT_IMPLEMENTATION" ]
    if (is_debug) {
      defines += [ "ANGLE_FEATURE_UTIL_LOG_VERBOSE" ]
    }
  }

  angle_shared_library("libfeature_support") {
    output_name = "libfeature_support${angle_libs_suffix}"

    if (is_android) {
      libs = [ "log" ]
    }

    public_configs += [
      ":angle_feature_support_config",
      "${angle_jsoncpp_dir}:jsoncpp_config",
    ]

    if (is_mac && !is_component_build) {
      ldflags = [
        "-install_name",
        "@rpath/${target_name}.dylib",
      ]
    }

    sources = [
      "src/feature_support_util/feature_support_util.cpp",
      "src/feature_support_util/feature_support_util.h",
    ]

    deps = [
      ":angle_gpu_info_util",
      "${angle_jsoncpp_dir}:jsoncpp",
    ]
  }
}

if (!is_component_build && is_android && symbol_level != 0) {
  action_foreach("compressed_symbols") {
    sources = []
    foreach(_library, angle_libraries) {
      sources += [ "$root_out_dir/${_library}${angle_libs_suffix}.so" ]
    }
    if (angle_enable_vulkan_validation_layers) {
      foreach(_layer, vulkan_validation_layers) {
        sources += [ "$root_out_dir/lib${_layer}.so" ]
      }
    }

    script = rebase_path("${root_build_dir}/android/compress_symbols.py",
                         root_build_dir)

    deps = []
    foreach(_library, angle_libraries) {
      deps += [ ":$_library" ]
    }

    if (angle_enable_vulkan_validation_layers) {
      foreach(_layer, vulkan_validation_layers) {
        deps += [
          "${angle_root}/third_party/vulkan-validation-layers/src:${_layer}",
        ]
      }
    }

    outputs = [
      "$root_out_dir/lib.compressed/{{source_file_part}}",
    ]

    android_nm = "${android_tool_prefix}nm"
    android_strip = "${android_tool_prefix}strip"

    args = [
      "--objcopy",
      rebase_path(android_objcopy, root_build_dir),
      "--nm",
      rebase_path(android_nm, root_build_dir),
      "--strip",
      rebase_path(android_strip, root_build_dir),
      "--unstrippedsofile",
      "{{source_dir}}/lib.unstripped/{{source_file_part}}",
      "--output",
      "{{source_dir}}/lib.compressed/{{source_file_part}}",
    ]
  }
}

if (build_with_chromium && !is_component_build && is_android &&
    current_toolchain == default_toolchain) {
  # Package ANGLE libraries
  angle_apk("angle_chromium_apk") {
    package_name = "com.chromium.angle"
    apk_name = "AngleLibraries"
  }

  group("angle_apks") {
    deps = [
      ":angle_chromium_apk",
    ]
  }
}

# Note: libGLESv1_CM is not presently included because most Chrome users don't care about it.
group("angle") {
  data_deps = [
    ":libGLESv2",
    ":libEGL",
  ]
}
