1 # Copyright 2014 The Chromium Authors. All rights reserved. 2 # Use of this source code is governed by a BSD-style license that can be 3 # found in the LICENSE file. 4 5 { 6 'variables': { 7 'remoting_host_installer_win_roots': [ 8 'host/installer/win/', 9 ], 10 'remoting_host_installer_win_files': [ 11 'host/installer/win/chromoting.wxs', 12 'host/installer/win/parameters.json', 13 ], 14 }, 15 16 'conditions': [ 17 ['OS=="win"', { 18 'targets': [ 19 { 20 'target_name': 'remoting_breakpad_tester', 21 'type': 'executable', 22 'variables': { 'enable_wexit_time_destructors': 1, }, 23 'dependencies': [ 24 '../base/base.gyp:base', 25 'remoting_host', 26 ], 27 'sources': [ 28 'tools/breakpad_tester_win.cc', 29 ], 30 }, # end of target 'remoting_breakpad_tester' 31 { 32 'target_name': 'remoting_lib_idl', 33 'type': 'static_library', 34 'sources': [ 35 'host/win/chromoting_lib_idl.templ', 36 '<(SHARED_INTERMEDIATE_DIR)/remoting/host/chromoting_lib.h', 37 '<(SHARED_INTERMEDIATE_DIR)/remoting/host/chromoting_lib.idl', 38 '<(SHARED_INTERMEDIATE_DIR)/remoting/host/chromoting_lib_i.c', 39 ], 40 # This target exports a hard dependency because dependent targets may 41 # include chromoting_lib.h, a generated header. 42 'hard_dependency': 1, 43 'msvs_settings': { 44 'VCMIDLTool': { 45 'OutputDirectory': '<(SHARED_INTERMEDIATE_DIR)/remoting/host', 46 }, 47 }, 48 'direct_dependent_settings': { 49 'include_dirs': [ 50 '<(SHARED_INTERMEDIATE_DIR)', 51 ], 52 }, 53 'rules': [ 54 { 55 'rule_name': 'generate_idl', 56 'extension': 'templ', 57 'outputs': [ 58 '<(SHARED_INTERMEDIATE_DIR)/remoting/host/chromoting_lib.idl', 59 ], 60 'action': [ 61 'python', '<(version_py_path)', 62 '-e', "DAEMON_CONTROLLER_CLSID='<(daemon_controller_clsid)'", 63 '-e', "RDP_DESKTOP_SESSION_CLSID='<(rdp_desktop_session_clsid)'", 64 '<(RULE_INPUT_PATH)', 65 '<@(_outputs)', 66 ], 67 'process_outputs_as_sources': 1, 68 'message': 'Generating <@(_outputs)', 69 }, 70 ], 71 }, # end of target 'remoting_lib_idl' 72 73 # remoting_lib_ps builds the proxy/stub code generated by MIDL (see 74 # remoting_lib_idl). 75 { 76 'target_name': 'remoting_lib_ps', 77 'type': 'static_library', 78 'defines': [ 79 # Prepend 'Ps' to the MIDL-generated routines. This includes 80 # DllGetClassObject, DllCanUnloadNow, DllRegisterServer, 81 # DllUnregisterServer, and DllMain. 82 'ENTRY_PREFIX=Ps', 83 'REGISTER_PROXY_DLL', 84 ], 85 'dependencies': [ 86 'remoting_lib_idl', 87 ], 88 'sources': [ 89 '<(SHARED_INTERMEDIATE_DIR)/remoting/host/chromoting_lib.dlldata.c', 90 '<(SHARED_INTERMEDIATE_DIR)/remoting/host/chromoting_lib_p.c', 91 ], 92 }, # end of target 'remoting_lib_ps' 93 94 # Regenerates 'chromoting_lib.rc' (used to embed 'chromoting_lib.tlb' 95 # into remoting_core.dll's resources) every time 96 # 'chromoting_lib_idl.templ' changes. Making remoting_core depend on 97 # both this and 'remoting_lib_idl' targets ensures that the resorces 98 # are rebuilt every time the type library is updated. GYP alone is 99 # not smart enough to figure out this dependency on its own. 100 { 101 'target_name': 'remoting_lib_rc', 102 'type': 'none', 103 'sources': [ 104 'host/win/chromoting_lib_idl.templ', 105 ], 106 'hard_dependency': 1, 107 'direct_dependent_settings': { 108 'include_dirs': [ 109 '<(SHARED_INTERMEDIATE_DIR)', 110 ], 111 }, 112 'rules': [ 113 { 114 'rule_name': 'generate_rc', 115 'extension': 'templ', 116 'outputs': [ 117 '<(SHARED_INTERMEDIATE_DIR)/remoting/host/chromoting_lib.rc', 118 ], 119 'action': [ 120 'echo 1 typelib "remoting/host/chromoting_lib.tlb" > <@(_outputs)', 121 ], 122 'message': 'Generating <@(_outputs)', 123 }, 124 ], 125 }, # end of target 'remoting_lib_rc' 126 # The only difference between |remoting_console.exe| and 127 # |remoting_host.exe| is that the former is a console application. 128 # |remoting_console.exe| is used for debugging purposes. 129 { 130 'target_name': 'remoting_console', 131 'type': 'executable', 132 'variables': { 'enable_wexit_time_destructors': 1, }, 133 'defines': [ 134 'BINARY=BINARY_HOST_ME2ME', 135 ], 136 'dependencies': [ 137 'remoting_core', 138 'remoting_windows_resources', 139 ], 140 'sources': [ 141 '<(SHARED_INTERMEDIATE_DIR)/remoting/version.rc', 142 'host/win/entry_point.cc', 143 ], 144 'msvs_settings': { 145 'VCManifestTool': { 146 'AdditionalManifestFiles': [ 147 'host/win/dpi_aware.manifest', 148 ], 149 }, 150 'VCLinkerTool': { 151 'EntryPointSymbol': 'HostEntryPoint', 152 'IgnoreAllDefaultLibraries': 'true', 153 'SubSystem': '1', # /SUBSYSTEM:CONSOLE 154 }, 155 }, 156 }, # end of target 'remoting_console' 157 { 158 'target_name': 'remoting_core', 159 'type': 'shared_library', 160 'variables': { 'enable_wexit_time_destructors': 1, }, 161 'defines' : [ 162 '_ATL_APARTMENT_THREADED', 163 '_ATL_CSTRING_EXPLICIT_CONSTRUCTORS', 164 '_ATL_NO_AUTOMATIC_NAMESPACE', 165 '_ATL_NO_EXCEPTIONS', 166 'BINARY=BINARY_CORE', 167 'DAEMON_CONTROLLER_CLSID="{<(daemon_controller_clsid)}"', 168 'RDP_DESKTOP_SESSION_CLSID="{<(rdp_desktop_session_clsid)}"', 169 'HOST_IMPLEMENTATION', 170 'ISOLATION_AWARE_ENABLED=1', 171 'STRICT', 172 'VERSION=<(version_full)', 173 ], 174 'dependencies': [ 175 '../base/base.gyp:base', 176 '../base/base.gyp:base_static', 177 '../base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations', 178 '../ipc/ipc.gyp:ipc', 179 '../net/net.gyp:net', 180 '../third_party/webrtc/modules/modules.gyp:desktop_capture', 181 'remoting_base', 182 'remoting_breakpad', 183 'remoting_host', 184 'remoting_host_setup_base', 185 'remoting_it2me_host_static', 186 'remoting_lib_idl', 187 'remoting_lib_ps', 188 'remoting_lib_rc', 189 'remoting_me2me_host_static', 190 'remoting_native_messaging_base', 191 'remoting_protocol', 192 'remoting_windows_resources', 193 ], 194 'sources': [ 195 '<(SHARED_INTERMEDIATE_DIR)/remoting/core.rc', 196 '<(SHARED_INTERMEDIATE_DIR)/remoting/host/chromoting_lib.rc', 197 '<(SHARED_INTERMEDIATE_DIR)/remoting/host/remoting_host_messages.rc', 198 '<(SHARED_INTERMEDIATE_DIR)/remoting/version.rc', 199 'host/desktop_process_main.cc', 200 'host/host_main.cc', 201 'host/host_main.h', 202 'host/it2me/it2me_native_messaging_host_main.cc', 203 'host/it2me/it2me_native_messaging_host_main.h', 204 'host/setup/me2me_native_messaging_host_main.cc', 205 'host/setup/me2me_native_messaging_host_main.h', 206 'host/verify_config_window_win.cc', 207 'host/verify_config_window_win.h', 208 'host/win/chromoting_module.cc', 209 'host/win/chromoting_module.h', 210 'host/win/core.cc', 211 'host/win/core_resource.h', 212 'host/win/elevated_controller.cc', 213 'host/win/elevated_controller.h', 214 'host/win/host_service.cc', 215 'host/win/host_service.h', 216 'host/win/omaha.cc', 217 'host/win/omaha.h', 218 'host/win/rdp_desktop_session.cc', 219 'host/win/rdp_desktop_session.h', 220 'host/win/unprivileged_process_delegate.cc', 221 'host/win/unprivileged_process_delegate.h', 222 'host/win/worker_process_launcher.cc', 223 'host/win/worker_process_launcher.h', 224 'host/win/wts_session_process_delegate.cc', 225 'host/win/wts_session_process_delegate.h', 226 'host/worker_process_ipc_delegate.h', 227 ], 228 'msvs_settings': { 229 'VCManifestTool': { 230 'EmbedManifest': 'true', 231 'AdditionalManifestFiles': [ 232 'host/win/common-controls.manifest', 233 ], 234 }, 235 'VCLinkerTool': { 236 'AdditionalDependencies': [ 237 'comctl32.lib', 238 'rpcns4.lib', 239 'rpcrt4.lib', 240 'uuid.lib', 241 'wtsapi32.lib', 242 ], 243 'AdditionalOptions': [ 244 # Export the proxy/stub entry points. Note that the generated 245 # routines have 'Ps' prefix to avoid conflicts with our own 246 # DllMain(). 247 '/EXPORT:DllGetClassObject=PsDllGetClassObject,PRIVATE', 248 '/EXPORT:DllCanUnloadNow=PsDllCanUnloadNow,PRIVATE', 249 '/EXPORT:DllRegisterServer=PsDllRegisterServer,PRIVATE', 250 '/EXPORT:DllUnregisterServer=PsDllUnregisterServer,PRIVATE', 251 ], 252 }, 253 'conditions': [ 254 ['clang==1', { 255 # atlapp.h contains a global "using namespace WTL;". 256 # TODO: Remove once remoting/host/verify_config_window_win.h no 257 # longer depends on atlapp.h, http://crbug.com/5027 258 'VCCLCompilerTool': { 259 'AdditionalOptions': ['-Wno-header-hygiene'], 260 }, 261 }], 262 ], 263 }, 264 }, # end of target 'remoting_core' 265 { 266 'target_name': 'remoting_desktop', 267 'type': 'executable', 268 'variables': { 'enable_wexit_time_destructors': 1, }, 269 'defines': [ 270 'BINARY=BINARY_DESKTOP', 271 ], 272 'dependencies': [ 273 'remoting_core', 274 'remoting_windows_resources', 275 ], 276 'sources': [ 277 '<(SHARED_INTERMEDIATE_DIR)/remoting/version.rc', 278 'host/win/entry_point.cc', 279 ], 280 'msvs_settings': { 281 'VCManifestTool': { 282 'AdditionalManifestFiles': [ 283 'host/win/dpi_aware.manifest', 284 ], 285 }, 286 'VCLinkerTool': { 287 'EnableUAC': 'true', 288 # Add 'level="requireAdministrator" uiAccess="true"' to 289 # the manifest only for the official builds because it requires 290 # the binary to be signed to work. 291 'conditions': [ 292 ['buildtype == "Official"', { 293 'UACExecutionLevel': 2, 294 'UACUIAccess': 'true', 295 }], 296 ], 297 'EntryPointSymbol': 'HostEntryPoint', 298 'IgnoreAllDefaultLibraries': 'true', 299 'SubSystem': '2', # /SUBSYSTEM:WINDOWS 300 }, 301 }, 302 }, # end of target 'remoting_desktop' 303 { 304 'target_name': 'remoting_me2me_host', 305 'product_name': 'remoting_host', 306 'type': 'executable', 307 'variables': { 'enable_wexit_time_destructors': 1, }, 308 'defines': [ 309 'BINARY=BINARY_HOST_ME2ME', 310 ], 311 'dependencies': [ 312 'remoting_core', 313 'remoting_windows_resources', 314 ], 315 'sources': [ 316 '<(SHARED_INTERMEDIATE_DIR)/remoting/version.rc', 317 'host/win/entry_point.cc', 318 ], 319 'msvs_settings': { 320 'VCManifestTool': { 321 'AdditionalManifestFiles': [ 322 'host/win/dpi_aware.manifest', 323 ], 324 }, 325 'VCLinkerTool': { 326 'EntryPointSymbol': 'HostEntryPoint', 327 'IgnoreAllDefaultLibraries': 'true', 328 'OutputFile': '$(OutDir)\\remoting_host.exe', 329 'SubSystem': '2', # /SUBSYSTEM:WINDOWS 330 }, 331 }, 332 }, # end of target 'remoting_me2me_host' 333 { 334 'target_name': 'remoting_me2me_native_messaging_host', 335 'type': 'executable', 336 'product_name': 'remoting_native_messaging_host', 337 'variables': { 'enable_wexit_time_destructors': 1, }, 338 'defines' : [ 339 'BINARY=BINARY_NATIVE_MESSAGING_HOST', 340 ], 341 'dependencies': [ 342 'remoting_core', 343 'remoting_windows_resources', 344 ], 345 'sources': [ 346 '<(SHARED_INTERMEDIATE_DIR)/remoting/version.rc', 347 'host/setup/me2me_native_messaging_host_entry_point.cc', 348 ], 349 'msvs_settings': { 350 'VCLinkerTool': { 351 'IgnoreAllDefaultLibraries': 'true', 352 'SubSystem': '1', # /SUBSYSTEM:CONSOLE 353 }, 354 }, 355 }, # end of target 'remoting_me2me_native_messaging_host' 356 { 357 'target_name': 'remoting_it2me_native_messaging_host', 358 'type': 'executable', 359 'product_name': 'remote_assistance_host', 360 'variables': { 'enable_wexit_time_destructors': 1, }, 361 'dependencies': [ 362 'remoting_core', 363 'remoting_windows_resources', 364 ], 365 'sources': [ 366 '<(SHARED_INTERMEDIATE_DIR)/remoting/version.rc', 367 'host/it2me/it2me_native_messaging_host_entry_point.cc', 368 ], 369 'defines' : [ 370 'BINARY=BINARY_REMOTE_ASSISTANCE_HOST', 371 ], 372 'msvs_settings': { 373 'VCManifestTool': { 374 'EmbedManifest': 'true', 375 'AdditionalManifestFiles': [ 376 'host/win/common-controls.manifest', 377 'host/win/dpi_aware.manifest', 378 ], 379 }, 380 'VCLinkerTool': { 381 'IgnoreAllDefaultLibraries': 'true', 382 'SubSystem': '1', # /SUBSYSTEM:CONSOLE 383 'AdditionalDependencies': [ 384 'comctl32.lib', 385 ], 386 }, 387 }, 388 }, # end of target 'remoting_it2me_native_messaging_host' 389 { 390 'target_name': 'remoting_host_messages', 391 'type': 'none', 392 'dependencies': [ 393 'remoting_resources', 394 ], 395 'hard_dependency': 1, 396 'direct_dependent_settings': { 397 'include_dirs': [ 398 '<(SHARED_INTERMEDIATE_DIR)', 399 ], 400 }, 401 'sources': [ 402 'host/win/host_messages.mc.jinja2' 403 ], 404 'rules': [ 405 { 406 'rule_name': 'localize', 407 'extension': 'jinja2', 408 'outputs': [ 409 '<(SHARED_INTERMEDIATE_DIR)/remoting/host/remoting_host_messages.mc', 410 ], 411 'action': [ 412 'python', '<(remoting_localize_path)', 413 '--locale_dir', '<(webapp_locale_dir)', 414 '--template', '<(RULE_INPUT_PATH)', 415 '--output', '<@(_outputs)', 416 '--encoding', 'utf-16', 417 '<@(remoting_locales)', 418 ], 419 'message': 'Localizing the event log messages' 420 }, 421 ], 422 }, # end of target 'remoting_host_messages' 423 424 # Generates localized resources for the Windows binaries. 425 # The substitution strings are taken from: 426 # - build/util/LASTCHANGE - the last source code revision. There is 427 # no explicit dependency on this file to avoid rebuilding the host 428 # after unrelated changes. 429 # - chrome/VERSION - the major, build & patch versions. 430 # - remoting/VERSION - the chromoting patch version (and overrides 431 # for chrome/VERSION). 432 # - translated webapp strings 433 { 434 'target_name': 'remoting_windows_resources', 435 'type': 'none', 436 'dependencies': [ 437 'remoting_resources', 438 ], 439 'hard_dependency': 1, 440 'direct_dependent_settings': { 441 'include_dirs': [ 442 '<(SHARED_INTERMEDIATE_DIR)', 443 ], 444 }, 445 'sources': [ 446 'host/win/core.rc.jinja2', 447 'host/win/version.rc.jinja2', 448 ], 449 'rules': [ 450 { 451 'rule_name': 'version', 452 'extension': 'jinja2', 453 'variables': { 454 'lastchange_path': '<(DEPTH)/build/util/LASTCHANGE', 455 }, 456 'inputs': [ 457 '<(chrome_version_path)', 458 '<(remoting_version_path)', 459 ], 460 'outputs': [ 461 '<(SHARED_INTERMEDIATE_DIR)/remoting/<(RULE_INPUT_ROOT)', 462 ], 463 'action': [ 464 'python', '<(remoting_localize_path)', 465 '--variables', '<(chrome_version_path)', 466 # |remoting_version_path| must be after |chrome_version_path| 467 # because it can contain overrides for the version numbers. 468 '--variables', '<(remoting_version_path)', 469 '--variables', '<(lastchange_path)', 470 '--locale_dir', '<(webapp_locale_dir)', 471 '--template', '<(RULE_INPUT_PATH)', 472 '--output', '<@(_outputs)', 473 '--encoding', 'utf-16', 474 '<@(remoting_locales)', 475 ], 476 'message': 'Localizing the version information' 477 }, 478 ], 479 }, # end of target 'remoting_windows_resources' 480 ], # end of 'targets' 481 }], # 'OS=="win"' 482 483 # The host installation is generated only if WiX is available. If 484 # component build is used the produced installation will not work due to 485 # missing DLLs. We build it anyway to make sure the GYP scripts are executed 486 # by the bots. 487 ['OS == "win" and wix_exists == "True" and sas_dll_exists == "True"', { 488 'targets': [ 489 { 490 'target_name': 'remoting_host_installation', 491 'type': 'none', 492 'dependencies': [ 493 'remoting_me2me_host_archive', 494 ], 495 'sources': [ 496 '<(PRODUCT_DIR)/remoting-me2me-host-<(OS).zip', 497 ], 498 'outputs': [ 499 '<(PRODUCT_DIR)/chromoting.msi', 500 ], 501 'rules': [ 502 { 503 'rule_name': 'zip2msi', 504 'extension': 'zip', 505 'inputs': [ 506 'tools/zip2msi.py', 507 ], 508 'outputs': [ 509 '<(PRODUCT_DIR)/chromoting.msi', 510 ], 511 'action': [ 512 'python', 'tools/zip2msi.py', 513 '--wix_path', '<(wix_path)', 514 '--intermediate_dir', '<(INTERMEDIATE_DIR)/installation', 515 '--target_arch', '<(target_arch)', 516 '<(RULE_INPUT_PATH)', 517 '<@(_outputs)', 518 ], 519 'message': 'Generating <@(_outputs)', 520 }, 521 ], 522 }, # end of target 'remoting_host_installation' 523 524 { 525 'target_name': 'remoting_me2me_host_archive', 526 'type': 'none', 527 'dependencies': [ 528 '<(icu_gyp_path):icudata', 529 'remoting_core', 530 'remoting_desktop', 531 'remoting_it2me_native_messaging_host', 532 'remoting_me2me_host', 533 'remoting_me2me_native_messaging_host', 534 'remoting_native_messaging_manifests', 535 ], 536 'compiled_inputs': [ 537 '<(PRODUCT_DIR)/remote_assistance_host.exe', 538 '<(PRODUCT_DIR)/remoting_core.dll', 539 '<(PRODUCT_DIR)/remoting_desktop.exe', 540 '<(PRODUCT_DIR)/remoting_host.exe', 541 '<(PRODUCT_DIR)/remoting_native_messaging_host.exe', 542 ], 543 'compiled_inputs_dst': [ 544 'files/remote_assistance_host.exe', 545 'files/remoting_core.dll', 546 'files/remoting_desktop.exe', 547 'files/remoting_host.exe', 548 'files/remoting_native_messaging_host.exe', 549 ], 550 'conditions': [ 551 ['buildtype == "Official"', { 552 'defs': [ 553 'OFFICIAL_BUILD=1', 554 ], 555 }, { # else buildtype != "Official" 556 'defs': [ 557 'OFFICIAL_BUILD=0', 558 ], 559 }], 560 ], 561 'defs': [ 562 'BRANDING=<(branding)', 563 'DAEMON_CONTROLLER_CLSID={<(daemon_controller_clsid)}', 564 'RDP_DESKTOP_SESSION_CLSID={<(rdp_desktop_session_clsid)}', 565 'VERSION=<(version_full)', 566 ], 567 'generated_files': [ 568 '<@(_compiled_inputs)', 569 '<(sas_dll_path)/sas.dll', 570 '<(PRODUCT_DIR)/remoting/com.google.chrome.remote_assistance.json', 571 '<(PRODUCT_DIR)/remoting/com.google.chrome.remote_desktop.json', 572 'resources/chromoting.ico', 573 '<(PRODUCT_DIR)/icudtl.dat', 574 ], 575 'generated_files_dst': [ 576 '<@(_compiled_inputs_dst)', 577 'files/sas.dll', 578 'files/com.google.chrome.remote_assistance.json', 579 'files/com.google.chrome.remote_desktop.json', 580 'files/chromoting.ico', 581 'files/icudtl.dat', 582 ], 583 'zip_path': '<(PRODUCT_DIR)/remoting-me2me-host-<(OS).zip', 584 'outputs': [ 585 '<(_zip_path)', 586 ], 587 'actions': [ 588 { 589 'action_name': 'Zip installer files for signing', 590 'temp_dir': '<(INTERMEDIATE_DIR)/installation', 591 'source_files': [ 592 '<@(remoting_host_installer_win_files)', 593 ], 594 'inputs': [ 595 '<@(_compiled_inputs)', 596 '<(sas_dll_path)/sas.dll', 597 '<@(_source_files)', 598 'host/installer/build-installer-archive.py', 599 'resources/chromoting.ico', 600 ], 601 'outputs': [ 602 '<(_zip_path)', 603 ], 604 'action': [ 605 'python', 'host/installer/build-installer-archive.py', 606 '<(_temp_dir)', 607 '<(_zip_path)', 608 '--source-file-roots', '<@(remoting_host_installer_win_roots)', 609 '--source-files', '<@(_source_files)', 610 '--generated-files', '<@(_generated_files)', 611 '--generated-files-dst', '<@(_generated_files_dst)', 612 '--defs', '<@(_defs)', 613 ], 614 }, 615 ], # actions 616 }, # end of target 'remoting_me2me_host_archive' 617 ], # end of 'targets' 618 }], # '<(wix_path) != ""' 619 620 ], # end of 'conditions' 621 } 622