# 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.

source_set("thunk") {
  # In GYP this is the same target as shared_impl. In GN these are split apart
  # for clarity but to get component builds correct, targets must only depend
  # on these via the shared_impl component.
  # TODO(brettw) separate these when GYP compat is no longer required.
  visibility = [ "//ppapi/shared_impl" ]

  sources = [
    "enter.cc",
    "enter.h",
    "interfaces_legacy.h",
    "interfaces_postamble.h",
    "interfaces_ppb_private.h",
    "interfaces_ppb_private_flash.h",
    "interfaces_ppb_private_no_permissions.h",
    "interfaces_ppb_public_dev.h",
    "interfaces_ppb_public_dev_channel.h",
    "interfaces_ppb_public_socket.h",
    "interfaces_ppb_public_stable.h",
    "interfaces_preamble.h",
    "ppapi_thunk_export.h",
    "ppb_audio_api.h",
    "ppb_audio_buffer_api.h",
    "ppb_audio_buffer_thunk.cc",
    "ppb_audio_config_api.h",
    "ppb_audio_config_thunk.cc",
    "ppb_audio_encoder_api.h",
    "ppb_audio_encoder_thunk.cc",
    "ppb_audio_input_api.h",
    "ppb_audio_output_api.h",
    "ppb_audio_thunk.cc",
    "ppb_broker_api.h",
    "ppb_browser_font_singleton_api.h",
    "ppb_browser_font_trusted_api.h",
    "ppb_buffer_api.h",
    "ppb_camera_capabilities_api.h",
    "ppb_camera_capabilities_private_thunk.cc",
    "ppb_camera_device_api.h",
    "ppb_camera_device_private_thunk.cc",
    "ppb_console_thunk.cc",
    "ppb_cursor_control_thunk.cc",
    "ppb_device_ref_api.h",
    "ppb_device_ref_dev_thunk.cc",
    "ppb_ext_crx_file_system_private_thunk.cc",
    "ppb_file_chooser_api.h",
    "ppb_file_chooser_dev_thunk.cc",
    "ppb_file_chooser_trusted_thunk.cc",
    "ppb_file_io_api.h",
    "ppb_file_io_private_thunk.cc",
    "ppb_file_io_thunk.cc",
    "ppb_file_ref_api.h",
    "ppb_file_ref_thunk.cc",
    "ppb_file_system_api.h",
    "ppb_file_system_thunk.cc",
    "ppb_find_private_thunk.cc",
    "ppb_flash_clipboard_api.h",
    "ppb_flash_drm_api.h",
    "ppb_flash_file_api.h",
    "ppb_flash_font_file_api.h",
    "ppb_flash_fullscreen_api.h",
    "ppb_flash_functions_api.h",
    "ppb_flash_menu_api.h",
    "ppb_flash_message_loop_api.h",
    "ppb_flash_print_thunk.cc",
    "ppb_fullscreen_thunk.cc",
    "ppb_gamepad_api.h",
    "ppb_gamepad_thunk.cc",
    "ppb_graphics_2d_api.h",
    "ppb_graphics_2d_thunk.cc",
    "ppb_graphics_3d_api.h",
    "ppb_graphics_3d_thunk.cc",
    "ppb_host_resolver_api.h",
    "ppb_host_resolver_private_api.h",
    "ppb_host_resolver_private_thunk.cc",
    "ppb_host_resolver_thunk.cc",
    "ppb_image_data_api.h",
    "ppb_image_data_thunk.cc",
    "ppb_input_event_api.h",
    "ppb_input_event_thunk.cc",
    "ppb_instance_api.h",
    "ppb_instance_private_thunk.cc",
    "ppb_instance_thunk.cc",
    "ppb_isolated_file_system_private_api.h",
    "ppb_isolated_file_system_private_thunk.cc",
    "ppb_media_stream_audio_track_api.h",
    "ppb_media_stream_audio_track_thunk.cc",
    "ppb_media_stream_video_track_api.h",
    "ppb_media_stream_video_track_thunk.cc",
    "ppb_message_loop_api.h",
    "ppb_messaging_thunk.cc",
    "ppb_mouse_cursor_thunk.cc",
    "ppb_mouse_lock_thunk.cc",
    "ppb_net_address_api.h",
    "ppb_net_address_thunk.cc",
    "ppb_network_list_api.h",
    "ppb_network_list_thunk.cc",
    "ppb_network_monitor_api.h",
    "ppb_network_monitor_thunk.cc",
    "ppb_network_proxy_api.h",
    "ppb_network_proxy_thunk.cc",
    "ppb_pdf_api.h",
    "ppb_printing_api.h",
    "ppb_printing_dev_thunk.cc",
    "ppb_tcp_server_socket_private_api.h",
    "ppb_tcp_server_socket_private_thunk.cc",
    "ppb_tcp_socket_api.h",
    "ppb_tcp_socket_private_api.h",
    "ppb_tcp_socket_private_thunk.cc",
    "ppb_tcp_socket_thunk.cc",
    "ppb_text_input_thunk.cc",
    "ppb_truetype_font_api.h",
    "ppb_truetype_font_dev_thunk.cc",
    "ppb_truetype_font_singleton_api.h",
    "ppb_udp_socket_api.h",
    "ppb_udp_socket_private_api.h",
    "ppb_udp_socket_private_thunk.cc",
    "ppb_udp_socket_thunk.cc",
    "ppb_uma_private_thunk.cc",
    "ppb_uma_singleton_api.h",
    "ppb_url_loader_api.h",
    "ppb_url_loader_thunk.cc",
    "ppb_url_loader_trusted_thunk.cc",
    "ppb_url_request_info_api.h",
    "ppb_url_request_info_thunk.cc",
    "ppb_url_response_info_api.h",
    "ppb_url_response_info_thunk.cc",
    "ppb_var_array_thunk.cc",
    "ppb_var_dictionary_thunk.cc",
    "ppb_video_capture_api.h",
    "ppb_video_decoder_api.h",
    "ppb_video_decoder_dev_api.h",
    "ppb_video_decoder_thunk.cc",
    "ppb_video_encoder_api.h",
    "ppb_video_encoder_thunk.cc",
    "ppb_video_frame_api.h",
    "ppb_video_frame_thunk.cc",
    "ppb_view_api.h",
    "ppb_view_dev_thunk.cc",
    "ppb_view_thunk.cc",
    "ppb_vpn_provider_api.h",
    "ppb_vpn_provider_thunk.cc",
    "ppb_websocket_api.h",
    "ppb_websocket_thunk.cc",
    "ppb_x509_certificate_private_api.h",
    "ppb_x509_certificate_private_thunk.cc",
    "resource_creation_api.h",
    "thunk.h",
  ]

  if (!is_nacl) {
    sources += [
      "ppb_audio_input_dev_thunk.cc",
      "ppb_audio_output_dev_thunk.cc",
      "ppb_broker_thunk.cc",
      "ppb_browser_font_trusted_thunk.cc",
      "ppb_buffer_thunk.cc",
      "ppb_char_set_thunk.cc",
      "ppb_flash_clipboard_thunk.cc",
      "ppb_flash_drm_thunk.cc",
      "ppb_flash_file_fileref_thunk.cc",
      "ppb_flash_file_modulelocal_thunk.cc",
      "ppb_flash_font_file_thunk.cc",
      "ppb_flash_fullscreen_thunk.cc",
      "ppb_flash_menu_thunk.cc",
      "ppb_flash_message_loop_thunk.cc",
      "ppb_flash_thunk.cc",
      "ppb_gles_chromium_texture_mapping_thunk.cc",
      "ppb_pdf_thunk.cc",
      "ppb_url_util_thunk.cc",
      "ppb_video_capture_thunk.cc",
      "ppb_video_decoder_dev_thunk.cc",
    ]
  }

  # This condition is catching the build of nacl64.exe, which is built in
  # the 64-bit toolchain when the overall build is 32-bit.  We exclude a
  # few more things, to avoid pulling in more dependencies.
  # See also //ppapi/shared_impl
  if (is_win && target_cpu == "x86" && current_cpu == "x64") {
    sources -= [
      "ppb_graphics_3d_thunk.cc",
      "ppb_host_resolver_private_thunk.cc",
      "ppb_tcp_server_socket_private_thunk.cc",
      "ppb_tcp_socket_private_thunk.cc",
      "ppb_udp_socket_private_thunk.cc",
      "ppb_x509_certificate_private_thunk.cc",
    ]
  }

  configs += [ "//build/config:precompiled_headers" ]
  defines = [
    # This target goes in the same library as shared_impl (in GYP they are the
    # same).
    "PPAPI_SHARED_IMPLEMENTATION",

    "PPAPI_THUNK_IMPLEMENTATION",
  ]

  public_deps = [
    "//base",
  ]
}
