Add ICU message format support
[chromium-blink-merge.git] / build / config / BUILD.gn
blobe5bba162f3e3b08fe506fd8987de37e79474b183
1 # Copyright (c) 2013 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/allocator.gni")
6 import("//build/config/chrome_build.gni")
7 import("//build/config/crypto.gni")
8 import("//build/config/features.gni")
9 import("//build/config/sanitizers/sanitizers.gni")
10 import("//build/config/ui.gni")
11 import("//build/module_args/v8.gni")
12 import("//build/toolchain/goma.gni")
14 declare_args() {
15   # When set (the default) enables C++ iterator debugging in debug builds.
16   # Iterator debugging is always off in release builds (technically, this flag
17   # affects the "debug" config, which is always available but applied by
18   # default only in debug builds).
19   #
20   # Iterator debugging is generally useful for catching bugs. But it can
21   # introduce extra locking to check the state of an iterator against the state
22   # of the current object. For iterator- and thread-heavy code, this can
23   # significantly slow execution.
24   enable_iterator_debugging = true
26   # Set to true to not store any build metadata, e.g. ifdef out all __DATE__
27   # and __TIME__. Set to 0 to reenable the use of these macros in the code
28   # base. See http://crbug.com/314403.
29   #
30   # Continue to embed build meta data in Official builds, basically the
31   # time it was built.
32   # TODO(maruel): This decision should be revisited because having an
33   # official deterministic build has high value too but MSVC toolset can't
34   # generate anything deterministic with WPO enabled AFAIK.
35   dont_embed_build_metadata = !is_official_build
37   # Set to true to enable dcheck in Release builds.
38   dcheck_always_on = false
40   # Set to true to compile with the OpenGL ES 2.0 conformance tests.
41   internal_gles2_conform_tests = false
44 # TODO(brettw) Most of these should be removed. Instead of global feature
45 # flags, we should have more modular flags that apply only to a target and its
46 # dependents. For example, depending on the "x11" meta-target should define
47 # USE_X11 for all dependents so that everything that could use X11 gets the
48 # define, but anything that doesn't depend on X11 doesn't see it.
50 # For now we define these globally to match the current GYP build.
51 config("feature_flags") {
52   # TODO(brettw) this probably needs to be parameterized.
53   defines = [
54     "V8_DEPRECATION_WARNINGS",  # Don't use deprecated V8 APIs anywhere.
55     "CLD_VERSION=$cld_version",
56   ]
57   if (enable_mdns) {
58     defines += [ "ENABLE_MDNS=1" ]
59   }
60   if (enable_notifications) {
61     defines += [ "ENABLE_NOTIFICATIONS" ]
62   }
63   if (enable_pepper_cdms) {
64     # TODO(brettw) should probably be "=1"
65     defines += [ "ENABLE_PEPPER_CDMS" ]
66   }
67   if (enable_browser_cdms) {
68     # TODO(brettw) should probably be "=1"
69     defines += [ "ENABLE_BROWSER_CDMS" ]
70   }
71   if (enable_plugins) {
72     defines += [ "ENABLE_PLUGINS=1" ]
73   }
74   if (enable_basic_printing || enable_print_preview) {
75     # Convenience define for ENABLE_BASIC_PRINTING || ENABLE_PRINT_PREVIEW.
76     defines += [ "ENABLE_PRINTING=1" ]
77     if (enable_basic_printing) {
78       # Enable basic printing support and UI.
79       defines += [ "ENABLE_BASIC_PRINTING=1" ]
80     }
81     if (enable_print_preview) {
82       # Enable printing with print preview.
83       # Can be defined without ENABLE_BASIC_PRINTING.
84       defines += [ "ENABLE_PRINT_PREVIEW=1" ]
85     }
86   }
87   if (enable_spellcheck) {
88     defines += [ "ENABLE_SPELLCHECK=1" ]
89   }
90   if (use_browser_spellchecker) {
91     defines += [ "USE_BROWSER_SPELLCHECKER=1" ]
92   }
93   if (dont_embed_build_metadata) {
94     defines += [ "DONT_EMBED_BUILD_METADATA" ]
95   }
96   if (dcheck_always_on) {
97     defines += [ "DCHECK_ALWAYS_ON=1" ]
98   }
99   if (use_udev) {
100     # TODO(brettw) should probably be "=1".
101     defines += [ "USE_UDEV" ]
102   }
103   if (ui_compositor_image_transport) {
104     # TODO(brettw) should probably be "=1".
105     defines += [ "UI_COMPOSITOR_IMAGE_TRANSPORT" ]
106   }
107   if (use_ash) {
108     defines += [ "USE_ASH=1" ]
109   }
110   if (use_aura) {
111     defines += [ "USE_AURA=1" ]
112   }
113   if (use_pango) {
114     defines += [ "USE_PANGO=1" ]
115   }
116   if (use_cairo) {
117     defines += [ "USE_CAIRO=1" ]
118   }
119   if (use_clipboard_aurax11) {
120     defines += [ "USE_CLIPBOARD_AURAX11=1" ]
121   }
122   if (use_default_render_theme) {
123     defines += [ "USE_DEFAULT_RENDER_THEME=1" ]
124   }
125   if (use_glib) {
126     defines += [ "USE_GLIB=1" ]
127   }
128   if (use_openssl) {
129     defines += [ "USE_OPENSSL=1" ]
130   }
131   if (use_openssl_certs) {
132     defines += [ "USE_OPENSSL_CERTS=1" ]
133   }
134   if (use_nss_certs) {
135     defines += [ "USE_NSS_CERTS=1" ]
136   }
137   if (use_ozone) {
138     defines += [ "USE_OZONE=1" ]
139   }
140   if (use_x11) {
141     defines += [ "USE_X11=1" ]
142   }
143   if (use_allocator != "tcmalloc") {
144     defines += [ "NO_TCMALLOC" ]
145   }
146   if (is_asan || is_lsan || is_tsan || is_msan) {
147     defines += [
148       "MEMORY_TOOL_REPLACES_ALLOCATOR",
149       "MEMORY_SANITIZER_INITIAL_SIZE",
150     ]
151   }
152   if (is_asan) {
153     defines += [ "ADDRESS_SANITIZER" ]
154   }
155   if (is_lsan) {
156     defines += [
157       "LEAK_SANITIZER",
158       "WTF_USE_LEAK_SANITIZER=1",
159     ]
160   }
161   if (is_tsan) {
162     defines += [
163       "THREAD_SANITIZER",
164       "DYNAMIC_ANNOTATIONS_EXTERNAL_IMPL=1",
165       "WTF_USE_DYNAMIC_ANNOTATIONS_NOIMPL=1",
166     ]
167   }
168   if (is_msan) {
169     defines += [ "MEMORY_SANITIZER" ]
170   }
171   if (enable_webrtc) {
172     defines += [ "ENABLE_WEBRTC=1" ]
173   }
174   if (disable_ftp_support) {
175     defines += [ "DISABLE_FTP_SUPPORT=1" ]
176   }
177   if (!enable_nacl) {
178     defines += [ "DISABLE_NACL" ]
179   }
180   if (enable_extensions) {
181     defines += [ "ENABLE_EXTENSIONS=1" ]
182   }
183   if (enable_configuration_policy) {
184     defines += [ "ENABLE_CONFIGURATION_POLICY" ]
185   }
186   if (enable_task_manager) {
187     defines += [ "ENABLE_TASK_MANAGER=1" ]
188   }
189   if (enable_themes) {
190     defines += [ "ENABLE_THEMES=1" ]
191   }
192   if (enable_captive_portal_detection) {
193     defines += [ "ENABLE_CAPTIVE_PORTAL_DETECTION=1" ]
194   }
195   if (enable_session_service) {
196     defines += [ "ENABLE_SESSION_SERVICE=1" ]
197   }
198   if (enable_rlz) {
199     defines += [ "ENABLE_RLZ" ]
200   }
201   if (enable_plugin_installation) {
202     defines += [ "ENABLE_PLUGIN_INSTALLATION=1" ]
203   }
204   if (enable_app_list) {
205     defines += [ "ENABLE_APP_LIST=1" ]
206   }
207   if (enable_settings_app) {
208     defines += [ "ENABLE_SETTINGS_APP=1" ]
209   }
210   if (enable_supervised_users) {
211     defines += [ "ENABLE_SUPERVISED_USERS=1" ]
212   }
213   if (enable_service_discovery) {
214     defines += [ "ENABLE_SERVICE_DISCOVERY=1" ]
215   }
216   if (enable_autofill_dialog) {
217     defines += [ "ENABLE_AUTOFILL_DIALOG=1" ]
218   }
219   if (enable_wifi_bootstrapping) {
220     defines += [ "ENABLE_WIFI_BOOTSTRAPPING=1" ]
221   }
222   if (enable_image_loader_extension) {
223     defines += [ "IMAGE_LOADER_EXTENSION=1" ]
224   }
225   if (enable_google_now) {
226     defines += [ "ENABLE_GOOGLE_NOW=1" ]
227   }
228   if (enable_one_click_signin) {
229     defines += [ "ENABLE_ONE_CLICK_SIGNIN" ]
230   }
231   if (enable_hidpi) {
232     defines += [ "ENABLE_HIDPI=1" ]
233   }
234   if (enable_topchrome_md) {
235     defines += [ "ENABLE_TOPCHROME_MD=1" ]
236   }
237   if (proprietary_codecs) {
238     defines += [ "USE_PROPRIETARY_CODECS" ]
239   }
240   if (enable_hangout_services_extension) {
241     defines += [ "ENABLE_HANGOUT_SERVICES_EXTENSION=1" ]
242   }
243   if (v8_use_external_startup_data) {
244     defines += [ "V8_USE_EXTERNAL_STARTUP_DATA" ]
245   }
246   if (enable_background) {
247     defines += [ "ENABLE_BACKGROUND=1" ]
248   }
249   if (enable_pre_sync_backup) {
250     defines += [ "ENABLE_PRE_SYNC_BACKUP" ]
251   }
252   if (enable_video_hole) {
253     defines += [ "VIDEO_HOLE=1" ]
254   }
255   if (safe_browsing_mode == 1) {
256     defines += [ "FULL_SAFE_BROWSING" ]
257     defines += [ "SAFE_BROWSING_CSD" ]
258     defines += [ "SAFE_BROWSING_DB_LOCAL" ]
259     defines += [ "SAFE_BROWSING_SERVICE" ]
260   } else if (safe_browsing_mode == 2) {
261     defines += [ "MOBILE_SAFE_BROWSING" ]
262     defines += [ "SAFE_BROWSING_SERVICE" ]
263   } else if (safe_browsing_mode == 3) {
264     defines += [ "MOBILE_SAFE_BROWSING" ]
265     defines += [ "SAFE_BROWSING_DB_REMOTE" ]
266     defines += [ "SAFE_BROWSING_SERVICE" ]
267   }
268   if (is_official_build) {
269     defines += [ "OFFICIAL_BUILD" ]
270   }
271   if (is_chrome_branded) {
272     defines += [ "GOOGLE_CHROME_BUILD" ]
273   } else {
274     defines += [ "CHROMIUM_BUILD" ]
275   }
276   if (enable_media_router) {
277     defines += [ "ENABLE_MEDIA_ROUTER=1" ]
278   }
279   if (enable_webvr) {
280     defines += [ "ENABLE_WEBVR" ]
281   }
282   if (is_syzyasan) {
283     defines += [
284       "SYZYASAN",
285       "MEMORY_TOOL_REPLACES_ALLOCATOR",
286       "MEMORY_SANITIZER_INITIAL_SIZE",
287     ]
288   }
289   if (!fieldtrial_testing_like_official_build && !is_chrome_branded) {
290     defines += [ "FIELDTRIAL_TESTING_ENABLED" ]
291   }
294 # Debug/release ----------------------------------------------------------------
296 config("debug") {
297   defines = [
298     "_DEBUG",
299     "DYNAMIC_ANNOTATIONS_ENABLED=1",
300     "WTF_USE_DYNAMIC_ANNOTATIONS=1",
301   ]
303   if (is_nacl) {
304     defines += [ "DYNAMIC_ANNOTATIONS_PREFIX=NACL_" ]
305   }
307   if (is_win) {
308     if (!enable_iterator_debugging) {
309       # Iterator debugging is enabled by default by the compiler on debug
310       # builds, and we have to tell it to turn it off.
311       defines += [ "_HAS_ITERATOR_DEBUGGING=0" ]
312     }
313   } else if (is_linux && current_cpu == "x64" && enable_iterator_debugging) {
314     # Enable libstdc++ debugging facilities to help catch problems early, see
315     # http://crbug.com/65151 .
316     # TODO(phajdan.jr): Should we enable this for all of POSIX?
317     defines += [ "_GLIBCXX_DEBUG=1" ]
318   }
321 config("release") {
322   defines = [ "NDEBUG" ]
324   # Sanitizers.
325   # TODO(GYP) The GYP build has "release_valgrind_build == 0" for this
326   # condition. When Valgrind is set up, we need to do the same here.
327   if (is_tsan) {
328     defines += [
329       "DYNAMIC_ANNOTATIONS_ENABLED=1",
330       "WTF_USE_DYNAMIC_ANNOTATIONS=1",
331     ]
332   } else {
333     defines += [ "NVALGRIND" ]
334     if (!is_nacl) {
335       # NaCl always enables dynamic annotations. Currently this value is set to
336       # 1 for all .nexes.
337       defines += [ "DYNAMIC_ANNOTATIONS_ENABLED=0" ]
338     }
339   }
342 # Default libraries ------------------------------------------------------------
344 # This config defines the default libraries applied to all targets.
345 config("default_libs") {
346   if (is_win) {
347     # TODO(brettw) this list of defaults should probably be smaller, and
348     # instead the targets that use the less common ones (e.g. wininet or
349     # winspool) should include those explicitly.
350     libs = [
351       "advapi32.lib",
352       "comdlg32.lib",
353       "dbghelp.lib",
354       "delayimp.lib",
355       "dnsapi.lib",
356       "gdi32.lib",
357       "kernel32.lib",
358       "msimg32.lib",
359       "odbc32.lib",
360       "odbccp32.lib",
361       "ole32.lib",
362       "oleaut32.lib",
363       "psapi.lib",
364       "shell32.lib",
365       "shlwapi.lib",
366       "user32.lib",
367       "usp10.lib",
368       "uuid.lib",
369       "version.lib",
370       "wininet.lib",
371       "winmm.lib",
372       "winspool.lib",
373       "ws2_32.lib",
375       # Please don't add more stuff here. We should actually be making this
376       # list smaller, since all common things should be covered. If you need
377       # some extra libraries, please just add a libs = [ "foo.lib" ] to your
378       # target that needs it.
379     ]
380   } else if (is_android) {
381     # Android uses -nostdlib so we need to add even libc here.
382     libs = [
383       # TODO(brettw) write a version of this, hopefully we can express this
384       # without forking out to GCC just to get the library name. The android
385       # toolchain directory should probably be extracted into a .gni file that
386       # this file and the android toolchain .gn file can share.
387       #   # Manually link the libgcc.a that the cross compiler uses.
388       #   '<!(<(android_toolchain)/*-gcc -print-libgcc-file-name)',
389       "c",
390       "dl",
391       "m",
392     ]
393   } else if (is_mac) {
394     libs = [
395       "AppKit.framework",
396       "ApplicationServices.framework",
397       "Carbon.framework",
398       "CoreFoundation.framework",
399       "Foundation.framework",
400       "IOKit.framework",
401       "OpenGL.framework",
402       "Security.framework",
403     ]
404   } else if (is_ios) {
405     # The libraries listed here will be specified for both the target and the
406     # host. Only the common ones should be listed here.
407     libs = [
408       "CoreFoundation.framework",
409       "CoreGraphics.framework",
410       "CoreText.framework",
411       "Foundation.framework",
412     ]
413   } else if (is_linux) {
414     libs = [ "dl" ]
415   }
418 # Add this config to your target to enable precompiled headers.
420 # On Windows, precompiled headers are done on a per-target basis. If you have
421 # just a couple of files, the time it takes to precompile (~2 seconds) can
422 # actually be longer than the time saved. On a Z620, a 100 file target compiles
423 # about 2 seconds faster with precompiled headers, with greater savings for
424 # larger targets.
426 # Recommend precompiled headers for targets with more than 50 .cc files.
427 config("precompiled_headers") {
428   if (is_win && !is_official_build && !use_goma) {
429     # This is a string rather than a file GN knows about. It has to match
430     # exactly what's in the /FI flag below, and what might appear in the source
431     # code in quotes for an #include directive.
432     precompiled_header = "build/precompile.h"
434     # This is a file that GN will compile with the above header. It will be
435     # implicitly added to the sources (potentially multiple times, with one
436     # variant for each language used in the target).
437     precompiled_source = "//build/precompile.cc"
439     # Force include the header.
440     cflags = [ "/FI$precompiled_header" ]
442     # Disable warning for "this file was empty after preprocessing". This
443     # error is generated only in C mode for ANSI compatibility. It conflicts
444     # with precompiled headers since the source file that's "compiled" for
445     # making the precompiled header is empty.
446     #
447     # This error doesn't happen every time. In VS2013, it seems if the .pch
448     # file doesn't exist, no error will be generated (probably MS tested this
449     # case but forgot the other one?). To reproduce this error, do a build,
450     # then delete the precompile.c.obj file, then build again.
451     cflags_c = [ "/wd4206" ]
452   }