summaryrefslogtreecommitdiff
path: root/tools/icu/icu-generic.gyp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/icu/icu-generic.gyp')
-rw-r--r--tools/icu/icu-generic.gyp414
1 files changed, 414 insertions, 0 deletions
diff --git a/tools/icu/icu-generic.gyp b/tools/icu/icu-generic.gyp
new file mode 100644
index 0000000000..fa5e5773b2
--- /dev/null
+++ b/tools/icu/icu-generic.gyp
@@ -0,0 +1,414 @@
+# Copyright (c) IBM Corporation and Others. All Rights Reserved.
+# very loosely based on icu.gyp from Chromium:
+# Copyright (c) 2012 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.
+
+
+{
+ 'variables': {
+ 'icu_src_derb': [ '../../deps/icu/source/tools/genrb/derb.c' ],
+ },
+ 'targets': [
+ {
+ # a target to hold uconfig defines.
+ # for now these are hard coded, but could be defined.
+ 'target_name': 'icu_uconfig',
+ 'type': 'none',
+ 'toolsets': [ 'host', 'target' ],
+ 'direct_dependent_settings': {
+ 'defines': [
+ 'UCONFIG_NO_LEGACY_CONVERSION=1',
+ 'UCONFIG_NO_IDNA=1',
+ 'UCONFIG_NO_TRANSLITERATION=1',
+ 'UCONFIG_NO_SERVICE=1',
+ 'UCONFIG_NO_REGULAR_EXPRESSIONS=1',
+ 'U_ENABLE_DYLOAD=0',
+ 'U_STATIC_IMPLEMENTATION=1',
+ # TODO(srl295): reenable following pending
+ # https://code.google.com/p/v8/issues/detail?id=3345
+ # (saves some space)
+ 'UCONFIG_NO_BREAK_ITERATION=0',
+ ],
+ }
+ },
+ {
+ # a target to hold common settings.
+ # make any target that is ICU implementation depend on this.
+ 'target_name': 'icu_implementation',
+ 'toolsets': [ 'host', 'target' ],
+ 'type': 'none',
+ 'direct_dependent_settings': {
+ 'conditions': [
+ [ 'os_posix == 1 and OS != "mac" and OS != "ios"', {
+ 'cflags': [ '-Wno-deprecated-declarations' ],
+ 'cflags_cc': [ '-frtti' ],
+ }],
+ [ 'OS == "mac" or OS == "ios"', {
+ 'xcode_settings': {'GCC_ENABLE_CPP_RTTI': 'YES' },
+ }],
+ [ 'OS == "win"', {
+ 'msvs_settings': {
+ 'VCCLCompilerTool': {'RuntimeTypeInfo': 'true'},
+ }
+ }],
+ ],
+ 'msvs_settings': {
+ 'VCCLCompilerTool': {
+ 'RuntimeTypeInfo': 'true',
+ 'ExceptionHandling': '1',
+ },
+ },
+ 'configurations': {
+ # TODO: why does this need to be redefined for Release and Debug?
+ # Maybe this should be pushed into common.gypi with an "if v8 i18n"?
+ 'Release': {
+ 'msvs_settings': {
+ 'VCCLCompilerTool': {
+ 'RuntimeTypeInfo': 'true',
+ 'ExceptionHandling': '1',
+ },
+ },
+ },
+ 'Debug': {
+ 'msvs_settings': {
+ 'VCCLCompilerTool': {
+ 'RuntimeTypeInfo': 'true',
+ 'ExceptionHandling': '1',
+ },
+ },
+ },
+ },
+ 'defines': [
+ 'U_ATTRIBUTE_DEPRECATED=',
+ '_CRT_SECURE_NO_DEPRECATE=',
+ 'U_STATIC_IMPLEMENTATION=1',
+ ],
+ },
+ },
+ {
+ 'target_name': 'icui18n',
+ 'type': '<(library)',
+ 'toolsets': [ 'host', 'target' ],
+ 'sources': [
+ '<@(icu_src_i18n)'
+ ],
+ 'include_dirs': [
+ '../../deps/icu/source/i18n',
+ ],
+ 'defines': [
+ 'U_I18N_IMPLEMENTATION=1',
+ ],
+ 'dependencies': [ 'icuucx', 'icu_implementation', 'icu_uconfig' ],
+ 'direct_dependent_settings': {
+ 'include_dirs': [
+ '../../deps/icu/source/i18n',
+ ],
+ },
+ 'export_dependent_settings': [ 'icuucx' ],
+ },
+ # this library is only built for derb..
+ {
+ 'target_name': 'icuio',
+ 'type': '<(library)',
+ 'toolsets': [ 'host' ],
+ 'sources': [
+ '<@(icu_src_io)'
+ ],
+ 'include_dirs': [
+ '../../deps/icu/source/io',
+ ],
+ 'defines': [
+ 'U_IO_IMPLEMENTATION=1',
+ ],
+ 'dependencies': [ 'icuucx', 'icui18n', 'icu_implementation', 'icu_uconfig' ],
+ 'direct_dependent_settings': {
+ 'include_dirs': [
+ '../../deps/icu/source/io',
+ ],
+ },
+ 'export_dependent_settings': [ 'icuucx', 'icui18n' ],
+ },
+ # This exports actual ICU data
+ {
+ 'target_name': 'icudata',
+ 'type': '<(library)',
+ 'toolsets': [ 'target' ],
+ 'conditions': [
+ [ 'OS == "win"', {
+ 'conditions': [
+ [ 'icu_small == "false"', { # and OS=win
+ # full data - just build the full data file, then we are done.
+ 'sources': [ '<(SHARED_INTERMEDIATE_DIR)/icudt<(icu_ver_major)<(icu_endianness)_dat.obj' ],
+ 'dependencies': [ 'genccode#host' ],
+ 'actions': [
+ {
+ 'action_name': 'icudata',
+ 'inputs': [ '<(icu_data_in)' ],
+ 'outputs': [ '<(SHARED_INTERMEDIATE_DIR)/icudt<(icu_ver_major)<(icu_endianness)_dat.obj' ],
+ 'action': [ '<(PRODUCT_DIR)/genccode',
+ '-o',
+ '-d', '<(SHARED_INTERMEDIATE_DIR)',
+ '-n', 'icudata',
+ '-e', 'icudt<(icu_ver_major)',
+ '<@(_inputs)' ],
+ },
+ ],
+ }, { # icu_small == TRUE and OS == win
+ # link against stub data primarily
+ # then, use icupkg and genccode to rebuild data
+ 'dependencies': [ 'icustubdata', 'genccode#host', 'icupkg#host', 'genrb#host', 'iculslocs#host' ],
+ 'export_dependent_settings': [ 'icustubdata' ],
+ 'actions': [
+ {
+ # trim down ICU
+ 'action_name': 'icutrim',
+ 'inputs': [ '<(icu_data_in)', 'icu_small.json' ],
+ 'outputs': [ '../../out/icutmp/icudt<(icu_ver_major)<(icu_endianness).dat' ],
+ 'action': [ 'python',
+ 'icutrim.py',
+ '-P', '../../<(CONFIGURATION_NAME)',
+ '-D', '<(icu_data_in)',
+ '--delete-tmp',
+ '-T', '../../out/icutmp',
+ '-F', 'icu_small.json',
+ '-O', 'icudt<(icu_ver_major)<(icu_endianness).dat',
+ '-v' ],
+ },
+ {
+ # build final .dat -> .obj
+ 'action_name': 'genccode',
+ 'inputs': [ '../../out/icutmp/icudt<(icu_ver_major)<(icu_endianness).dat' ],
+ 'outputs': [ '../../out/icudt<(icu_ver_major)<(icu_endianness)_dat.obj' ],
+ 'action': [ '../../<(CONFIGURATION_NAME)/genccode',
+ '-o',
+ '-d', '../../out/',
+ '-n', 'icudata',
+ '-e', 'icusmdt<(icu_ver_major)',
+ '<@(_inputs)' ],
+ },
+ ],
+ # This file contains the small ICU data.
+ 'sources': [ '../../out/icudt<(icu_ver_major)<(icu_endianness)_dat.obj' ],
+ } ] ], #end of OS==win and icu_small == true
+ }, { # OS != win
+ 'conditions': [
+ [ 'icu_small == "false"', {
+ # full data - just build the full data file, then we are done.
+ 'sources': [ '<(SHARED_INTERMEDIATE_DIR)/icudt<(icu_ver_major)_dat.c' ],
+ 'dependencies': [ 'genccode#host', 'icupkg#host', 'icu_implementation#host', 'icu_uconfig' ],
+ 'include_dirs': [
+ '../../deps/icu/source/common',
+ ],
+ 'actions': [
+ {
+ # Swap endianness (if needed), or at least copy the file
+ 'action_name': 'icupkg',
+ 'inputs': [ '<(icu_data_in)' ],
+ 'outputs':[ '<(SHARED_INTERMEDIATE_DIR)/icudt<(icu_ver_major)<(icu_endianness).dat' ],
+ 'action': [ '<(PRODUCT_DIR)/icupkg',
+ '-t<(icu_endianness)',
+ '<@(_inputs)',
+ '<@(_outputs)',
+ ],
+ },
+ {
+ # Rename without the endianness marker
+ 'action_name': 'copy',
+ 'inputs': [ '<(SHARED_INTERMEDIATE_DIR)/icudt<(icu_ver_major)<(icu_endianness).dat' ],
+ 'outputs':[ '<(SHARED_INTERMEDIATE_DIR)/icudt<(icu_ver_major).dat' ],
+ 'action': [ 'cp',
+ '<@(_inputs)',
+ '<@(_outputs)',
+ ],
+ },
+ {
+ 'action_name': 'icudata',
+ 'inputs': [ '<(SHARED_INTERMEDIATE_DIR)/icudt<(icu_ver_major).dat' ],
+ 'outputs':[ '<(SHARED_INTERMEDIATE_DIR)/icudt<(icu_ver_major)_dat.c' ],
+ 'action': [ '<(PRODUCT_DIR)/genccode',
+ '-e', 'icudt<(icu_ver_major)',
+ '-d', '<(SHARED_INTERMEDIATE_DIR)',
+ '-f', 'icudt<(icu_ver_major)_dat',
+ '<@(_inputs)' ],
+ },
+ ], # end actions
+ }, { # icu_small == true ( and OS != win )
+ # link against stub data (as primary data)
+ # then, use icupkg and genccode to rebuild small data
+ 'dependencies': [ 'icustubdata', 'genccode#host', 'icupkg#host', 'genrb#host', 'iculslocs#host',
+ 'icu_implementation', 'icu_uconfig' ],
+ 'export_dependent_settings': [ 'icustubdata' ],
+ 'actions': [
+ {
+ # trim down ICU
+ 'action_name': 'icutrim',
+ 'inputs': [ '<(icu_data_in)', 'icu_small.json' ],
+ 'outputs': [ '<(SHARED_INTERMEDIATE_DIR)/icutmp/icudt<(icu_ver_major)<(icu_endianness).dat' ],
+ 'action': [ 'python',
+ 'icutrim.py',
+ '-P', '<(PRODUCT_DIR)',
+ '-D', '<(icu_data_in)',
+ '--delete-tmp',
+ '-T', '<(SHARED_INTERMEDIATE_DIR)/icutmp',
+ '-F', 'icu_small.json',
+ '-O', 'icudt<(icu_ver_major)<(icu_endianness).dat',
+ '-v' ],
+ }, {
+ # rename to get the final entrypoint name right
+ 'action_name': 'rename',
+ 'inputs': [ '<(SHARED_INTERMEDIATE_DIR)/icutmp/icudt<(icu_ver_major)<(icu_endianness).dat' ],
+ 'outputs': [ '<(SHARED_INTERMEDIATE_DIR)/icutmp/icusmdt<(icu_ver_major).dat' ],
+ 'action': [ 'cp',
+ '<@(_inputs)',
+ '<@(_outputs)',
+ ],
+ }, {
+ # build final .dat -> .obj
+ 'action_name': 'genccode',
+ 'inputs': [ '<(SHARED_INTERMEDIATE_DIR)/icutmp/icusmdt<(icu_ver_major).dat' ],
+ 'outputs': [ '<(SHARED_INTERMEDIATE_DIR)/icusmdt<(icu_ver_major)_dat.c' ],
+ 'action': [ '<(PRODUCT_DIR)/genccode',
+ '-d', '<(SHARED_INTERMEDIATE_DIR)',
+ '<@(_inputs)' ],
+ },
+ ],
+ # This file contains the small ICU data
+ 'sources': [ '<(SHARED_INTERMEDIATE_DIR)/icusmdt<(icu_ver_major)_dat.c' ],
+ # for umachine.h
+ 'include_dirs': [
+ '../../deps/icu/source/common',
+ ],
+ }]], # end icu_small == true
+ }]], # end OS != win
+ }, # end icudata
+ # icustubdata is a tiny (~1k) symbol with no ICU data in it.
+ # tools must link against it as they are generating the full data.
+ {
+ 'target_name': 'icustubdata',
+ 'type': '<(library)',
+ 'toolsets': [ 'host', 'target' ],
+ 'dependencies': [ 'icu_implementation' ],
+ 'sources': [
+ '<@(icu_src_stubdata)'
+ ],
+ 'include_dirs': [
+ '../../deps/icu/source/common',
+ ],
+ },
+ # this target is for v8 consumption.
+ # it is icuuc + stubdata
+ # it is only built for target
+ {
+ 'target_name': 'icuuc',
+ 'type': 'none',
+ 'toolsets': [ 'target' ],
+ 'dependencies': [ 'icuucx', 'icudata' ],
+ 'export_dependent_settings': [ 'icuucx', 'icudata' ],
+ },
+ # This is the 'real' icuuc.
+ # tools can depend on 'icuuc + stubdata'
+ {
+ 'target_name': 'icuucx',
+ 'type': '<(library)',
+ 'dependencies': [ 'icu_implementation', 'icu_uconfig' ],
+ 'toolsets': [ 'host', 'target' ],
+ 'sources': [
+ '<@(icu_src_common)'
+ ],
+ 'include_dirs': [
+ '../../deps/icu/source/common',
+ ],
+ 'defines': [
+ 'U_COMMON_IMPLEMENTATION=1',
+ ],
+ 'export_dependent_settings': [ 'icu_uconfig' ],
+ 'direct_dependent_settings': {
+ 'include_dirs': [
+ '../../deps/icu/source/common',
+ ],
+ 'conditions': [
+ [ 'OS=="win"', {
+ 'link_settings': {
+ 'libraries': [ '-lAdvAPI32.Lib', '-lUser32.lib' ],
+ },
+ }],
+ ],
+ },
+ },
+ # tools library
+ {
+ 'target_name': 'icutools',
+ 'type': '<(library)',
+ 'toolsets': [ 'host' ],
+ 'dependencies': [ 'icuucx', 'icui18n', 'icustubdata' ],
+ 'sources': [
+ '<@(icu_src_tools)'
+ ],
+ 'include_dirs': [
+ '../../deps/icu/source/tools/toolutil',
+ ],
+ 'defines': [
+ 'U_TOOLUTIL_IMPLEMENTATION=1',
+ #'DEBUG=0', # http://bugs.icu-project.org/trac/ticket/10977
+ ],
+ 'direct_dependent_settings': {
+ 'include_dirs': [
+ '../../deps/icu/source/tools/toolutil',
+ ],
+ },
+ 'export_dependent_settings': [ 'icuucx', 'icui18n', 'icustubdata' ],
+ },
+ # This tool is needed to rebuild .res files from .txt,
+ # or to build index (res_index.txt) files for small-icu
+ {
+ 'target_name': 'genrb',
+ 'type': 'executable',
+ 'toolsets': [ 'host' ],
+ 'dependencies': [ 'icutools', 'icuucx', 'icui18n' ],
+ 'sources': [
+ '<@(icu_src_genrb)'
+ ],
+ # derb is a separate executable
+ # (which is not currently built)
+ 'sources!': [
+ '<@(icu_src_derb)',
+ 'no-op.cc',
+ ],
+ },
+ # This tool is used to rebuild res_index.res manifests
+ {
+ 'target_name': 'iculslocs',
+ 'toolsets': [ 'host' ],
+ 'type': 'executable',
+ 'dependencies': [ 'icutools', 'icuucx', 'icui18n', 'icuio' ],
+ 'sources': [
+ 'iculslocs.cc',
+ 'no-op.cc',
+ ],
+ },
+ # This tool is used to package, unpackage, repackage .dat files
+ # and convert endianesses
+ {
+ 'target_name': 'icupkg',
+ 'toolsets': [ 'host' ],
+ 'type': 'executable',
+ 'dependencies': [ 'icutools', 'icuucx', 'icui18n' ],
+ 'sources': [
+ '<@(icu_src_icupkg)',
+ 'no-op.cc',
+ ],
+ },
+ # this is used to convert .dat directly into .obj
+ {
+ 'target_name': 'genccode',
+ 'toolsets': [ 'host' ],
+ 'type': 'executable',
+ 'dependencies': [ 'icutools', 'icuucx', 'icui18n' ],
+ 'sources': [
+ '<@(icu_src_genccode)',
+ 'no-op.cc',
+ ],
+ },
+ ],
+}