# 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("//components/nacl/features.gni")
assert(enable_nacl)

assert(is_nacl,
       "These targets must only be built using the untrusted NaCl toolchains.")

import("//build/config/features.gni")

executable("remoting_client_plugin_newlib") {
  sources = [
    "chromoting_instance.cc",
    "chromoting_instance.h",
    "pepper_address_resolver.cc",
    "pepper_address_resolver.h",
    "pepper_audio_player.cc",
    "pepper_audio_player.h",
    "pepper_cursor_setter.cc",
    "pepper_cursor_setter.h",
    "pepper_input_handler.cc",
    "pepper_input_handler.h",
    "pepper_main_thread_task_runner.cc",
    "pepper_main_thread_task_runner.h",
    "pepper_module.cc",
    "pepper_mouse_locker.cc",
    "pepper_mouse_locker.h",
    "pepper_network_manager.cc",
    "pepper_network_manager.h",
    "pepper_packet_socket_factory.cc",
    "pepper_packet_socket_factory.h",
    "pepper_port_allocator_factory.cc",
    "pepper_port_allocator_factory.h",
    "pepper_url_request.cc",
    "pepper_url_request.h",
    "pepper_util.cc",
    "pepper_util.h",
    "pepper_video_renderer.h",
    "pepper_video_renderer_2d.cc",
    "pepper_video_renderer_2d.h",
    "pepper_video_renderer_3d.cc",
    "pepper_video_renderer_3d.h",
  ]

  configs += [ "//build/config/compiler:wexit_time_destructors" ]

  deps = [
    "//net",
    "//ppapi/cpp",
    "//ppapi/native_client:ppapi_lib",
    "//remoting/base",
    "//remoting/client",
    "//remoting/client/audio",
    "//remoting/client/input",
    "//remoting/protocol",
    "//remoting/signaling",
    "//third_party/libyuv",
    "//third_party/webrtc/modules/desktop_capture:primitives",
    "//third_party/webrtc_overrides:metrics",
    "//ui/events:dom_keycode_converter",
  ]

  include_dirs = [ "//ppapi/lib/gl/include" ]
}

if (enable_nacl && is_debug) {
  copy("remoting_client_plugin_newlib_debug") {
    public_deps = [
      ":remoting_client_plugin_newlib",
    ]
    sources = [
      "$root_out_dir/exe.unstripped/remoting_client_plugin_newlib.pexe",
    ]
    outputs = [
      "$root_out_dir/remoting_client_plugin_newlib.pexe.debug",
    ]
  }
}
