# Copyright 2014 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("//build/config/features.gni") import("//build/config/ui.gni") import("//remoting/remoting_host.gni") import("//remoting/remoting_locales.gni") import("//remoting/remoting_srcs.gni") import("//remoting/remoting_version.gni") import("//remoting/tools/build/remoting_localize.gni") if (is_mac) { # TODO(GYP) Mac build of remoting host. group("host") { } group("test_support") { } group("unit_tests") { } } else { # This must be a static library instead of a source set because # remoting_unittests requires that remoting_me2me_host.cc not be pulled in, # which in turn depends on remoting_me2me_host_static which isn't part of that # build. # # TODO fix this, successful builds should not depend on static libraries # stripping code. static_library("host") { sources = rebase_path(remoting_host_srcs_gypi_values.remoting_host_sources, ".", "//remoting") libs = [] configs += [ "//build/config/compiler:wexit_time_destructors", "//remoting:version", ] defines = [ "WEBRTC_CHROMIUM_BUILD" ] deps = [ "//base:i18n", "//components/policy:policy_component_common", "//crypto", "//google_apis", "//ipc", "//remoting/base", "//remoting/protocol", "//remoting/resources", "//ui/events/platform", "//ui/events:dom_keycode_converter", ] if (enable_configuration_policy) { deps += [ "//components/policy:policy" ] } if (is_linux && !is_chromeos) { libs += [ "pam" ] } if (use_x11) { configs += [ "//build/config/linux:x11", "//build/config/linux:xrandr", ] if (!is_chromeos) { deps += [ "//build/config/linux/gtk" ] } } else { sources -= [ "clipboard_x11.cc", "desktop_resizer_x11.cc", "input_injector_x11.cc", "local_input_monitor_x11.cc", ] if (is_linux) { # These will already be filtered out on non-Linux. sources -= [ "linux/x_server_clipboard.cc", "linux/x_server_clipboard.h", ] } } if (!use_ozone) { sources -= [ "desktop_resizer_ozone.cc" ] } if (is_chromeos) { # TODO(GYP): crbug.com/481627. These should only be included # when enable_me2me_host is true. sources -= [ "me2me_desktop_environment.cc", "me2me_desktop_environment.h", ] deps += [ "//cc", "//ppapi/host", "//skia", "//ui/aura", "//ui/compositor", "//ui/events", "//ui/views", ] if (use_ash) { deps += [ "//ash" ] } if (use_ozone) { deps += [ "//ui/ozone" ] sources -= [ "desktop_resizer_ozone.cc" ] } else { sources -= [ "clipboard_x11.cc", "desktop_resizer_x11.cc", "input_injector_chromeos.cc", "input_injector_chromeos.h", "linux/x_server_clipboard.cc", "linux/x_server_clipboard.h", "local_input_monitor_x11.cc", ] } sources -= [ "continue_window_linux.cc", "disconnect_window_linux.cc", ] } if (is_mac) { # TODO(GYP) Mac host_bundle_name and prefpane_bundle_name. # Note if you are looking at this: It really sucks to have to synchronously # call into python twice to get these values. They should instead be # written into a generated header via the process_version template, and we # change the source files to include that header rather than rely on these # defines being set in the build. #defines += [ # "HOST_BUNDLE_NAME=\"$host_bundle_name\"", # "PREFPANE_BUNDLE_NAME=\"$prefpane_bundle_name\"", #] libs += [ "Accelerate.framework", "libpam.a", ] deps += [ "//third_party/google_toolbox_for_mac" ] } if (is_win) { deps += [ ":messages", ":remoting_lib_idl", ] } if (enable_webrtc) { deps += [ # TODO(GYP): crbug.com/481633. We should probably not have to depend on # libjingle_webrtc; that should be pulled in automatically by # libpeerconnection instead. "//third_party/libjingle:libjingle_webrtc", "//third_party/libjingle:libpeerconnection", "//third_party/webrtc/modules/desktop_capture", ] sources += rebase_path(remoting_host_srcs_gypi_values.remoting_cast_sources, ".", "//remoting") } } source_set("test_support") { testonly = true sources = [ "fake_desktop_capturer.cc", "fake_desktop_capturer.h", "fake_desktop_environment.cc", "fake_desktop_environment.h", "fake_host_extension.cc", "fake_host_extension.h", "fake_host_status_monitor.h", "fake_host_status_monitor.h", "fake_mouse_cursor_monitor.cc", "fake_mouse_cursor_monitor.h", ] configs += [ "//remoting:version" ] deps = [ "//remoting/proto", "//testing/gtest", ] public_deps = [ ":host", ] if (enable_webrtc) { public_deps += [ "//third_party/libjingle:libpeerconnection", "//third_party/webrtc/modules/desktop_capture", ] } } # The host portions of the remoting unit tests. source_set("unit_tests") { testonly = true sources = [ "audio_pump_unittest.cc", "audio_silence_detector_unittest.cc", "capture_scheduler_unittest.cc", "chromeos/aura_desktop_capturer_unittest.cc", "chromeos/clipboard_aura_unittest.cc", "chromoting_host_context_unittest.cc", "chromoting_host_unittest.cc", "client_session_unittest.cc", "config_file_watcher_unittest.cc", "daemon_process_unittest.cc", "desktop_process_unittest.cc", "desktop_shape_tracker_unittest.cc", "gnubby_auth_handler_posix_unittest.cc", "heartbeat_sender_unittest.cc", "host_change_notification_listener_unittest.cc", "host_config_unittest.cc", "host_extension_session_manager_unittest.cc", "host_mock_objects.cc", "host_status_logger_unittest.cc", "ipc_desktop_environment_unittest.cc", "it2me/it2me_confirmation_dialog_proxy_unittest.cc", "it2me/it2me_native_messaging_host_unittest.cc", "linux/audio_pipe_reader_unittest.cc", "linux/unicode_to_keysym_unittest.cc", "linux/x_server_clipboard_unittest.cc", "local_input_monitor_unittest.cc", "mouse_shape_pump_unittest.cc", "native_messaging/native_messaging_reader_unittest.cc", "native_messaging/native_messaging_writer_unittest.cc", "pairing_registry_delegate_linux_unittest.cc", "pairing_registry_delegate_win_unittest.cc", "pin_hash_unittest.cc", "policy_watcher_unittest.cc", "register_support_host_request_unittest.cc", "remote_input_filter_unittest.cc", "resizing_host_observer_unittest.cc", "screen_resolution_unittest.cc", "server_log_entry_host_unittest.cc", "setup/me2me_native_messaging_host_unittest.cc", "setup/mock_oauth_client.cc", "setup/oauth_helper_unittest.cc", "setup/pin_validator_unittest.cc", "shaped_desktop_capturer_unittest.cc", "token_validator_factory_impl_unittest.cc", "video_frame_pump_unittest.cc", "video_frame_recorder_unittest.cc", "win/rdp_client_unittest.cc", "win/worker_process_launcher.cc", "win/worker_process_launcher.h", "win/worker_process_launcher_unittest.cc", ] if (use_ozone || is_chromeos) { sources -= [ "local_input_monitor_unittest.cc" ] } if (is_chromeos) { sources -= [ "linux/x_server_clipboard_unittest.cc" ] } configs += [ "//remoting:version" ] deps = [ ":host", ":test_support", "//remoting/host/setup", "//remoting/host/it2me:common", "//remoting/host/native_messaging", "//remoting/proto", "//skia", "//testing/gmock", "//testing/gtest", ] if (enable_configuration_policy) { deps += [ "//components/policy:policy_component_test_support" ] } } if (is_win) { import("//build/toolchain/win/midl.gni") import("//remoting/tools/build/message_compiler.gni") # TODO(brettw) these should not be generated via exec_script. This should be # part of the build process rather than the metabuild. Instead, a script # should generate a header containing the #defines for this as well as the # IDL file with the values. clsids = exec_script("win/get_clsids.py", [ remoting_srcs_gypi_values.daemon_controller_guid, remoting_srcs_gypi_values.rdp_desktop_session_guid, version_full, ], "value") daemon_controller_clsid = clsids[0] rdp_desktop_session_clsid = clsids[1] action("generate_idl") { script = "//build/util/version.py" inputs = [ "win/chromoting_lib_idl.templ", ] outputs = [ "$target_gen_dir/chromoting_lib.idl", ] args = [ "-e", "DAEMON_CONTROLLER_CLSID='$daemon_controller_clsid'", "-e", "RDP_DESKTOP_SESSION_CLSID='$rdp_desktop_session_clsid'", rebase_path(inputs[0], root_build_dir), rebase_path(outputs[0], root_build_dir), ] } midl("remoting_lib_idl") { sources = get_target_outputs(":generate_idl") deps = [ ":generate_idl", ] } # Makes the .mc file from the .mc.jinja file. remoting_localize("messages_localizing") { sources = [ "win/host_messages.mc.jinja2", ] locales = remoting_locales locale_dir = webapp_locale_dir encoding = "utf-16" # This target is funny. It only produces one file and the output doesn't # match the input. We want to generate remoting_host_messages.mc from # host_messages.mg.jinja2. GN complains if it doesn't see a pattern in the # output, so the following pattern produces the name we want with a template # based on the input. # # TODO: This is for GYP compat. We should just make the names match instead. output = "$target_gen_dir/remoting_{{source_name_part}}" } # Makes the .h/.rc files from the .mc file. message_compiler("messages") { sources = get_target_outputs(":messages_localizing") deps = [ ":messages_localizing", ] } # TODO(GYP) More Windows remoting targets from remoting_host_win.gypi } if (enable_remoting_host) { executable("remoting_start_host") { sources = [ "setup/host_starter.cc", "setup/host_starter.h", "setup/start_host.cc", ] deps = [ "//remoting/host/setup", ] if (enable_webrtc) { deps += [ "//third_party/libjingle:libjingle_webrtc" ] } } } if (enable_me2me_host) { source_set("remoting_me2me_host_static") { sources = [ "curtain_mode.h", "curtain_mode_linux.cc", "curtain_mode_mac.cc", "curtain_mode_win.cc", "pam_authorization_factory_posix.cc", "pam_authorization_factory_posix.h", "posix/signal_handler.cc", "posix/signal_handler.h", "remoting_me2me_host.cc", ] configs += [ "//remoting:version" ] deps = [ "//base", "//base:i18n", "//components/policy", "//components/policy:policy_component_common", "//net", "//remoting/base", "//remoting/host", "//remoting/proto", "//third_party/webrtc/modules/desktop_capture", ] if (enable_webrtc) { deps += [ "//third_party/libjingle:libjingle_webrtc" ] } if (is_linux) { deps += [ "//build/config/linux/gtk" ] } if (is_linux || is_mac) { libs = [ "pam" ] } } if (!is_win) { executable("remoting_me2me_host") { sources = [ "host_main.cc", "host_main.h", ] deps = [ ":remoting_me2me_host_static", ] } } } }