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