# Copyright 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("../../mojo_sdk.gni")

config("gpu_configs") {
  include_dirs = [ "." ]
  defines = [ "GLES2_USE_MOJO" ]
}

group("gpu") {
  public_configs = [ ":gpu_configs" ]

  deps = [
    ":MGL",
    ":MGL_signal_sync_point",
    ":GLES2",
    "../../platform/native:gles2",
  ]
  if (!is_nacl) {
    deps += [ "../../platform/native:mgl_thunks" ]
  }
}

group("gpu_onscreen") {
  public_deps = [
    ":MGL_onscreen",
  ]

  deps = [
    ":gpu",
  ]
  if (!is_nacl) {
    deps += [ "../../platform/native:mgl_onscreen_thunks" ]
  }
}

mojo_sdk_source_set("MGL") {
  sources = [
    "MGL/mgl.h",
    "MGL/mgl_types.h",
  ]

  mojo_sdk_public_deps = [ "mojo/public/c/system" ]
}

mojo_sdk_source_set("MGL_onscreen") {
  sources = [
    "MGL/mgl_onscreen.h",
  ]

  public_deps = [
    ":MGL",
  ]
}

mojo_sdk_source_set("MGL_signal_sync_point") {
  sources = [
    "MGL/mgl_signal_sync_point.h",
  ]

  public_deps = [
    ":MGL",
  ]
}

mojo_sdk_source_set("GLES2") {
  sources = [
    "GLES2/gl2.h",
    "GLES2/gl2ext.h",
    "GLES2/gl2extmojo.h",
    "GLES2/gl2mojo_autogen.h",
    "GLES2/gl2mojo_internal.h",
    "GLES2/gl2platform.h",
  ]

  public_deps = [
    ":KHR",
  ]
}

mojo_sdk_source_set("KHR") {
  sources = [
    "KHR/khrplatform.h",
  ]
}
