# 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. { 'variables': { 'remoting_host_installer_win_roots': [ 'host/installer/win/', ], 'remoting_host_installer_win_files': [ 'host/installer/win/chromoting.wxs', 'host/installer/win/parameters.json', ], }, # end of 'variables' 'targets': [ { 'target_name': 'remoting_breakpad_tester', 'type': 'executable', 'variables': { 'enable_wexit_time_destructors': 1, }, 'dependencies': [ '../base/base.gyp:base', 'remoting_host', ], 'sources': [ 'tools/breakpad_tester_win.cc', ], }, # end of target 'remoting_breakpad_tester' { # GN version: //remoting/host:remoting_lib_idl 'target_name': 'remoting_lib_idl', 'type': 'static_library', 'variables': { 'clang_warning_flags': [ # MIDL generates code like "#endif !_MIDL_USE_GUIDDEF_" '-Wno-extra-tokens', ], }, 'sources': [ 'host/win/chromoting_lib_idl.templ', '<(SHARED_INTERMEDIATE_DIR)/remoting/host/chromoting_lib.h', '<(SHARED_INTERMEDIATE_DIR)/remoting/host/chromoting_lib.idl', '<(SHARED_INTERMEDIATE_DIR)/remoting/host/chromoting_lib_i.c', ], # This target exports a hard dependency because dependent targets may # include chromoting_lib.h, a generated header. 'hard_dependency': 1, 'msvs_settings': { 'VCMIDLTool': { 'OutputDirectory': '<(SHARED_INTERMEDIATE_DIR)/remoting/host', }, }, 'direct_dependent_settings': { 'include_dirs': [ '<(SHARED_INTERMEDIATE_DIR)', ], }, 'rules': [ { # GN version: //remoting/host:generate_idl 'rule_name': 'generate_idl', 'extension': 'templ', 'outputs': [ '<(SHARED_INTERMEDIATE_DIR)/remoting/host/chromoting_lib.idl', ], 'action': [ 'python', '<(version_py_path)', '-e', "DAEMON_CONTROLLER_CLSID='<(daemon_controller_clsid)'", '-e', "RDP_DESKTOP_SESSION_CLSID='<(rdp_desktop_session_clsid)'", '<(RULE_INPUT_PATH)', '<@(_outputs)', ], 'process_outputs_as_sources': 1, 'message': 'Generating <@(_outputs)', }, ], }, # end of target 'remoting_lib_idl' # remoting_lib_ps builds the proxy/stub code generated by MIDL (see # remoting_lib_idl). { 'target_name': 'remoting_lib_ps', 'type': 'static_library', 'defines': [ # Prepend 'Ps' to the MIDL-generated routines. This includes # DllGetClassObject, DllCanUnloadNow, DllRegisterServer, # DllUnregisterServer, and DllMain. 'ENTRY_PREFIX=Ps', 'REGISTER_PROXY_DLL', ], 'dependencies': [ 'remoting_lib_idl', ], 'sources': [ '<(SHARED_INTERMEDIATE_DIR)/remoting/host/chromoting_lib.dlldata.c', '<(SHARED_INTERMEDIATE_DIR)/remoting/host/chromoting_lib_p.c', ], 'variables': { 'clang_warning_flags': [ # MIDL generated code has a habit of omitting optional braces. '-Wno-missing-braces', # Source files generated by the MIDL compiler trigger warnings with # -Wincompatible-pointer-types enabled. '-Wno-incompatible-pointer-types', # Generated code contains unused variables. '-Wno-unused-variable', # PROXYFILE_LIST_START is an extern with initializer. '-Wno-extern-initializer', ], }, }, # end of target 'remoting_lib_ps' # Regenerates 'chromoting_lib.rc' (used to embed 'chromoting_lib.tlb' # into remoting_core.dll's resources) every time # 'chromoting_lib_idl.templ' changes. Making remoting_core depend on # both this and 'remoting_lib_idl' targets ensures that the resorces # are rebuilt every time the type library is updated. GYP alone is # not smart enough to figure out this dependency on its own. { 'target_name': 'remoting_lib_rc', 'type': 'none', 'sources': [ 'host/win/chromoting_lib_idl.templ', ], 'hard_dependency': 1, 'direct_dependent_settings': { 'include_dirs': [ '<(SHARED_INTERMEDIATE_DIR)', ], }, 'rules': [ { 'rule_name': 'generate_rc', 'extension': 'templ', 'outputs': [ '<(SHARED_INTERMEDIATE_DIR)/remoting/host/chromoting_lib.rc', ], 'action': [ 'echo 1 typelib "remoting/host/chromoting_lib.tlb" > <@(_outputs)', ], 'message': 'Generating <@(_outputs)', }, ], }, # end of target 'remoting_lib_rc' # The only difference between |remoting_console.exe| and # |remoting_host.exe| is that the former is a console application. # |remoting_console.exe| is used for debugging purposes. { 'target_name': 'remoting_console', 'type': 'executable', 'variables': { 'enable_wexit_time_destructors': 1, }, 'defines': [ 'BINARY=BINARY_HOST_ME2ME', ], 'dependencies': [ 'remoting_core', 'remoting_windows_resources', ], 'sources': [ '<(SHARED_INTERMEDIATE_DIR)/remoting/version.rc', 'host/win/entry_point.cc', ], 'msvs_settings': { 'VCManifestTool': { 'AdditionalManifestFiles': [ 'host/win/dpi_aware.manifest', ], }, 'VCLinkerTool': { 'EntryPointSymbol': 'HostEntryPoint', 'IgnoreAllDefaultLibraries': 'true', 'SubSystem': '1', # /SUBSYSTEM:CONSOLE }, }, }, # end of target 'remoting_console' { 'target_name': 'remoting_core', 'type': 'shared_library', 'variables': { 'enable_wexit_time_destructors': 1, }, 'defines' : [ '_ATL_APARTMENT_THREADED', '_ATL_CSTRING_EXPLICIT_CONSTRUCTORS', '_ATL_NO_AUTOMATIC_NAMESPACE', '_ATL_NO_EXCEPTIONS', 'BINARY=BINARY_CORE', 'DAEMON_CONTROLLER_CLSID="{<(daemon_controller_clsid)}"', 'RDP_DESKTOP_SESSION_CLSID="{<(rdp_desktop_session_clsid)}"', 'HOST_IMPLEMENTATION', 'ISOLATION_AWARE_ENABLED=1', 'STRICT', 'VERSION=<(version_full)', ], 'dependencies': [ '../base/base.gyp:base', '../base/base.gyp:base_static', '../base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations', '../ipc/ipc.gyp:ipc', '../net/net.gyp:net', '../third_party/webrtc/modules/modules.gyp:desktop_capture', 'remoting_base', 'remoting_breakpad', 'remoting_host', 'remoting_host_setup_base', 'remoting_it2me_host_static', 'remoting_lib_idl', 'remoting_lib_ps', 'remoting_lib_rc', 'remoting_me2me_host_static', 'remoting_native_messaging_base', 'remoting_protocol', 'remoting_windows_resources', ], 'sources': [ '<(SHARED_INTERMEDIATE_DIR)/remoting/core.rc', '<(SHARED_INTERMEDIATE_DIR)/remoting/host/chromoting_lib.rc', '<(SHARED_INTERMEDIATE_DIR)/remoting/host/remoting_host_messages.rc', '<(SHARED_INTERMEDIATE_DIR)/remoting/version.rc', 'host/desktop_process_main.cc', 'host/host_main.cc', 'host/host_main.h', 'host/it2me/it2me_native_messaging_host_main.cc', 'host/it2me/it2me_native_messaging_host_main.h', 'host/security_key/remote_security_key_main.cc', 'host/security_key/remote_security_key_main.h', 'host/setup/me2me_native_messaging_host_main.cc', 'host/setup/me2me_native_messaging_host_main.h', 'host/win/chromoting_module.cc', 'host/win/chromoting_module.h', 'host/win/core.cc', 'host/win/core_resource.h', 'host/win/host_service.cc', 'host/win/host_service.h', 'host/win/omaha.cc', 'host/win/omaha.h', 'host/win/rdp_desktop_session.cc', 'host/win/rdp_desktop_session.h', 'host/win/unprivileged_process_delegate.cc', 'host/win/unprivileged_process_delegate.h', 'host/win/wts_session_process_delegate.cc', 'host/win/wts_session_process_delegate.h', 'host/worker_process_ipc_delegate.h', ], 'msvs_settings': { 'VCManifestTool': { 'EmbedManifest': 'true', 'AdditionalManifestFiles': [ 'host/win/common-controls.manifest', ], }, 'VCLinkerTool': { 'AdditionalDependencies': [ 'comctl32.lib', 'rpcns4.lib', 'rpcrt4.lib', 'uuid.lib', 'wtsapi32.lib', ], 'AdditionalOptions': [ # Export the proxy/stub entry points. Note that the generated # routines have 'Ps' prefix to avoid conflicts with our own # DllMain(). '/EXPORT:DllGetClassObject=PsDllGetClassObject,PRIVATE', '/EXPORT:DllCanUnloadNow=PsDllCanUnloadNow,PRIVATE', '/EXPORT:DllRegisterServer=PsDllRegisterServer,PRIVATE', '/EXPORT:DllUnregisterServer=PsDllUnregisterServer,PRIVATE', ], }, 'conditions': [ ['clang==1', { # atlapp.h contains a global "using namespace WTL;". # TODO: Remove once remoting/host/verify_config_window_win.h no # longer depends on atlapp.h, http://crbug.com/5027 'VCCLCompilerTool': { 'AdditionalOptions': ['-Wno-header-hygiene'], }, }], ], }, }, # end of target 'remoting_core' { 'target_name': 'remoting_desktop', 'type': 'executable', 'variables': { 'enable_wexit_time_destructors': 1, }, 'defines': [ 'BINARY=BINARY_DESKTOP', ], 'dependencies': [ 'remoting_core', 'remoting_windows_resources', ], 'sources': [ '<(SHARED_INTERMEDIATE_DIR)/remoting/version.rc', 'host/win/entry_point.cc', ], 'msvs_settings': { 'VCManifestTool': { 'AdditionalManifestFiles': [ 'host/win/dpi_aware.manifest', ], }, 'VCLinkerTool': { 'EnableUAC': 'true', # Add 'level="requireAdministrator" uiAccess="true"' to # the manifest only for the official builds because it requires # the binary to be signed to work. 'conditions': [ ['buildtype == "Official"', { 'UACExecutionLevel': 2, 'UACUIAccess': 'true', }], ], 'EntryPointSymbol': 'HostEntryPoint', 'IgnoreAllDefaultLibraries': 'true', 'SubSystem': '2', # /SUBSYSTEM:WINDOWS }, }, }, # end of target 'remoting_desktop' { 'target_name': 'remoting_me2me_host', 'product_name': 'remoting_host', 'type': 'executable', 'variables': { 'enable_wexit_time_destructors': 1, }, 'defines': [ 'BINARY=BINARY_HOST_ME2ME', ], 'dependencies': [ 'remoting_core', 'remoting_windows_resources', ], 'sources': [ '<(SHARED_INTERMEDIATE_DIR)/remoting/version.rc', 'host/win/entry_point.cc', ], 'msvs_settings': { 'VCManifestTool': { 'AdditionalManifestFiles': [ 'host/win/dpi_aware.manifest', ], }, 'VCLinkerTool': { 'EntryPointSymbol': 'HostEntryPoint', 'IgnoreAllDefaultLibraries': 'true', 'OutputFile': '$(OutDir)\\remoting_host.exe', 'SubSystem': '2', # /SUBSYSTEM:WINDOWS }, }, }, # end of target 'remoting_me2me_host' { 'target_name': 'remote_security_key', 'type': 'executable', 'product_name': 'remote_security_key', 'variables': { 'enable_wexit_time_destructors': 1, }, 'defines' : [ 'BINARY=BINARY_REMOTE_SECURITY_KEY', ], 'dependencies': [ 'remoting_core', 'remoting_windows_resources', ], 'sources': [ '<(SHARED_INTERMEDIATE_DIR)/remoting/version.rc', 'host/security_key/remote_security_key_entry_point.cc', ], 'msvs_settings': { 'VCLinkerTool': { 'IgnoreAllDefaultLibraries': 'true', 'SubSystem': '1', # /SUBSYSTEM:CONSOLE }, }, }, # end of target 'remote_security_key' { 'target_name': 'remoting_me2me_native_messaging_host', 'type': 'executable', 'product_name': 'remoting_native_messaging_host', 'variables': { 'enable_wexit_time_destructors': 1, }, 'defines' : [ 'BINARY=BINARY_NATIVE_MESSAGING_HOST', ], 'dependencies': [ 'remoting_core', 'remoting_windows_resources', ], 'sources': [ '<(SHARED_INTERMEDIATE_DIR)/remoting/version.rc', 'host/setup/me2me_native_messaging_host_entry_point.cc', ], 'msvs_settings': { 'VCLinkerTool': { 'IgnoreAllDefaultLibraries': 'true', 'SubSystem': '1', # /SUBSYSTEM:CONSOLE }, }, }, # end of target 'remoting_me2me_native_messaging_host' { 'target_name': 'remoting_it2me_native_messaging_host', 'type': 'executable', 'product_name': 'remote_assistance_host', 'variables': { 'enable_wexit_time_destructors': 1, }, 'dependencies': [ 'remoting_core', 'remoting_windows_resources', ], 'sources': [ '<(SHARED_INTERMEDIATE_DIR)/remoting/version.rc', 'host/it2me/it2me_native_messaging_host_entry_point.cc', ], 'defines' : [ 'BINARY=BINARY_REMOTE_ASSISTANCE_HOST', ], 'msvs_settings': { 'VCManifestTool': { 'EmbedManifest': 'true', 'AdditionalManifestFiles': [ 'host/win/common-controls.manifest', 'host/win/dpi_aware.manifest', ], }, 'VCLinkerTool': { 'IgnoreAllDefaultLibraries': 'true', 'SubSystem': '1', # /SUBSYSTEM:CONSOLE 'AdditionalDependencies': [ 'comctl32.lib', ], }, }, }, # end of target 'remoting_it2me_native_messaging_host' { # GN version: //remoting/host:messages 'target_name': 'remoting_host_messages', 'type': 'none', 'dependencies': [ 'remoting_resources', ], 'hard_dependency': 1, 'direct_dependent_settings': { 'include_dirs': [ '<(SHARED_INTERMEDIATE_DIR)', ], }, 'sources': [ 'host/win/host_messages.mc.jinja2' ], 'rules': [ { 'rule_name': 'localize', 'extension': 'jinja2', 'outputs': [ '<(SHARED_INTERMEDIATE_DIR)/remoting/host/remoting_host_messages.mc', ], 'action': [ 'python', '<(remoting_localize_path)', '--locale_dir', '<(webapp_locale_dir)', '--template', '<(RULE_INPUT_PATH)', '--output', '<@(_outputs)', '--encoding', 'utf-16', '<@(remoting_locales)', ], 'message': 'Localizing the event log messages' }, ], }, # end of target 'remoting_host_messages' # Generates localized resources for the Windows binaries. # The substitution strings are taken from: # - build/util/LASTCHANGE - the last source code revision. There is # no explicit dependency on this file to avoid rebuilding the host # after unrelated changes. # - chrome/VERSION - the major, build & patch versions. # - remoting/VERSION - the chromoting patch version (and overrides # for chrome/VERSION). # - translated webapp strings { 'target_name': 'remoting_windows_resources', 'type': 'none', 'dependencies': [ 'remoting_resources', ], 'hard_dependency': 1, 'direct_dependent_settings': { 'include_dirs': [ '<(SHARED_INTERMEDIATE_DIR)', ], }, 'sources': [ 'host/win/core.rc.jinja2', 'host/win/version.rc.jinja2', ], 'rules': [ { 'rule_name': 'version', 'extension': 'jinja2', 'variables': { 'lastchange_path': '<(DEPTH)/build/util/LASTCHANGE', }, 'inputs': [ '<(chrome_version_path)', '<(remoting_version_path)', ], 'outputs': [ '<(SHARED_INTERMEDIATE_DIR)/remoting/<(RULE_INPUT_ROOT)', ], 'action': [ 'python', '<(remoting_localize_path)', '--variables', '<(chrome_version_path)', # |remoting_version_path| must be after |chrome_version_path| # because it can contain overrides for the version numbers. '--variables', '<(remoting_version_path)', '--variables', '<(lastchange_path)', '--locale_dir', '<(webapp_locale_dir)', '--template', '<(RULE_INPUT_PATH)', '--output', '<@(_outputs)', '--encoding', 'utf-16', '<@(remoting_locales)', ], 'message': 'Localizing the version information' }, ], }, # end of target 'remoting_windows_resources' ], # end of 'targets' 'conditions': [ # The host installation is generated only if WiX is available. If # component build is used the produced installation will not work due to # missing DLLs. We build it anyway to make sure the GYP scripts are executed # by the bots. ['wix_exists == "True" and sas_dll_exists == "True"', { 'targets': [ { 'target_name': 'remoting_host_installation', 'type': 'none', 'dependencies': [ 'remoting_me2me_host_archive', ], 'sources': [ '<(PRODUCT_DIR)/remoting-me2me-host-<(OS).zip', ], 'outputs': [ '<(PRODUCT_DIR)/chromoting.msi', ], 'rules': [ { 'rule_name': 'zip2msi', 'extension': 'zip', 'inputs': [ 'tools/zip2msi.py', ], 'outputs': [ '<(PRODUCT_DIR)/chromoting.msi', ], 'action': [ 'python', 'tools/zip2msi.py', '--wix_path', '<(wix_path)', '--intermediate_dir', '<(INTERMEDIATE_DIR)/installation', '--target_arch', '<(target_arch)', '<(RULE_INPUT_PATH)', '<@(_outputs)', ], 'message': 'Generating <@(_outputs)', }, ], }, # end of target 'remoting_host_installation' { 'target_name': 'remoting_me2me_host_archive', 'type': 'none', 'dependencies': [ '<(icu_gyp_path):icudata', 'remoting_core', 'remoting_desktop', 'remoting_it2me_native_messaging_host', 'remoting_me2me_host', 'remoting_me2me_native_messaging_host', 'remoting_native_messaging_manifests', ], 'compiled_inputs': [ '<(PRODUCT_DIR)/remote_assistance_host.exe', '<(PRODUCT_DIR)/remoting_core.dll', '<(PRODUCT_DIR)/remoting_desktop.exe', '<(PRODUCT_DIR)/remoting_host.exe', '<(PRODUCT_DIR)/remoting_native_messaging_host.exe', ], 'compiled_inputs_dst': [ 'files/remote_assistance_host.exe', 'files/remoting_core.dll', 'files/remoting_desktop.exe', 'files/remoting_host.exe', 'files/remoting_native_messaging_host.exe', ], 'conditions': [ ['buildtype == "Official"', { 'defs': [ 'OFFICIAL_BUILD=1', ], }, { # else buildtype != "Official" 'defs': [ 'OFFICIAL_BUILD=0', ], }], ], 'defs': [ 'BRANDING=<(branding)', 'DAEMON_CONTROLLER_CLSID={<(daemon_controller_clsid)}', 'RDP_DESKTOP_SESSION_CLSID={<(rdp_desktop_session_clsid)}', 'VERSION=<(version_full)', ], 'generated_files': [ '<@(_compiled_inputs)', '<(sas_dll_path)/sas.dll', '<(SHARED_INTERMEDIATE_DIR)/remoting/CREDITS.txt', '<(PRODUCT_DIR)/remoting/com.google.chrome.remote_assistance.json', '<(PRODUCT_DIR)/remoting/com.google.chrome.remote_desktop.json', 'resources/chromoting.ico', '<(PRODUCT_DIR)/icudtl.dat', ], 'generated_files_dst': [ '<@(_compiled_inputs_dst)', 'files/sas.dll', 'files/CREDITS.txt', 'files/com.google.chrome.remote_assistance.json', 'files/com.google.chrome.remote_desktop.json', 'files/chromoting.ico', 'files/icudtl.dat', ], 'zip_path': '<(PRODUCT_DIR)/remoting-me2me-host-<(OS).zip', 'outputs': [ '<(_zip_path)', ], 'actions': [ { 'action_name': 'Zip installer files for signing', 'temp_dir': '<(INTERMEDIATE_DIR)/installation', 'source_files': [ '<@(remoting_host_installer_win_files)', ], 'inputs': [ '<@(_compiled_inputs)', '<(sas_dll_path)/sas.dll', '<@(_source_files)', 'host/installer/build-installer-archive.py', 'resources/chromoting.ico', ], 'outputs': [ '<(_zip_path)', ], 'action': [ 'python', 'host/installer/build-installer-archive.py', '<(_temp_dir)', '<(_zip_path)', '--source-file-roots', '<@(remoting_host_installer_win_roots)', '--source-files', '<@(_source_files)', '--generated-files', '<@(_generated_files)', '--generated-files-dst', '<@(_generated_files_dst)', '--defs', '<@(_defs)', ], }, ], # actions }, # end of target 'remoting_me2me_host_archive' ], # end of 'targets' }, { # Dummy targets for when Wix is not available. 'targets': [ { 'target_name': 'remoting_host_installation', 'type': 'none', }, { 'target_name': 'remoting_me2me_host_archive', 'type': 'none', }, ], # end of 'targets' }], # 'wix_exists == "True" and sas_dll_exists == "True"' ], # end of 'conditions' }