|  | # Copyright 2016 The Chromium Authors. All rights reserved. | 
|  | # Use of this source code is governed by a BSD-style license that can be | 
|  | # found in the LICENSE file. | 
|  |  | 
|  | import("//build/config/linux/pkg_config.gni") | 
|  | import("//build/shim_headers.gni") | 
|  |  | 
|  | group("icu") { | 
|  | public_deps = [ | 
|  | ":icui18n", | 
|  | ":icuuc", | 
|  | ] | 
|  | } | 
|  |  | 
|  | config("icu_config") { | 
|  | defines = [ | 
|  | "USING_SYSTEM_ICU=1", | 
|  | "ICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC", | 
|  | "UCHAR_TYPE=uint16_t", | 
|  |  | 
|  | # U_EXPORT (defined in unicode/platform.h) is used to set public visibility | 
|  | # on classes through the U_COMMON_API and U_I18N_API macros (among others). | 
|  | # When linking against the system ICU library, we want its symbols to have | 
|  | # public LTO visibility. This disables CFI checks for the ICU classes and | 
|  | # allows whole-program optimization to be applied to the rest of Chromium. | 
|  | # | 
|  | # Both U_COMMON_API and U_I18N_API macros would be defined to U_EXPORT only | 
|  | # when U_COMBINED_IMPLEMENTATION is defined (see unicode/utypes.h). Because | 
|  | # we override the default system UCHAR_TYPE (char16_t), it is not possible | 
|  | # to use U_COMBINED_IMPLEMENTATION at this moment, meaning the U_COMMON_API | 
|  | # and U_I18N_API macros are set to U_IMPORT which is an empty definition. | 
|  | # | 
|  | # Until building with UCHAR_TYPE=char16_t is supported, one way to apply | 
|  | # public visibility (and thus public LTO visibility) to all ICU classes is | 
|  | # to define U_IMPORT to have the same value as U_EXPORT. For more details, | 
|  | # please see: https://crbug.com/822820 | 
|  | "U_IMPORT=U_EXPORT", | 
|  | ] | 
|  | } | 
|  |  | 
|  | pkg_config("system_icui18n") { | 
|  | packages = [ "icu-i18n" ] | 
|  | } | 
|  |  | 
|  | pkg_config("system_icuuc") { | 
|  | packages = [ "icu-uc" ] | 
|  | } | 
|  |  | 
|  | source_set("icui18n") { | 
|  | deps = [ | 
|  | ":icui18n_shim", | 
|  | ] | 
|  | public_configs = [ | 
|  | ":icu_config", | 
|  | ":system_icui18n", | 
|  | ] | 
|  | } | 
|  |  | 
|  | source_set("icuuc") { | 
|  | deps = [ | 
|  | ":icuuc_shim", | 
|  | ] | 
|  | public_configs = [ | 
|  | ":icu_config", | 
|  | ":system_icuuc", | 
|  | ] | 
|  | } | 
|  |  | 
|  | shim_headers("icui18n_shim") { | 
|  | root_path = "source/i18n" | 
|  | headers = [ | 
|  | # This list can easily be updated using the commands below: | 
|  | # cd third_party/icu/source/i18n | 
|  | # find unicode -iname '*.h' -printf '    "%p",\n' | LC_ALL=C sort -u | 
|  | "unicode/alphaindex.h", | 
|  | "unicode/basictz.h", | 
|  | "unicode/calendar.h", | 
|  | "unicode/choicfmt.h", | 
|  | "unicode/coleitr.h", | 
|  | "unicode/coll.h", | 
|  | "unicode/compactdecimalformat.h", | 
|  | "unicode/curramt.h", | 
|  | "unicode/currpinf.h", | 
|  | "unicode/currunit.h", | 
|  | "unicode/datefmt.h", | 
|  | "unicode/dcfmtsym.h", | 
|  | "unicode/decimfmt.h", | 
|  | "unicode/dtfmtsym.h", | 
|  | "unicode/dtitvfmt.h", | 
|  | "unicode/dtitvinf.h", | 
|  | "unicode/dtptngen.h", | 
|  | "unicode/dtrule.h", | 
|  | "unicode/fieldpos.h", | 
|  | "unicode/fmtable.h", | 
|  | "unicode/format.h", | 
|  | "unicode/fpositer.h", | 
|  | "unicode/gender.h", | 
|  | "unicode/gregocal.h", | 
|  | "unicode/measfmt.h", | 
|  | "unicode/measunit.h", | 
|  | "unicode/measure.h", | 
|  | "unicode/msgfmt.h", | 
|  | "unicode/numfmt.h", | 
|  | "unicode/numsys.h", | 
|  | "unicode/plurfmt.h", | 
|  | "unicode/plurrule.h", | 
|  | "unicode/rbnf.h", | 
|  | "unicode/rbtz.h", | 
|  | "unicode/regex.h", | 
|  | "unicode/region.h", | 
|  | "unicode/reldatefmt.h", | 
|  | "unicode/scientificnumberformatter.h", | 
|  | "unicode/search.h", | 
|  | "unicode/selfmt.h", | 
|  | "unicode/simpletz.h", | 
|  | "unicode/smpdtfmt.h", | 
|  | "unicode/sortkey.h", | 
|  | "unicode/stsearch.h", | 
|  | "unicode/tblcoll.h", | 
|  | "unicode/timezone.h", | 
|  | "unicode/tmunit.h", | 
|  | "unicode/tmutamt.h", | 
|  | "unicode/tmutfmt.h", | 
|  | "unicode/translit.h", | 
|  | "unicode/tzfmt.h", | 
|  | "unicode/tznames.h", | 
|  | "unicode/tzrule.h", | 
|  | "unicode/tztrans.h", | 
|  | "unicode/ucal.h", | 
|  | "unicode/ucol.h", | 
|  | "unicode/ucoleitr.h", | 
|  | "unicode/ucsdet.h", | 
|  | "unicode/udat.h", | 
|  | "unicode/udateintervalformat.h", | 
|  | "unicode/udatpg.h", | 
|  | "unicode/ufieldpositer.h", | 
|  | "unicode/uformattable.h", | 
|  | "unicode/ugender.h", | 
|  | "unicode/ulocdata.h", | 
|  | "unicode/umsg.h", | 
|  | "unicode/unirepl.h", | 
|  | "unicode/unum.h", | 
|  | "unicode/unumsys.h", | 
|  | "unicode/upluralrules.h", | 
|  | "unicode/uregex.h", | 
|  | "unicode/uregion.h", | 
|  | "unicode/ureldatefmt.h", | 
|  | "unicode/usearch.h", | 
|  | "unicode/uspoof.h", | 
|  | "unicode/utmscale.h", | 
|  | "unicode/utrans.h", | 
|  | "unicode/vtzone.h", | 
|  | ] | 
|  | } | 
|  |  | 
|  | shim_headers("icuuc_shim") { | 
|  | root_path = "source/common" | 
|  | headers = [ | 
|  | # This list can easily be updated using the commands below: | 
|  | # cd third_party/icu/source/common | 
|  | # find unicode -iname '*.h' -printf '    "%p",\n' | LC_ALL=C sort -u | 
|  | "unicode/appendable.h", | 
|  | "unicode/brkiter.h", | 
|  | "unicode/bytestream.h", | 
|  | "unicode/bytestrie.h", | 
|  | "unicode/bytestriebuilder.h", | 
|  | "unicode/caniter.h", | 
|  | "unicode/casemap.h", | 
|  | "unicode/char16ptr.h", | 
|  | "unicode/chariter.h", | 
|  | "unicode/dbbi.h", | 
|  | "unicode/docmain.h", | 
|  | "unicode/dtintrv.h", | 
|  | "unicode/edits.h", | 
|  | "unicode/enumset.h", | 
|  | "unicode/errorcode.h", | 
|  | "unicode/filteredbrk.h", | 
|  | "unicode/icudataver.h", | 
|  | "unicode/icuplug.h", | 
|  | "unicode/idna.h", | 
|  | "unicode/listformatter.h", | 
|  | "unicode/localpointer.h", | 
|  | "unicode/locdspnm.h", | 
|  | "unicode/locid.h", | 
|  | "unicode/messagepattern.h", | 
|  | "unicode/normalizer2.h", | 
|  | "unicode/normlzr.h", | 
|  | "unicode/parseerr.h", | 
|  | "unicode/parsepos.h", | 
|  | "unicode/platform.h", | 
|  | "unicode/ptypes.h", | 
|  | "unicode/putil.h", | 
|  | "unicode/rbbi.h", | 
|  | "unicode/rep.h", | 
|  | "unicode/resbund.h", | 
|  | "unicode/schriter.h", | 
|  | "unicode/simpleformatter.h", | 
|  | "unicode/std_string.h", | 
|  | "unicode/strenum.h", | 
|  | "unicode/stringpiece.h", | 
|  | "unicode/stringtriebuilder.h", | 
|  | "unicode/symtable.h", | 
|  | "unicode/ubidi.h", | 
|  | "unicode/ubiditransform.h", | 
|  | "unicode/ubrk.h", | 
|  | "unicode/ucasemap.h", | 
|  | "unicode/ucat.h", | 
|  | "unicode/uchar.h", | 
|  | "unicode/ucharstrie.h", | 
|  | "unicode/ucharstriebuilder.h", | 
|  | "unicode/uchriter.h", | 
|  | "unicode/uclean.h", | 
|  | "unicode/ucnv.h", | 
|  | "unicode/ucnv_cb.h", | 
|  | "unicode/ucnv_err.h", | 
|  | "unicode/ucnvsel.h", | 
|  | "unicode/uconfig.h", | 
|  | "unicode/ucurr.h", | 
|  | "unicode/udata.h", | 
|  | "unicode/udisplaycontext.h", | 
|  | "unicode/uenum.h", | 
|  | "unicode/uidna.h", | 
|  | "unicode/uiter.h", | 
|  | "unicode/uldnames.h", | 
|  | "unicode/ulistformatter.h", | 
|  | "unicode/uloc.h", | 
|  | "unicode/umachine.h", | 
|  | "unicode/umisc.h", | 
|  | "unicode/unifilt.h", | 
|  | "unicode/unifunct.h", | 
|  | "unicode/unimatch.h", | 
|  | "unicode/uniset.h", | 
|  | "unicode/unistr.h", | 
|  | "unicode/unorm.h", | 
|  | "unicode/unorm2.h", | 
|  | "unicode/uobject.h", | 
|  | "unicode/urename.h", | 
|  | "unicode/urep.h", | 
|  | "unicode/ures.h", | 
|  | "unicode/uscript.h", | 
|  | "unicode/uset.h", | 
|  | "unicode/usetiter.h", | 
|  | "unicode/ushape.h", | 
|  | "unicode/usprep.h", | 
|  | "unicode/ustring.h", | 
|  | "unicode/ustringtrie.h", | 
|  | "unicode/utext.h", | 
|  | "unicode/utf.h", | 
|  | "unicode/utf16.h", | 
|  | "unicode/utf32.h", | 
|  | "unicode/utf8.h", | 
|  | "unicode/utf_old.h", | 
|  | "unicode/utrace.h", | 
|  | "unicode/utypes.h", | 
|  | "unicode/uvernum.h", | 
|  | "unicode/uversion.h", | 
|  | ] | 
|  | } |