blob: 040eea2880dcffa6cac906c32fef0b9dca46c010 [file] [log] [blame]
jshin@chromium.orgb5648402014-04-01 20:51:44 +00001# Copyright (c) 2012 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 'includes': [
7 'icu.gypi',
8 ],
9 'variables': {
10 'use_system_icu%': 0,
11 'icu_use_data_file_flag%': 0,
12 'want_separate_host_toolset%': 1,
13 },
14 'target_defaults': {
15 'direct_dependent_settings': {
16 'defines': [
17 # Tell ICU to not insert |using namespace icu;| into its headers,
18 # so that chrome's source explicitly has to use |icu::|.
19 'U_USING_ICU_NAMESPACE=0',
jshin@chromium.org51fac8a2014-04-30 22:25:11 +000020 # We don't use ICU plugins and dyload is only necessary for them.
21 # NaCl-related builds also fail looking for dlfcn.h when it's enabled.
22 'U_ENABLE_DYLOAD=0',
jshin@chromium.orgb5648402014-04-01 20:51:44 +000023 ],
24 },
25 'defines': [
26 'U_USING_ICU_NAMESPACE=0',
27 'HAVE_DLOPEN=0',
28 ],
29 'conditions': [
30 ['component=="static_library"', {
31 'defines': [
32 'U_STATIC_IMPLEMENTATION',
33 ],
34 }],
35 ['(OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris" \
36 or OS=="netbsd" or OS=="mac" or OS=="android" or OS=="qnx") and \
37 (target_arch=="arm" or target_arch=="ia32" or \
38 target_arch=="mipsel")', {
39 'target_conditions': [
40 ['_toolset=="host"', {
41 'cflags': [ '-m32' ],
42 'ldflags': [ '-m32' ],
43 'asflags': [ '-32' ],
44 'xcode_settings': {
45 'ARCHS': [ 'i386' ],
46 },
47 }],
48 ],
49 }],
jshin@chromium.org87a2c3f2014-04-30 08:59:20 +000050 ['(OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris" \
51 or OS=="netbsd" or OS=="mac" or OS=="android" or OS=="qnx") and \
52 (target_arch=="arm64" or target_arch=="x64" or \
53 target_arch=="mipsel64")', {
54 'target_conditions': [
55 ['_toolset=="host"', {
56 'cflags': [ '-m64' ],
57 'ldflags': [ '-m64' ],
58 'asflags': [ '-64' ],
59 'xcode_settings': {
60 'ARCHS': [ 'x86_64' ],
61 },
62 }],
63 ],
64 }],
jshin@chromium.orgb5648402014-04-01 20:51:44 +000065 ],
66 'include_dirs': [
67 'source/common',
68 'source/i18n',
69 ],
70 'msvs_disabled_warnings': [4005, 4068, 4355, 4996, 4267],
71 },
72 'conditions': [
73 ['use_system_icu==0 or want_separate_host_toolset==1', {
74 'targets': [
75 {
jshin@chromium.orgdab7f1f2014-06-10 00:57:27 +000076 'target_name': 'copy_icudtl_dat',
77 'type': 'none',
78 # icudtl.dat is the same for both host/target, so this only supports a
79 # single toolset. If a target requires that the .dat file be copied
80 # to the output directory, it should explicitly depend on this target
81 # with the host toolset (like copy_icudtl_dat#host).
82 'toolsets': [ 'host' ],
83 'copies': [{
84 'destination': '<(PRODUCT_DIR)',
85 'conditions': [
86 ['OS == "android"', {
87 'files': [
88 'android/icudtl.dat',
89 ],
90 } , { # else: OS != android
91 'files': [
92 'source/data/in/icudtl.dat',
93 ],
94 }],
95 ],
96 }],
97 },
98 {
jshin@chromium.orgb5648402014-04-01 20:51:44 +000099 'target_name': 'icudata',
100 'type': 'static_library',
101 'defines': [
102 'U_HIDE_DATA_SYMBOL',
103 ],
104 'sources': [
105 # These are hand-generated, but will do for now. The linux
jshin@chromium.org4e493262014-04-18 17:35:23 +0000106 # version is an identical copy of the (mac) icudtl_dat.S file,
jshin@chromium.orgb5648402014-04-01 20:51:44 +0000107 # modulo removal of the .private_extern and .const directives and
108 # with no leading underscore on the icudt52_dat symbol.
jshin@chromium.org4e493262014-04-18 17:35:23 +0000109 'android/icudtl_dat.S',
110 'linux/icudtl_dat.S',
111 'mac/icudtl_dat.S',
jshin@chromium.orgb5648402014-04-01 20:51:44 +0000112 ],
113 'conditions': [
114 [ 'use_system_icu==1 and want_separate_host_toolset==1', {
115 'toolsets': ['host'],
116 }],
117 [ 'use_system_icu==0 and want_separate_host_toolset==1', {
118 'toolsets': ['host', 'target'],
119 }],
120 [ 'use_system_icu==0 and want_separate_host_toolset==0', {
121 'toolsets': ['target'],
122 }],
123 [ 'OS == "win" and icu_use_data_file_flag==0', {
124 'type': 'none',
125 'copies': [
126 {
127 'destination': '<(PRODUCT_DIR)',
128 'files': [
129 'windows/icudt.dll',
130 ],
131 },
132 ],
133 }],
134 [ 'icu_use_data_file_flag==1', {
135 # Remove any assembly data file.
jshin@chromium.org4e493262014-04-18 17:35:23 +0000136 'sources/': [['exclude', 'icudtl_dat']],
jshin@chromium.orgb5648402014-04-01 20:51:44 +0000137 # Compile in the stub data symbol.
138 'sources': ['source/stubdata/stubdata.c'],
jshin@chromium.org87a2c3f2014-04-30 08:59:20 +0000139
jshin@chromium.orgb5648402014-04-01 20:51:44 +0000140 # Make sure any binary depending on this gets the data file.
141 'conditions': [
142 ['OS != "ios"', {
jshin@chromium.orgdab7f1f2014-06-10 00:57:27 +0000143 'dependencies': [
144 'copy_icudtl_dat#host',
145 ],
jshin@chromium.orgb5648402014-04-01 20:51:44 +0000146 } , { # else: OS=="ios"
147 'link_settings': {
148 'mac_bundle_resources': [
149 'source/data/in/icudtl.dat',
150 ],
151 },
152 }], # OS!=ios
153 ], # conditions
jshin@chromium.org87a2c3f2014-04-30 08:59:20 +0000154 }], # icu_use_data_file_flag
jshin@chromium.orgb5648402014-04-01 20:51:44 +0000155 ], # conditions
156 'target_conditions': [
157 [ 'OS == "win" or OS == "mac" or OS == "ios" or '
158 '(OS == "android" and (_toolset != "host" or host_os != "linux")) or '
159 '(OS == "qnx" and (_toolset == "host" and host_os != "linux"))', {
jshin@chromium.org4e493262014-04-18 17:35:23 +0000160 'sources!': ['linux/icudtl_dat.S'],
jshin@chromium.orgb5648402014-04-01 20:51:44 +0000161 }],
162 [ 'OS != "android" or _toolset == "host"', {
jshin@chromium.org4e493262014-04-18 17:35:23 +0000163 'sources!': ['android/icudtl_dat.S'],
jshin@chromium.orgb5648402014-04-01 20:51:44 +0000164 }],
165 [ 'OS != "mac" and OS != "ios" and '
166 '((OS != "android" and OS != "qnx") or '
167 '_toolset != "host" or host_os != "mac")', {
jshin@chromium.org4e493262014-04-18 17:35:23 +0000168 'sources!': ['mac/icudtl_dat.S'],
jshin@chromium.orgb5648402014-04-01 20:51:44 +0000169 }],
170 ], # target_conditions
171 },
172 {
173 'target_name': 'icui18n',
174 'type': '<(component)',
175 'sources': [
176 '<@(icui18n_sources)',
177 ],
178 'defines': [
179 'U_I18N_IMPLEMENTATION',
180 ],
181 'dependencies': [
182 'icuuc',
183 ],
184 'direct_dependent_settings': {
185 'include_dirs': [
186 'source/i18n',
187 ],
188 },
thakis@chromium.org471c37c2014-08-01 23:52:52 +0000189 'variables': {
190 'clang_warning_flags': [
191 # ICU uses its own deprecated functions.
192 '-Wno-deprecated-declarations',
193 # ICU prefers `a && b || c` over `(a && b) || c`.
194 '-Wno-logical-op-parentheses',
195 # ICU has some `unsigned < 0` checks.
196 '-Wno-tautological-compare',
197 # Looks like a real issue, see http://crbug.com/114660
198 '-Wno-return-type-c-linkage',
199 ],
200 },
jshin@chromium.orgb5648402014-04-01 20:51:44 +0000201 # Since ICU wants to internally use its own deprecated APIs, don't
202 # complain about it.
203 'cflags': [
204 '-Wno-deprecated-declarations',
205 ],
206 'cflags_cc': [
207 '-frtti',
208 ],
209 'xcode_settings': {
210 'GCC_ENABLE_CPP_RTTI': 'YES', # -frtti
211 },
212 'msvs_settings': {
213 'VCCLCompilerTool': {
214 'RuntimeTypeInfo': 'true',
215 },
216 },
217 'conditions': [
218 [ 'use_system_icu==1 and want_separate_host_toolset==1', {
219 'toolsets': ['host'],
220 }],
221 [ 'use_system_icu==0 and want_separate_host_toolset==1', {
222 'toolsets': ['host', 'target'],
223 }],
224 [ 'use_system_icu==0 and want_separate_host_toolset==0', {
225 'toolsets': ['target'],
226 }],
jshin@chromium.orgb5648402014-04-01 20:51:44 +0000227 ['OS == "android" and clang==0', {
228 # Disable sincos() optimization to avoid a linker error since
229 # Android's math library doesn't have sincos(). Either
230 # -fno-builtin-sin or -fno-builtin-cos works.
231 'cflags': [
232 '-fno-builtin-sin',
233 ],
234 }],
thakis@chromium.org527ea2d2014-08-28 15:22:04 +0000235 [ 'OS == "win" and clang==1', {
236 # Note: General clang warnings should go in the
237 # clang_warning_flags block above.
238 'msvs_settings': {
239 'VCCLCompilerTool': {
240 'AdditionalOptions': [
241 # See http://bugs.icu-project.org/trac/ticket/11122
242 '-Wno-inline-new-delete',
243 '-Wno-implicit-exception-spec-mismatch',
244 ],
245 },
246 },
247 }],
jshin@chromium.orgb5648402014-04-01 20:51:44 +0000248 ['OS == "android" and use_system_stlport == 1', {
249 'target_conditions': [
250 ['_toolset == "target"', {
251 # ICU requires RTTI, which is not present in the system's
252 # stlport, so we have to include gabi++.
253 'include_dirs': [
254 '<(android_src)/abi/cpp/include',
255 ],
jshin@chromium.orgb5648402014-04-01 20:51:44 +0000256 }],
257 ],
258 }],
259 ], # conditions
260 },
261 {
262 'target_name': 'icuuc',
263 'type': '<(component)',
264 'sources': [
265 '<@(icuuc_sources)',
266 ],
267 'defines': [
268 'U_COMMON_IMPLEMENTATION',
269 ],
270 'dependencies': [
271 'icudata',
272 ],
273 'direct_dependent_settings': {
274 'include_dirs': [
275 'source/common',
276 ],
277 'conditions': [
278 [ 'component=="static_library"', {
279 'defines': [
280 'U_STATIC_IMPLEMENTATION',
281 ],
282 }],
283 ],
284 },
thakis@chromium.org471c37c2014-08-01 23:52:52 +0000285 'variables': {
286 'clang_warning_flags': [
287 # ICU uses its own deprecated functions.
288 '-Wno-deprecated-declarations',
289 # ICU prefers `a && b || c` over `(a && b) || c`.
290 '-Wno-logical-op-parentheses',
291 # ICU has some `unsigned < 0` checks.
292 '-Wno-tautological-compare',
293 # uresdata.c has switch(RES_GET_TYPE(x)) code. The
294 # RES_GET_TYPE macro returns an UResType enum, but some switch
295 # statement contains case values that aren't part of that
296 # enum (e.g. URES_TABLE32 which is in UResInternalType). This
297 # is on purpose.
298 '-Wno-switch',
299 ],
300 },
jshin@chromium.orgb5648402014-04-01 20:51:44 +0000301 'cflags': [
302 # Since ICU wants to internally use its own deprecated APIs,
303 # don't complain about it.
304 '-Wno-deprecated-declarations',
305 '-Wno-unused-function',
306 ],
307 'cflags_cc': [
308 '-frtti',
309 ],
310 'xcode_settings': {
311 'GCC_ENABLE_CPP_RTTI': 'YES', # -frtti
312 },
313 'msvs_settings': {
314 'VCCLCompilerTool': {
315 'RuntimeTypeInfo': 'true',
316 },
317 },
jshin@chromium.org26d88592014-06-18 09:33:10 +0000318 'all_dependent_settings': {
319 'msvs_settings': {
320 'VCLinkerTool': {
321 'AdditionalDependencies': [
322 'advapi32.lib',
323 ],
324 },
325 },
326 },
jshin@chromium.orgb5648402014-04-01 20:51:44 +0000327 'conditions': [
328 [ 'use_system_icu==1 and want_separate_host_toolset==1', {
329 'toolsets': ['host'],
330 }],
331 [ 'use_system_icu==0 and want_separate_host_toolset==1', {
332 'toolsets': ['host', 'target'],
333 }],
334 [ 'use_system_icu==0 and want_separate_host_toolset==0', {
335 'toolsets': ['target'],
336 }],
scottmg@chromium.orgfdf0bb32014-08-21 20:50:35 +0000337 [ 'OS == "win" and icu_use_data_file_flag==0', {
jshin@chromium.orgb5648402014-04-01 20:51:44 +0000338 'sources': [
339 'source/stubdata/stubdata.c',
340 ],
341 }],
thakis@chromium.org04330712014-08-28 00:00:23 +0000342 [ 'OS == "win" and clang==1', {
343 # Note: General clang warnings should go in the
344 # clang_warning_flags block above.
345 'msvs_settings': {
346 'VCCLCompilerTool': {
347 'AdditionalOptions': [
348 # See http://bugs.icu-project.org/trac/ticket/11122
349 '-Wno-inline-new-delete',
350 '-Wno-implicit-exception-spec-mismatch',
351 ],
352 },
353 },
354 }],
jshin@chromium.orgb5648402014-04-01 20:51:44 +0000355 ['OS == "android" and use_system_stlport == 1', {
356 'target_conditions': [
357 ['_toolset == "target"', {
358 # ICU requires RTTI, which is not present in the system's
359 # stlport, so we have to include gabi++.
360 'include_dirs': [
361 '<(android_src)/abi/cpp/include',
362 ],
jshin@chromium.orgb5648402014-04-01 20:51:44 +0000363 }],
364 ],
365 }],
jshin@chromium.orgb5648402014-04-01 20:51:44 +0000366 ], # conditions
367 },
368 ], # targets
369 }],
370 ['use_system_icu==1', {
371 'targets': [
372 {
373 'target_name': 'system_icu',
374 'type': 'none',
375 'conditions': [
376 ['OS=="android"', {
377 'direct_dependent_settings': {
378 'include_dirs': [
hjd@chromium.org95bfa852014-07-24 13:10:39 +0000379 '<(android_src)/external/icu/icu4c/source/common',
380 '<(android_src)/external/icu/icu4c/source/i18n',
jshin@chromium.orgb5648402014-04-01 20:51:44 +0000381 ],
382 },
383 'link_settings': {
384 'libraries': [
385 '-licui18n',
386 '-licuuc',
387 ],
388 },
389 }],
390 ['OS=="qnx"', {
391 'link_settings': {
392 'libraries': [
393 '-licui18n',
394 '-licuuc',
395 ],
396 },
397 }],
398 ['OS!="android" and OS!="qnx"', {
399 'link_settings': {
400 'ldflags': [
401 '<!@(icu-config --ldflags)',
402 ],
403 'libraries': [
404 '<!@(icu-config --ldflags-libsonly)',
405 ],
406 },
407 }],
408 ],
409 },
410 {
411 'target_name': 'icudata',
412 'type': 'none',
413 'dependencies': ['system_icu'],
414 'export_dependent_settings': ['system_icu'],
415 'toolsets': ['target'],
416 },
417 {
418 'target_name': 'icui18n',
419 'type': 'none',
420 'dependencies': ['system_icu'],
421 'export_dependent_settings': ['system_icu'],
422 'variables': {
423 'headers_root_path': 'source/i18n',
424 'header_filenames': [
425 # This list can easily be updated using the command below:
426 # find third_party/icu/source/i18n/unicode -iname '*.h' \
427 # -printf "'%p',\n" | \
428 # sed -e 's|third_party/icu/source/i18n/||' | sort -u
429 'unicode/alphaindex.h',
430 'unicode/basictz.h',
431 'unicode/calendar.h',
432 'unicode/choicfmt.h',
433 'unicode/coleitr.h',
434 'unicode/coll.h',
435 'unicode/compactdecimalformat.h',
436 'unicode/curramt.h',
437 'unicode/currpinf.h',
438 'unicode/currunit.h',
439 'unicode/datefmt.h',
440 'unicode/dcfmtsym.h',
441 'unicode/decimfmt.h',
442 'unicode/dtfmtsym.h',
443 'unicode/dtitvfmt.h',
444 'unicode/dtitvinf.h',
445 'unicode/dtptngen.h',
446 'unicode/dtrule.h',
447 'unicode/fieldpos.h',
448 'unicode/fmtable.h',
449 'unicode/format.h',
450 'unicode/fpositer.h',
451 'unicode/gender.h',
452 'unicode/gregocal.h',
453 'unicode/locdspnm.h',
454 'unicode/measfmt.h',
455 'unicode/measunit.h',
456 'unicode/measure.h',
457 'unicode/msgfmt.h',
458 'unicode/numfmt.h',
459 'unicode/numsys.h',
460 'unicode/plurfmt.h',
461 'unicode/plurrule.h',
462 'unicode/rbnf.h',
463 'unicode/rbtz.h',
464 'unicode/regex.h',
465 'unicode/region.h',
466 'unicode/search.h',
467 'unicode/selfmt.h',
468 'unicode/simpletz.h',
469 'unicode/smpdtfmt.h',
470 'unicode/sortkey.h',
471 'unicode/stsearch.h',
472 'unicode/tblcoll.h',
473 'unicode/timezone.h',
474 'unicode/tmunit.h',
475 'unicode/tmutamt.h',
476 'unicode/tmutfmt.h',
477 'unicode/translit.h',
478 'unicode/tzfmt.h',
479 'unicode/tznames.h',
480 'unicode/tzrule.h',
481 'unicode/tztrans.h',
482 'unicode/ucal.h',
483 'unicode/ucoleitr.h',
484 'unicode/ucol.h',
485 'unicode/ucsdet.h',
486 'unicode/ucurr.h',
487 'unicode/udateintervalformat.h',
488 'unicode/udat.h',
489 'unicode/udatpg.h',
490 'unicode/udisplaycontext.h',
491 'unicode/uformattable.h',
492 'unicode/ugender.h',
493 'unicode/uldnames.h',
494 'unicode/ulocdata.h',
495 'unicode/umsg.h',
496 'unicode/unirepl.h',
497 'unicode/unum.h',
498 'unicode/unumsys.h',
499 'unicode/upluralrules.h',
500 'unicode/uregex.h',
501 'unicode/uregion.h',
502 'unicode/usearch.h',
503 'unicode/uspoof.h',
504 'unicode/utmscale.h',
505 'unicode/utrans.h',
506 'unicode/vtzone.h',
507 ],
508 },
509 'includes': [
510 '../../build/shim_headers.gypi',
511 ],
512 'toolsets': ['target'],
513 },
514 {
515 'target_name': 'icuuc',
516 'type': 'none',
517 'dependencies': ['system_icu'],
518 'export_dependent_settings': ['system_icu'],
519 'variables': {
520 'headers_root_path': 'source/common',
521 'header_filenames': [
522 # This list can easily be updated using the command below:
523 # find third_party/icu/source/common/unicode -iname '*.h' \
524 # -printf "'%p',\n" | \
525 # sed -e 's|third_party/icu/source/common/||' | sort -u
526 'unicode/appendable.h',
527 'unicode/brkiter.h',
528 'unicode/bytestream.h',
529 'unicode/bytestriebuilder.h',
530 'unicode/bytestrie.h',
531 'unicode/caniter.h',
532 'unicode/chariter.h',
533 'unicode/dbbi.h',
534 'unicode/docmain.h',
535 'unicode/dtintrv.h',
536 'unicode/enumset.h',
537 'unicode/errorcode.h',
538 'unicode/icudataver.h',
539 'unicode/icuplug.h',
540 'unicode/idna.h',
541 'unicode/listformatter.h',
542 'unicode/localpointer.h',
543 'unicode/locid.h',
544 'unicode/messagepattern.h',
545 'unicode/normalizer2.h',
546 'unicode/normlzr.h',
547 'unicode/parseerr.h',
548 'unicode/parsepos.h',
549 'unicode/platform.h',
550 'unicode/ptypes.h',
551 'unicode/putil.h',
552 'unicode/rbbi.h',
553 'unicode/rep.h',
554 'unicode/resbund.h',
555 'unicode/schriter.h',
556 'unicode/std_string.h',
557 'unicode/strenum.h',
558 'unicode/stringpiece.h',
559 'unicode/stringtriebuilder.h',
560 'unicode/symtable.h',
561 'unicode/ubidi.h',
562 'unicode/ubrk.h',
563 'unicode/ucasemap.h',
564 'unicode/ucat.h',
565 'unicode/uchar.h',
566 'unicode/ucharstriebuilder.h',
567 'unicode/ucharstrie.h',
568 'unicode/uchriter.h',
569 'unicode/uclean.h',
570 'unicode/ucnv_cb.h',
571 'unicode/ucnv_err.h',
572 'unicode/ucnv.h',
573 'unicode/ucnvsel.h',
574 'unicode/uconfig.h',
575 'unicode/udata.h',
576 'unicode/uenum.h',
577 'unicode/uidna.h',
578 'unicode/uiter.h',
579 'unicode/uloc.h',
580 'unicode/umachine.h',
581 'unicode/umisc.h',
582 'unicode/unifilt.h',
583 'unicode/unifunct.h',
584 'unicode/unimatch.h',
585 'unicode/uniset.h',
586 'unicode/unistr.h',
587 'unicode/unorm2.h',
588 'unicode/unorm.h',
589 'unicode/uobject.h',
590 'unicode/urename.h',
591 'unicode/urep.h',
592 'unicode/ures.h',
593 'unicode/uscript.h',
594 'unicode/uset.h',
595 'unicode/usetiter.h',
596 'unicode/ushape.h',
597 'unicode/usprep.h',
598 'unicode/ustring.h',
599 'unicode/ustringtrie.h',
600 'unicode/utext.h',
601 'unicode/utf16.h',
602 'unicode/utf32.h',
603 'unicode/utf8.h',
604 'unicode/utf.h',
605 'unicode/utf_old.h',
606 'unicode/utrace.h',
607 'unicode/utypes.h',
608 'unicode/uvernum.h',
609 'unicode/uversion.h',
610 ],
611 },
612 'includes': [
613 '../../build/shim_headers.gypi',
614 ],
615 'toolsets': ['target'],
616 },
617 ], # targets
618 }],
619 ], # conditions
620}