| 1 | diff --git a/build/linux/unbundle/icu.gn b/build/linux/unbundle/icu.gn
|
| 2 | new file mode 100644
|
| 3 | index 00000000000..9e54d4efe4e
|
| 4 | |
| 5 | |
| 6 | @@ -0,0 +1,262 @@
|
| 7 | +# Copyright 2016 The Chromium Authors
|
| 8 | +# Use of this source code is governed by a BSD-style license that can be
|
| 9 | +# found in the LICENSE file.
|
| 10 | +
|
| 11 | +import("//build/config/linux/pkg_config.gni")
|
| 12 | +import("//build/shim_headers.gni")
|
| 13 | +
|
| 14 | +group("icu") {
|
| 15 | + public_deps = [
|
| 16 | + ":icui18n",
|
| 17 | + ":icuuc",
|
| 18 | + ]
|
| 19 | +}
|
| 20 | +
|
| 21 | +config("icu_config") {
|
| 22 | + defines = [
|
| 23 | + "USING_SYSTEM_ICU=1",
|
| 24 | + "ICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC",
|
| 25 | +
|
| 26 | + # U_EXPORT (defined in unicode/platform.h) is used to set public visibility
|
| 27 | + # on classes through the U_COMMON_API and U_I18N_API macros (among others).
|
| 28 | + # When linking against the system ICU library, we want its symbols to have
|
| 29 | + # public LTO visibility. This disables CFI checks for the ICU classes and
|
| 30 | + # allows whole-program optimization to be applied to the rest of Chromium.
|
| 31 | + #
|
| 32 | + # Both U_COMMON_API and U_I18N_API macros would be defined to U_EXPORT only
|
| 33 | + # when U_COMBINED_IMPLEMENTATION is defined (see unicode/utypes.h). Because
|
| 34 | + # we override the default system UCHAR_TYPE (char16_t), it is not possible
|
| 35 | + # to use U_COMBINED_IMPLEMENTATION at this moment, meaning the U_COMMON_API
|
| 36 | + # and U_I18N_API macros are set to U_IMPORT which is an empty definition.
|
| 37 | + #
|
| 38 | + # Until building with UCHAR_TYPE=char16_t is supported, one way to apply
|
| 39 | + # public visibility (and thus public LTO visibility) to all ICU classes is
|
| 40 | + # to define U_IMPORT to have the same value as U_EXPORT. For more details,
|
| 41 | + # please see: https://crbug.com/822820
|
| 42 | + "U_IMPORT=U_EXPORT",
|
| 43 | + ]
|
| 44 | +}
|
| 45 | +
|
| 46 | +pkg_config("system_icui18n") {
|
| 47 | + packages = [ "icu-i18n" ]
|
| 48 | +}
|
| 49 | +
|
| 50 | +pkg_config("system_icuuc") {
|
| 51 | + packages = [ "icu-uc" ]
|
| 52 | +}
|
| 53 | +
|
| 54 | +source_set("icui18n") {
|
| 55 | + public_deps = [ ":icui18n_shim" ]
|
| 56 | + public_configs = [
|
| 57 | + ":icu_config",
|
| 58 | + ":system_icui18n",
|
| 59 | + ]
|
| 60 | +}
|
| 61 | +
|
| 62 | +source_set("icuuc") {
|
| 63 | + public_deps = [ ":icuuc_shim" ]
|
| 64 | + public_configs = [
|
| 65 | + ":icu_config",
|
| 66 | + ":system_icuuc",
|
| 67 | + ]
|
| 68 | +}
|
| 69 | +
|
| 70 | +group("icui18n_hidden_visibility") {
|
| 71 | + public_deps = [ ":icui18n" ]
|
| 72 | +}
|
| 73 | +
|
| 74 | +group("icuuc_hidden_visibility") {
|
| 75 | + public_deps = [ ":icuuc" ]
|
| 76 | +}
|
| 77 | +
|
| 78 | +shim_headers("icui18n_shim") {
|
| 79 | + root_path = "source/i18n"
|
| 80 | + headers = [
|
| 81 | + # This list can easily be updated using the commands below:
|
| 82 | + # cd third_party/icu/source/i18n
|
| 83 | + # find unicode -iname '*.h' -printf ' "%p",\n' | LC_ALL=C sort -u
|
| 84 | + "unicode/alphaindex.h",
|
| 85 | + "unicode/basictz.h",
|
| 86 | + "unicode/calendar.h",
|
| 87 | + "unicode/choicfmt.h",
|
| 88 | + "unicode/coleitr.h",
|
| 89 | + "unicode/coll.h",
|
| 90 | + "unicode/compactdecimalformat.h",
|
| 91 | + "unicode/curramt.h",
|
| 92 | + "unicode/currpinf.h",
|
| 93 | + "unicode/currunit.h",
|
| 94 | + "unicode/datefmt.h",
|
| 95 | + "unicode/dcfmtsym.h",
|
| 96 | + "unicode/decimfmt.h",
|
| 97 | + "unicode/dtfmtsym.h",
|
| 98 | + "unicode/dtitvfmt.h",
|
| 99 | + "unicode/dtitvinf.h",
|
| 100 | + "unicode/dtptngen.h",
|
| 101 | + "unicode/dtrule.h",
|
| 102 | + "unicode/fieldpos.h",
|
| 103 | + "unicode/fmtable.h",
|
| 104 | + "unicode/format.h",
|
| 105 | + "unicode/fpositer.h",
|
| 106 | + "unicode/gender.h",
|
| 107 | + "unicode/gregocal.h",
|
| 108 | + "unicode/listformatter.h",
|
| 109 | + "unicode/measfmt.h",
|
| 110 | + "unicode/measunit.h",
|
| 111 | + "unicode/measure.h",
|
| 112 | + "unicode/msgfmt.h",
|
| 113 | + "unicode/numfmt.h",
|
| 114 | + "unicode/numsys.h",
|
| 115 | + "unicode/plurfmt.h",
|
| 116 | + "unicode/plurrule.h",
|
| 117 | + "unicode/rbnf.h",
|
| 118 | + "unicode/rbtz.h",
|
| 119 | + "unicode/regex.h",
|
| 120 | + "unicode/region.h",
|
| 121 | + "unicode/reldatefmt.h",
|
| 122 | + "unicode/scientificnumberformatter.h",
|
| 123 | + "unicode/search.h",
|
| 124 | + "unicode/selfmt.h",
|
| 125 | + "unicode/simpletz.h",
|
| 126 | + "unicode/smpdtfmt.h",
|
| 127 | + "unicode/sortkey.h",
|
| 128 | + "unicode/stsearch.h",
|
| 129 | + "unicode/tblcoll.h",
|
| 130 | + "unicode/timezone.h",
|
| 131 | + "unicode/tmunit.h",
|
| 132 | + "unicode/tmutamt.h",
|
| 133 | + "unicode/tmutfmt.h",
|
| 134 | + "unicode/translit.h",
|
| 135 | + "unicode/tzfmt.h",
|
| 136 | + "unicode/tznames.h",
|
| 137 | + "unicode/tzrule.h",
|
| 138 | + "unicode/tztrans.h",
|
| 139 | + "unicode/ucal.h",
|
| 140 | + "unicode/ucol.h",
|
| 141 | + "unicode/ucoleitr.h",
|
| 142 | + "unicode/ucsdet.h",
|
| 143 | + "unicode/udat.h",
|
| 144 | + "unicode/udateintervalformat.h",
|
| 145 | + "unicode/udatpg.h",
|
| 146 | + "unicode/ufieldpositer.h",
|
| 147 | + "unicode/uformattable.h",
|
| 148 | + "unicode/ugender.h",
|
| 149 | + "unicode/ulocdata.h",
|
| 150 | + "unicode/umsg.h",
|
| 151 | + "unicode/unirepl.h",
|
| 152 | + "unicode/unum.h",
|
| 153 | + "unicode/unumsys.h",
|
| 154 | + "unicode/upluralrules.h",
|
| 155 | + "unicode/uregex.h",
|
| 156 | + "unicode/uregion.h",
|
| 157 | + "unicode/ureldatefmt.h",
|
| 158 | + "unicode/usearch.h",
|
| 159 | + "unicode/uspoof.h",
|
| 160 | + "unicode/utmscale.h",
|
| 161 | + "unicode/utrans.h",
|
| 162 | + "unicode/vtzone.h",
|
| 163 | + ]
|
| 164 | +}
|
| 165 | +
|
| 166 | +shim_headers("icuuc_shim") {
|
| 167 | + root_path = "source/common"
|
| 168 | + headers = [
|
| 169 | + # This list can easily be updated using the commands below:
|
| 170 | + # cd third_party/icu/source/common
|
| 171 | + # find unicode -iname '*.h' -printf ' "%p",\n' | LC_ALL=C sort -u
|
| 172 | + "unicode/appendable.h",
|
| 173 | + "unicode/brkiter.h",
|
| 174 | + "unicode/bytestream.h",
|
| 175 | + "unicode/bytestrie.h",
|
| 176 | + "unicode/bytestriebuilder.h",
|
| 177 | + "unicode/caniter.h",
|
| 178 | + "unicode/casemap.h",
|
| 179 | + "unicode/char16ptr.h",
|
| 180 | + "unicode/chariter.h",
|
| 181 | + "unicode/dbbi.h",
|
| 182 | + "unicode/docmain.h",
|
| 183 | + "unicode/dtintrv.h",
|
| 184 | + "unicode/edits.h",
|
| 185 | + "unicode/enumset.h",
|
| 186 | + "unicode/errorcode.h",
|
| 187 | + "unicode/filteredbrk.h",
|
| 188 | + "unicode/icudataver.h",
|
| 189 | + "unicode/icuplug.h",
|
| 190 | + "unicode/idna.h",
|
| 191 | + "unicode/localematcher.h",
|
| 192 | + "unicode/localpointer.h",
|
| 193 | + "unicode/locdspnm.h",
|
| 194 | + "unicode/locid.h",
|
| 195 | + "unicode/messagepattern.h",
|
| 196 | + "unicode/normalizer2.h",
|
| 197 | + "unicode/normlzr.h",
|
| 198 | + "unicode/parseerr.h",
|
| 199 | + "unicode/parsepos.h",
|
| 200 | + "unicode/platform.h",
|
| 201 | + "unicode/ptypes.h",
|
| 202 | + "unicode/putil.h",
|
| 203 | + "unicode/rbbi.h",
|
| 204 | + "unicode/rep.h",
|
| 205 | + "unicode/resbund.h",
|
| 206 | + "unicode/schriter.h",
|
| 207 | + "unicode/simpleformatter.h",
|
| 208 | + "unicode/std_string.h",
|
| 209 | + "unicode/strenum.h",
|
| 210 | + "unicode/stringpiece.h",
|
| 211 | + "unicode/stringtriebuilder.h",
|
| 212 | + "unicode/symtable.h",
|
| 213 | + "unicode/ubidi.h",
|
| 214 | + "unicode/ubiditransform.h",
|
| 215 | + "unicode/ubrk.h",
|
| 216 | + "unicode/ucasemap.h",
|
| 217 | + "unicode/ucat.h",
|
| 218 | + "unicode/uchar.h",
|
| 219 | + "unicode/ucharstrie.h",
|
| 220 | + "unicode/ucharstriebuilder.h",
|
| 221 | + "unicode/uchriter.h",
|
| 222 | + "unicode/uclean.h",
|
| 223 | + "unicode/ucnv.h",
|
| 224 | + "unicode/ucnv_cb.h",
|
| 225 | + "unicode/ucnv_err.h",
|
| 226 | + "unicode/ucnvsel.h",
|
| 227 | + "unicode/uconfig.h",
|
| 228 | + "unicode/ucurr.h",
|
| 229 | + "unicode/udata.h",
|
| 230 | + "unicode/udisplaycontext.h",
|
| 231 | + "unicode/uenum.h",
|
| 232 | + "unicode/uidna.h",
|
| 233 | + "unicode/uiter.h",
|
| 234 | + "unicode/uldnames.h",
|
| 235 | + "unicode/ulistformatter.h",
|
| 236 | + "unicode/uloc.h",
|
| 237 | + "unicode/umachine.h",
|
| 238 | + "unicode/umisc.h",
|
| 239 | + "unicode/unifilt.h",
|
| 240 | + "unicode/unifunct.h",
|
| 241 | + "unicode/unimatch.h",
|
| 242 | + "unicode/uniset.h",
|
| 243 | + "unicode/unistr.h",
|
| 244 | + "unicode/unorm.h",
|
| 245 | + "unicode/unorm2.h",
|
| 246 | + "unicode/uobject.h",
|
| 247 | + "unicode/urename.h",
|
| 248 | + "unicode/urep.h",
|
| 249 | + "unicode/ures.h",
|
| 250 | + "unicode/uscript.h",
|
| 251 | + "unicode/uset.h",
|
| 252 | + "unicode/usetiter.h",
|
| 253 | + "unicode/ushape.h",
|
| 254 | + "unicode/usprep.h",
|
| 255 | + "unicode/ustring.h",
|
| 256 | + "unicode/ustringtrie.h",
|
| 257 | + "unicode/utext.h",
|
| 258 | + "unicode/utf.h",
|
| 259 | + "unicode/utf16.h",
|
| 260 | + "unicode/utf32.h",
|
| 261 | + "unicode/utf8.h",
|
| 262 | + "unicode/utf_old.h",
|
| 263 | + "unicode/utrace.h",
|
| 264 | + "unicode/utypes.h",
|
| 265 | + "unicode/uvernum.h",
|
| 266 | + "unicode/uversion.h",
|
| 267 | + ]
|
| 268 | +}
|
| 269 | diff --git a/build/linux/unbundle/replace_gn_files.py b/build/linux/unbundle/replace_gn_files.py
|
| 270 | new file mode 100755
|
| 271 | index 00000000000..1aed7bca99d
|
| 272 | |
| 273 | |
| 274 | @@ -0,0 +1,65 @@
|
| 275 | +#!/usr/bin/env python3
|
| 276 | +# Copyright 2016 The Chromium Authors
|
| 277 | +# Use of this source code is governed by a BSD-style license that can be
|
| 278 | +# found in the LICENSE file.
|
| 279 | +
|
| 280 | +"""
|
| 281 | +Replaces GN files in tree with files from here that
|
| 282 | +make the build use system libraries.
|
| 283 | +"""
|
| 284 | +
|
| 285 | +import argparse
|
| 286 | +import os
|
| 287 | +import shutil
|
| 288 | +import sys
|
| 289 | +
|
| 290 | +
|
| 291 | +REPLACEMENTS = {
|
| 292 | + 'icu': 'third_party/icu/BUILD.gn',
|
| 293 | + 'protobuf': 'build/secondary/third_party/protobuf/BUILD.gn',
|
| 294 | + 'zlib': 'third_party/zlib/BUILD.gn',
|
| 295 | +}
|
| 296 | +
|
| 297 | +
|
| 298 | +def DoMain(argv):
|
| 299 | + my_dirname = os.path.dirname(__file__)
|
| 300 | + source_tree_root = os.path.abspath(
|
| 301 | + os.path.join(my_dirname, '..', '..', '..'))
|
| 302 | +
|
| 303 | + parser = argparse.ArgumentParser()
|
| 304 | + parser.add_argument('--system-libraries', nargs='*', default=[])
|
| 305 | + parser.add_argument('--undo', action='store_true')
|
| 306 | +
|
| 307 | + args = parser.parse_args(argv)
|
| 308 | +
|
| 309 | + handled_libraries = set()
|
| 310 | + for lib, path in REPLACEMENTS.items():
|
| 311 | + if lib not in args.system_libraries:
|
| 312 | + continue
|
| 313 | + handled_libraries.add(lib)
|
| 314 | +
|
| 315 | + if args.undo:
|
| 316 | + # Restore original file, and also remove the backup.
|
| 317 | + # This is meant to restore the source tree to its original state.
|
| 318 | + os.rename(os.path.join(source_tree_root, path + '.orig'),
|
| 319 | + os.path.join(source_tree_root, path))
|
| 320 | + else:
|
| 321 | + # Create a backup copy for --undo.
|
| 322 | + shutil.copyfile(os.path.join(source_tree_root, path),
|
| 323 | + os.path.join(source_tree_root, path + '.orig'))
|
| 324 | +
|
| 325 | + # Copy the GN file from directory of this script to target path.
|
| 326 | + shutil.copyfile(os.path.join(my_dirname, '%s.gn' % lib),
|
| 327 | + os.path.join(source_tree_root, path))
|
| 328 | +
|
| 329 | + unhandled_libraries = set(args.system_libraries) - handled_libraries
|
| 330 | + if unhandled_libraries:
|
| 331 | + print('Unrecognized system libraries requested: %s' % ', '.join(
|
| 332 | + sorted(unhandled_libraries)), file=sys.stderr)
|
| 333 | + return 1
|
| 334 | +
|
| 335 | + return 0
|
| 336 | +
|
| 337 | +
|
| 338 | +if __name__ == '__main__':
|
| 339 | + sys.exit(DoMain(sys.argv[1:]))
|
| 340 | diff --git a/build/linux/unbundle/zlib.gn b/build/linux/unbundle/zlib.gn
|
| 341 | new file mode 100644
|
| 342 | index 00000000000..fa2bbffd25f
|
| 343 | |
| 344 | |
| 345 | @@ -0,0 +1,63 @@
|
| 346 | +# Copyright 2016 The Chromium Authors
|
| 347 | +# Use of this source code is governed by a BSD-style license that can be
|
| 348 | +# found in the LICENSE file.
|
| 349 | +
|
| 350 | +import("//build/shim_headers.gni")
|
| 351 | +
|
| 352 | +shim_headers("zlib_shim") {
|
| 353 | + root_path = "."
|
| 354 | + headers = [ "zlib.h" ]
|
| 355 | + additional_includes = [ "third_party" ]
|
| 356 | +
|
| 357 | +}
|
| 358 | +
|
| 359 | +config("system_zlib") {
|
| 360 | + defines = [ "USE_SYSTEM_ZLIB=1" ]
|
| 361 | +}
|
| 362 | +
|
| 363 | +config("zlib_config") {
|
| 364 | + configs = [ ":system_zlib" ]
|
| 365 | +}
|
| 366 | +
|
| 367 | +source_set("zlib") {
|
| 368 | + public_deps = [ ":zlib_shim" ]
|
| 369 | + libs = [ "z" ]
|
| 370 | + public_configs = [ ":system_zlib" ]
|
| 371 | +}
|
| 372 | +
|
| 373 | +shim_headers("minizip_shim") {
|
| 374 | + root_path = "contrib"
|
| 375 | + headers = [
|
| 376 | + "minizip/crypt.h",
|
| 377 | + "minizip/ioapi.h",
|
| 378 | + "minizip/iowin32.h",
|
| 379 | + "minizip/mztools.h",
|
| 380 | + "minizip/unzip.h",
|
| 381 | + "minizip/zip.h",
|
| 382 | + ]
|
| 383 | +}
|
| 384 | +
|
| 385 | +source_set("minizip") {
|
| 386 | + deps = [ ":minizip_shim" ]
|
| 387 | + libs = [ "minizip" ]
|
| 388 | +}
|
| 389 | +
|
| 390 | +static_library("zip") {
|
| 391 | + sources = [
|
| 392 | + "google/zip.cc",
|
| 393 | + "google/zip.h",
|
| 394 | + "google/zip_internal.cc",
|
| 395 | + "google/zip_internal.h",
|
| 396 | + "google/zip_reader.cc",
|
| 397 | + "google/zip_reader.h",
|
| 398 | + ]
|
| 399 | + deps = [ ":minizip" ]
|
| 400 | +}
|
| 401 | +
|
| 402 | +static_library("compression_utils") {
|
| 403 | + sources = [
|
| 404 | + "google/compression_utils.cc",
|
| 405 | + "google/compression_utils.h",
|
| 406 | + ]
|
| 407 | + deps = [ ":zlib" ]
|
| 408 | +}
|
| 409 | diff --git a/build/shim_headers.gni b/build/shim_headers.gni
|
| 410 | index dc57d12ed0c..1d24e0ad00e 100644
|
| 411 | |
| 412 | |
| 413 | @@ -7,6 +7,11 @@ template("shim_headers") {
|
| 414 | shim_headers_path = "${root_gen_dir}/shim_headers/${target_name}"
|
| 415 | config(config_name) {
|
| 416 | include_dirs = [ shim_headers_path ]
|
| 417 | + if (defined(invoker.additional_includes)) {
|
| 418 | + foreach(i, invoker.additional_includes) {
|
| 419 | + include_dirs += [ shim_headers_path + "/" + i ]
|
| 420 | + }
|
| 421 | + }
|
| 422 | }
|
| 423 | action(action_name) {
|
| 424 | script = "//tools/generate_shim_headers.py"
|
| 425 | @@ -26,11 +31,12 @@ template("shim_headers") {
|
| 426 | args += invoker.headers
|
| 427 | outputs = []
|
| 428 | foreach(h, invoker.headers) {
|
| 429 | - outputs += [ shim_headers_path + "/" + rebase_path(invoker.root_path,"//") + "/" + h ]
|
| 430 | + outputs += [ shim_headers_path + "/" +
|
| 431 | + rebase_path(invoker.root_path, "//") + "/" + h ]
|
| 432 | }
|
| 433 | }
|
| 434 | group(target_name) {
|
| 435 | - deps = [ ":${action_name}" ]
|
| 436 | + public_deps = [ ":${action_name}" ]
|
| 437 | all_dependent_configs = [ ":${config_name}" ]
|
| 438 | }
|
| 439 | }
|