Revert of Merge apps/pref* to extensions/browser/pref* (patchset #1 of https://codere...
[chromium-blink-merge.git] / chrome / browser / BUILD.gn
blob7c71f3db55b391118583a0054469d1879fcf045b
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.
5 import("//build/config/crypto.gni")
6 import("//build/config/features.gni")
7 import("//build/config/ui.gni")
8 import("//components/nacl/nacl_defines.gni")
9 import("//tools/grit/grit_rule.gni")
11 about_credits_file = "$target_gen_dir/about_credits.html"
12 additional_modules_list_file =
13     "$root_gen_dir/chrome/browser/internal/additional_modules_list.txt"
15 gypi_values = exec_script(
16     "//build/gypi_to_gn.py",
17     [ rebase_path("../chrome_browser.gypi") ],
18     "scope",
19     [ "../chrome_browser.gypi" ])
21 static_library("browser") {
22   configs += [ "//build/config/compiler:wexit_time_destructors" ]
23   defines = []
24   sources = []
25   libs = []
26   ldflags = []
28   # iOS/non-iOS shared deps. New dependencies should generally be added in the
29   # non-iOS deps below.
30   deps = [
31     "//base/allocator",
32     "//chrome:extra_resources",
33     "//chrome:resources",
34     "//chrome:strings",
35     "//chrome/app:generated_resources_map",
36     "//chrome/app/resources:platform_locale_settings",
37     "//chrome/app/theme:theme_resources",
38     "//chrome/browser/history:in_memory_url_index_cache_proto",
39     "//chrome/browser/net:cert_logger_proto",
40     "//chrome/browser/net:probe_message_proto",
41     "//chrome/browser/ui",
42     "//chrome/common",
43     "//chrome/common/net",
44     "//components/autofill/core/browser",
45     "//components/captive_portal",
46     "//components/cloud_devices/common",
47     "//components/content_settings/core/common",
48     "//components/crx_file",
49     "//components/data_reduction_proxy/browser",
50     "//components/domain_reliability",
51     "//components/favicon_base",
52     "//components/favicon/core",
53     "//components/feedback",
54     "//components/gcm_driver",
55     "//components/history/core/browser",
56     "//components/history/core/common",
57     "//components/metrics:net",
58     "//components/navigation_metrics",
59     "//components/omnibox",
60     "//components/os_crypt",
61     "//components/policy:policy_component",
62     "//components/query_parser",
63     "//components/rappor",
64     "//components/search",
65     "//components/signin/core/browser",
66     "//components/startup_metric_utils",
67     "//components/strings",
68     "//components/suggestions",
69     "//components/translate/core/browser",
70     "//components/translate/core/common",
71     "//components/url_fixer",
72     "//components/user_prefs",
73     "//components/webdata/common",
74     "//content/public/browser",
75     "//content/public/common",
76     "//courgette:courgette_lib",
77     "//crypto",
78     "//google_apis",
79     "//jingle:notifier",
80     "//skia",
81     "//sql",
82     "//sync",
83     "//third_party/cacheinvalidation",
84     "//third_party/icu",
85     "//third_party/libxml",
86     "//third_party/libjingle",
87     "//third_party/widevine/cdm:version_h",
88     "//third_party/zlib",
89     "//third_party/zlib:minizip",
90     "//third_party/zlib:zip",
91     "//ui/base",
92     "//ui/events",
93     "//ui/gfx",
94     "//ui/gfx/geometry",
95     "//ui/message_center",
96     "//ui/shell_dialogs",
97     "//ui/strings",
98     "//ui/resources",
99     # TODO(GYP)
100     #"../components/components.gyp:bookmarks_browser",
101     #"../components/components.gyp:google_core_browser",
102     #"../components/components.gyp:infobars_core",
103     #"../components/components.gyp:invalidation",
104     #"../components/components.gyp:network_time",
105     #"../components/components.gyp:omaha_query_params",
106     #"../components/components.gyp:password_manager_core_browser",
107     #"../components/components.gyp:password_manager_core_common",
108     #"../components/components.gyp:precache_core",
109     #"../components/components.gyp:search_engines",
110     #"../components/components.gyp:search_provider_logos",
111     #"../components/components.gyp:sync_driver",
112   ]
114   forward_dependent_configs_from = [
115     "//components/autofill/core/browser",
116     "//content/public/browser",
117     "//sql",
118     "//sync",
119   ]
121   if (!is_ios) {
122     sources += rebase_path(gypi_values.chrome_browser_non_ios_sources,
123                            ".", "//chrome")
124     #TODO(GYP) Add these sources:
125     #        # These files are generated by GRIT.
126     #        '<(grit_out_dir)/grit/component_extension_resources_map.cc',
127     #        '<(grit_out_dir)/grit/theme_resources_map.cc',
128     #        '<(SHARED_INTERMEDIATE_DIR)/ui/resources/grit/ui_resources_map.cc',
129     #
130     #        # This file is generated by
131     #        # chrome/browser/metrics/variations/generate_resources_map.py
132     #        '<(SHARED_INTERMEDIATE_DIR)/chrome/browser/metrics/variations/generated_resources_map.cc',
134     defines = nacl_defines
136     # TODO(GYP) remove this when the real webrtc target is used below.
137     configs += [ "//content:webrtc_stub_config" ]
139     deps += [
140       "//cc",
141       "//chrome/browser/devtools",
142       "//chrome/browser/performance_monitor",
143       "//chrome/common/extensions/api:api",
144       "//chrome/installer/util",
145       "//components/autofill/content/browser",
146       "//components/dom_distiller/content",
147       "//components/keyed_service/content",
148       "//components/navigation_interception",
149       "//components/password_manager/content/browser",
150       "//components/precache/content",
151       "//components/sessions",
152       "//components/storage_monitor",
153       "//components/translate/content/browser",
154       "//components/url_matcher",
155       "//components/usb_service",
156       "//components/visitedlink/browser",
157       "//components/visitedlink/common",
158       "//components/web_modal",
159       "//content/app/resources",
160       "//media",
161       "//media/cast:net",
162       "//mojo/environment:chromium",
163       "//mojo/public/cpp/bindings",
164       "//mojo/public/js/bindings",
165       "//mojo/system",
166       "//net:net_with_v8",
167       "//third_party/WebKit/public:resources",
168       "//third_party/adobe/flash:flapper_version_h",
169       "//third_party/expat",
170       "//third_party/leveldatabase",
171       "//third_party/libaddressinput",
172       "//third_party/libyuv",
173       "//third_party/npapi",
174       "//third_party/re2",
175       "//third_party/smhasher:cityhash",
176       "//ui/gl",
177       "//ui/surface",
178       "//ui/web_dialogs",
179       "//v8",
180       "//webkit/browser:storage",
181       "//webkit/common",
182       "//webkit/common:storage",
183       #"apps",  TODO(GYP)
184       ## TODO(tonyg): Remove this dependency (crbug.com/280157).
185       #"../testing/perf/perf_test.gyp:*",  TODO(GYP)
186       # Note: for this one also remove the webrtc_stub_config
187       #"../third_party/webrtc/modules/modules.gyp:desktop_capture",  TODO(GYP)
188     ]
189   } else {  # iOS
190     sources += rebase_path(gypi_values.chrome_browser_ios_sources,
191                           ".", "//chrome")
192     deps += [
193       "//net",
194     ]
195     libs += [
196       "CoreTelephony.framework",
197       "CoreText.framework",
198       "MobileCoreServices.framework",
199       "QuartzCore.framework",
200     ]
201     ldflags += [ "-weak_framework", "CoreImage" ]
202   }
204   if (is_win || is_mac) {
205     sources += rebase_path(gypi_values.chrome_browser_win_mac_sources,
206                            ".", "//chrome")
207   }
208   if (!is_android && !is_ios && !is_chromeos && enable_configuration_policy) {
209     sources += [
210       "net/disk_cache_dir_policy_handler.cc",
211       "net/disk_cache_dir_policy_handler.h",
212     ]
213   }
214   if (!is_android && !is_ios && enable_configuration_policy) {
215     sources += [
216       "download/download_dir_policy_handler.cc",
217       "download/download_dir_policy_handler.h",
218     ]
219   }
220   if (is_mac) {
221     sources += rebase_path(gypi_values.chrome_browser_mac_sources,
222                            ".", "//chrome")
223     deps += [
224       #"app_shim"  TODO(GYP)
225     ]
226   }
227   if (cld2_data_source == "component") {
228     sources += [
229       "component_updater/cld_component_installer.cc",
230       "component_updater/cld_component_installer.h",
231     ]
232   }
233   if (enable_extensions) {
234     deps += [
235       "//chrome/browser/extensions",
236       "//chrome/browser/sync_file_system/drive_backend:sync_file_system_drive_proto",
237     ]
238     sources += rebase_path(gypi_values.chrome_browser_extensions_sources,
239                            ".", "//chrome")
240   }
241   if (enable_background) {
242     sources += rebase_path(gypi_values.chrome_browser_background_sources,
243                            ".", "//chrome")
244     if (!use_aura || is_win) {
245       sources -= [ "background/background_mode_manager_aura.cc" ]
246     }
247   }
248   if (enable_task_manager) {
249     sources += rebase_path(gypi_values.chrome_browser_task_manager_sources,
250                            ".", "//chrome")
251   }
252   if (enable_spellcheck) {
253     sources += rebase_path(gypi_values.chrome_browser_spellchecker_sources,
254                            ".", "//chrome")
255     deps += [ "//third_party/hunspell" ]
256   }
257   if (enable_nacl) {
258     sources += rebase_path(gypi_values.chrome_browser_nacl_sources,
259                            ".", "//chrome")
260     #deps += [ "//components/nacl:nacl_browser" ]  TODO(GYP)
261   }
262   # ["debug_devtools==1", {  TODO(GYP)
263   #   "defines": [
264   #     "DEBUG_DEVTOOLS=1",
265   # ],
266   if (enable_configuration_policy) {
267     sources += rebase_path(
268         gypi_values.chrome_browser_policy_shared_with_ios_sources,
269         ".", "//chrome")
270     deps += [
271       "//components/policy",
272       "//components/policy/proto",
273     ]
274     if (!is_ios) {
275       sources += rebase_path(
276           gypi_values.chrome_browser_policy_non_ios_sources,
277           ".", "//chrome")
278     }
279     if (!is_chromeos) {
280       sources += rebase_path(
281           gypi_values.chrome_browser_policy_shared_with_ios_not_chromeos_sources,
282           ".", "//chrome")
283     }
284     if (is_win || is_mac || is_desktop_linux) {
285       sources += rebase_path(gypi_values.chrome_browser_policy_desktop_sources,
286                              ".", "//chrome")
287     }
288     if (is_android || is_ios) {
289       sources += rebase_path(gypi_values.chrome_browser_mobile_sources,
290                              ".", "//chrome")
291     } else {  # Non-mobile
292       deps += [
293         #"policy_path_parser",  TODO(GYP)
294       ]
295     }
296   } else {
297     # Configuration policy disabled.
298     sources += rebase_path(gypi_values.chrome_browser_policy_disabled_sources,
299                            ".", "//chrome")
300   }
302   if (enable_plugins) {
303     sources += rebase_path(gypi_values.chrome_browser_plugins_sources,
304                            ".", "//chrome")
305     deps += [
306       "//ppapi:ppapi_ipc",
307     ]
308   }
309   if (safe_browsing_mode != 0) {
310     sources += rebase_path(
311         gypi_values.chrome_browser_basic_safe_browsing_sources,
312         ".", "//chrome")
313     deps += [
314       "//chrome/browser/safe_browsing:chunk_proto",
315       "//chrome/browser/safe_browsing:report_proto",
316     ]
317     if (safe_browsing_mode == 1) {
318       sources += rebase_path(
319           gypi_values.chrome_browser_full_safe_browsing_sources,
320           ".", "//chrome")
321       defines += [ "FULL_SAFE_BROWSING" ]
322       deps += [
323         "//chrome/common/safe_browsing:proto",
324       ]
325     } else if (safe_browsing_mode == 2) {
326       defines += [ "MOBILE_SAFE_BROWSING" ]
327     }
328   }
330   if (is_linux) {
331     configs += [ "//build/config/linux:udev" ]
332     deps += [ "//device/media_transfer_protocol" ]
333   }
334   if (is_linux && !is_chromeos) {
335     deps += [ "//third_party/speech-dispatcher" ]
336   }
338   if (is_chromeos) {
339     sources += rebase_path(gypi_values.chrome_browser_chromeos_sources,
340                            ".", "//chrome")
341     deps += [
342       #"browser_chromeos",  TODO(GYP)
343     ]
344   } else {
345     # Non-ChromeOS.
346     sources += rebase_path(gypi_values.chrome_browser_non_chromeos_sources,
347                            ".", "//chrome")
348   }
350   if (use_cups) {
351     configs += [ "//printing:cups" ]
352   }
353   if (is_desktop_linux) {
354     sources += rebase_path(gypi_values.chrome_browser_gnome_keyring_sources,
355                            ".", "//chrome")
356     configs += [ "//build/config/linux:gnome_keyring" ]
357   }
358   if (use_aura) {
359     sources += rebase_path(gypi_values.chrome_browser_aura_sources,
360                            ".", "//chrome")
361     deps += [
362       "//ui/aura",
363       "//ui/compositor",
364       "//ui/keyboard",
365     ]
366   }
367   if (ui_compositor_image_transport) {
368     deps += [ "//ui/gl" ]
369   }
371   if (use_ash) {
372     sources += rebase_path(gypi_values.chrome_browser_ash_sources,
373                            ".", "//chrome")
374   }
376   if (use_x11) {
377     sources += rebase_path(gypi_values.chrome_browser_x11_sources,
378                            ".", "//chrome")
379     if (!is_chromeos) {
380       configs += [ "//build/config/linux:xscrnsaver" ]
381     }
382   }
383   if (is_posix && !is_mac && !is_ios) {
384     sources += [
385       "//chrome/app/chrome_breakpad_client.cc",
386       "//chrome/app/chrome_breakpad_client.h",
387     ]
388     deps += [
389       "//components/breakpad/app",
390       "//components/breakpad/browser",
391     ]
392   }
393   if (use_nss_certs) {
394     sources += rebase_path(gypi_values.chrome_browser_nss_sources,
395                            ".", "//chrome")
396   }
397   if (enable_notifications) {
398     sources += rebase_path(gypi_values.chrome_browser_notifications_sources,
399                            ".", "//chrome")
400     if (!is_android) {
401       sources += rebase_path(
402           gypi_values.chrome_browser_non_android_notifications_sources,
403           ".", "//chrome")
404     }
405   }
406   if (enable_themes) {
407     sources += rebase_path(gypi_values.chrome_browser_themes_sources,
408                            ".", "//chrome")
409   }
411   if (printing_mode != 0) {
412     # Some form of printing support.
413     sources += rebase_path(gypi_values.chrome_browser_basic_printing_sources,
414                            ".", "//chrome")
415     deps += [
416       "//printing",
417     ]
418     if (is_win && win_pdf_metafile_for_printing) {
419       sources += rebase_path(gypi_values.chrome_browser_printing_emf_sources,
420                              ".", "//chrome")
421     }
422     if (printing_mode == 1) {
423       # Full printing on top of the above.
424       sources += rebase_path(gypi_values.chrome_browser_full_printing_sources,
425                              ".", "//chrome")
426     } else if (printing_mode == 2) {
427       # Partial-only printing support.
428       sources += rebase_path(
429           gypi_values.chrome_browser_basic_only_printing_sources,
430           ".", "//chrome")
431     }
432   }
433   if (enable_captive_portal_detection) {
434     sources += rebase_path(gypi_values.chrome_browser_captive_portal_sources,
435                            ".", "//chrome")
436   }
437   if (enable_session_service) {
438     sources += rebase_path(gypi_values.chrome_browser_session_service_sources,
439                            ".", "//chrome")
440   }
442   if (is_android || is_ios) {
443     # Mobile.
444     sources += rebase_path(gypi_values.chrome_browser_mobile_sources,
445                            ".", "//chrome")
446   } else {
447     # Non-mobile.
448     sources += rebase_path(gypi_values.chrome_browser_non_mobile_sources,
449                            ".", "//chrome")
450   }
452   if (is_android) {
453     sources += rebase_path(gypi_values.chrome_browser_android_sources,
454                            ".", "//chrome")
455     deps += [
456       "//components/cdm/browser",
457       #"../components/components.gyp:web_contents_delegate_android",  TODO(GYP)
458       #"chrome_browser_jni_headers",  TODO(GYP)
459     ]
460     deps -= [
461       "//third_party/libaddressinput",
462       "//components/feedback",
463       "//components/storage_monitor",
464       "//components/usb_service",
465       "//components/web_modal",
466     ]
467   } else {
468     sources += rebase_path(gypi_values.chrome_browser_non_android_sources,
469                            ".", "//chrome")
470   }
472   if (is_mac) {
473     deps += [
474       "//third_party/google_toolbox_for_mac",
475       #"../third_party/mozilla/mozilla.gyp:mozilla",  TODO(GYP)
476     ]
477     libs += [
478       "Accelerate.framework",
479       "AddressBook.framework",
480       "AudioUnit.framework",
481       "DiskArbitration.framework",
482       "IOKit.framework",
483       "ImageCaptureCore.framework",
484       "OpenGL.framework",
485       "QuartzCore.framework",
486       "SecurityInterface.framework",
487     ]
488   }
490   if (enable_rlz) {
491     sources += rebase_path(gypi_values.chrome_browser_rlz_sources,
492                            ".", "//chrome")
493     deps += [ "//rlz:rlz_lib" ]
494   }
496   # TODO(GYP)
497   # Temporary fix to break the browser target into smaller chunks so it
498   # will link with goma builds.
499   #["OS=="win" and chromium_win_pch==0", {
500   #  "msvs_shard": 4,
501   #}],
503   if (is_win) {
504     sources += rebase_path(gypi_values.chrome_browser_win_sources,
505                            ".", "//chrome")
506     deps += [
507       "//chrome:version_header",
508       "//chrome/installer/util:strings",
509       "//third_party/iaccessible2",
510       "//third_party/isimpledom",
511       "//third_party/wtl",
512       "//ui/views",
513       "//ui/views/controls/webview",
514       #"chrome_process_finder",  TODO(GYP)
515       #"../chrome_elf/chrome_elf.gyp:chrome_elf",  TODO(GYP)
516       #"../chrome_elf/chrome_elf.gyp:chrome_elf_constants",  TODO(GYP)
517       #"../chrome_elf/chrome_elf.gyp:dll_hash",  TODO(GYP)
518       #"../google_update/google_update.gyp:google_update",  TODO(GYP)
519       #"../ui/metro_viewer/metro_viewer.gyp:metro_viewer_messages",  TODO(GYP)
520       #"../win8/win8.gyp:metro_viewer",  TODO(GYP)
521     ]
522     forward_dependent_configs_from += [
523       "//ui/views",
524       "//ui/views/controls/webview",
525     ]
526   } else {
527     # Non-Windows.
528     sources += rebase_path(gypi_values.chrome_browser_non_win_sources,
529                            ".", "//chrome")
530     if (toolkit_views) {
531       deps += [
532       "//ui/views",
533       "//ui/views/controls/webview",
534       ]
535       # TODO(GYP) why is this needed? Very susicious.
536       #  "include_dirs": [
537       #    "<(INTERMEDIATE_DIR)/chrome",
538       #  ],
539     }
540   }
542   if (is_linux) {
543     sources += rebase_path(gypi_values.chrome_browser_linux_sources,
544                            ".", "//chrome")
545     if (use_aura) {
546       configs += [
547         "//build/config/linux:dbus",
548         "//build/config/linux:fontconfig",
549       ]
550       deps += [
551         "//dbus",
552       ]
553     }
554     if (use_x11) {
555       configs += [ "//build/config/linux:x11" ]
556       deps += [ "//ui/gfx/x" ]
557     }
558   }
560   if (is_desktop_linux) {
561     sources += rebase_path(gypi_values.chrome_browser_desktop_linux_sources,
562                            ".", "//chrome")
563   }
564   if (enable_plugin_installation) {
565     sources += rebase_path(
566         gypi_values.chrome_browser_plugin_installation_sources,
567         ".", "//chrome")
568   }
569   if (enable_app_list) {
570     deps += [
571       "//ui/app_list",
572     ]
573   }
574   if (enable_managed_users) {
575     sources += rebase_path(
576         gypi_values.chrome_browser_supervised_user_sources,
577         ".", "//chrome")
578   }
579   if (enable_webrtc) {
580     sources += rebase_path(
581         gypi_values.chrome_browser_webrtc_sources,
582         ".", "//chrome")
583   }
584   if (enable_service_discovery) {
585     sources += rebase_path(
586         gypi_values.chrome_browser_service_discovery_sources,
587         ".", "//chrome")
588   }
589   if (enable_mdns) {
590     sources += rebase_path(
591         gypi_values.chrome_browser_mdns_sources,
592         ".", "//chrome")
593   }
594   if (!enable_autofill_dialog || is_android || is_ios) {
595     sources -= [
596       "autofill/validation_rules_storage_factory.cc",
597       "autofill/validation_rules_storage_factory.h",
598     ]
599   }
600   if (enable_wifi_bootstrapping) {
601     sources += rebase_path(
602         gypi_values.chrome_browser_wifi_bootstrapping_sources,
603         ".", "//chrome")
604     if (is_win || is_mac) {
605       # TODO(brettw) as of this writing wifi bootstrapping is set on Windows
606       # and Mac, so this test is meaningless. Can we merge these lists?
607       sources += rebase_path(
608           gypi_values.chrome_browser_win_mac_wifi_bootstrapping_sources,
609           ".", "//chrome")
610     }
611   }
614 # GYP version: chrome/chrome_resources.gyp:chrome_resources
615 # (generate_browser_resources action)
616 grit("resources") {
617   source = "browser_resources.grd"
618   output_dir = "$root_gen_dir/chrome"
619   outputs = [
620     "grit/browser_resources.h",
621     "browser_resources.pak",
622   ]
624   omnibox_mojom_file = "$root_gen_dir/chrome/browser/ui/webui/omnibox/omnibox.mojom.js"
626   grit_flags = [
627     "-E", "about_credits_file=" +
628           rebase_path(about_credits_file, root_build_dir),
629     "-E", "additional_modules_list_file=" +
630           rebase_path(additional_modules_list_file, root_build_dir),
631     "-E", "omnibox_mojom_file=" +
632           rebase_path(omnibox_mojom_file, root_build_dir),
633   ]
635   deps = [
636     ":about_credits",
637     ":chrome_internal_resources_gen",
638     "//chrome/browser/ui/webui/omnibox:mojo_bindings",
639   ]
642 # GYP version: chrome/chrome_resource.gyp:about_credits
643 action("about_credits") {
644   script = "//tools/licenses.py"
646   # TODO(phajdan.jr): input dependencies so this can be regenerated
647   # automatically when one of the credits changes. The way this should work is
648   # that licenses.py should write a .d file listing the input dependencies (see
649   # "depfile" in GN).
650   outputs = [ about_credits_file ]
652   args = [
653     "credits",
654     rebase_path(about_credits_file, root_build_dir),
655   ]
658 # GYP version: chrome/chrome_resource.gyp:chrome_internal_resources_gen
659 # TODO(GYP) write internal action
660 if (false) {  #if (is_chrome_branded) {
661   action("chrome_internal_resources_gen") {
662     # TODO(GYP)
663   }
664 } else {
665   group("chrome_internal_resources_gen") {
666     # Empty placeholder.
667   }