# 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",
    "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_input_api.h",
    "ppb_audio_thunk.cc",
    "ppb_broker_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_compositor_api.h",
    "ppb_compositor_layer_api.h",
    "ppb_compositor_layer_thunk.cc",
    "ppb_compositor_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_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_private_thunk.cc",
    "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_output_protection_api.h",
    "ppb_output_protection_private_thunk.cc",
    "ppb_pdf_api.h",
    "ppb_platform_verification_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_destination_private_api.h",
    "ppb_video_destination_private_thunk.cc",
    "ppb_video_encoder_api.h",
    "ppb_video_encoder_thunk.cc",
    "ppb_video_frame_api.h",
    "ppb_video_frame_thunk.cc",
    "ppb_video_source_private_api.h",
    "ppb_video_source_private_thunk.cc",
    "ppb_view_api.h",
    "ppb_view_dev_thunk.cc",
    "ppb_view_thunk.cc",
    "ppb_websocket_api.h",
    "ppb_websocket_thunk.cc",
    "ppb_x509_certificate_private_api.h",
    "ppb_x509_certificate_private_thunk.cc",
    "thunk.h",
  ]

  if (!is_nacl) {
    sources += [
      "ppb_audio_input_dev_thunk.cc",
      "ppb_broker_thunk.cc",
      "ppb_browser_font_trusted_thunk.cc",
      "ppb_buffer_thunk.cc",
      "ppb_char_set_thunk.cc",
      "ppb_content_decryptor_private_thunk.cc",
      "ppb_flash_clipboard_thunk.cc",
      "ppb_flash_device_id_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_platform_verification_private_thunk.cc",
      "ppb_url_util_thunk.cc",
      "ppb_video_capture_thunk.cc",
      "ppb_video_decoder_dev_thunk.cc",
    ]
  }

  # We exclude a few more things for nacl_win64, to avoid pulling in more
  # dependencies.
  # TODO(GYP) this isn't correct. This should only be specifically for the
  # nacl_win64 build (cross-compiled for a 32-bit Chrome), rather than all
  # 64-bit builds.
  # See also //ppapi/shared_impl
  if (is_win && current_cpu == "x64" && current_toolchain != default_toolchain) {
    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",
    ]
  }

  defines = [
    # This target goes in the same library as shared_impl (in GYP they are the
    # same).
    "PPAPI_SHARED_IMPLEMENTATION",

    "PPAPI_THUNK_IMPLEMENTATION",
  ]
}
