# 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. { 'includes': [ 'icu.gypi', ], 'variables': { 'use_system_icu%': 0, 'icu_use_data_file_flag%': 0, 'want_separate_host_toolset%': 1, }, 'target_defaults': { 'direct_dependent_settings': { 'defines': [ # Tell ICU to not insert |using namespace icu;| into its headers, # so that chrome's source explicitly has to use |icu::|. 'U_USING_ICU_NAMESPACE=0', # We don't use ICU plugins and dyload is only necessary for them. # NaCl-related builds also fail looking for dlfcn.h when it's enabled. 'U_ENABLE_DYLOAD=0', ], }, 'defines': [ 'U_USING_ICU_NAMESPACE=0', 'HAVE_DLOPEN=0', # Only build encoding coverters and detectors necessary for HTML5. 'UCONFIG_ONLY_HTML_CONVERSION=1', # No dependency on the default platform encoding. # Will cut down the code size. 'U_CHARSET_IS_UTF8=1', ], 'conditions': [ ['component=="static_library"', { 'defines': [ 'U_STATIC_IMPLEMENTATION', ], }], ['OS=="win"', { 'defines': [ 'UCHAR_TYPE=wchar_t', ], 'cflags': [ '/utf-8' ], },{ 'defines': [ 'UCHAR_TYPE=uint16_t', ], }], ['(OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris" \ or OS=="netbsd" or OS=="mac" or OS=="android" or OS=="qnx") and \ (target_arch=="arm" or target_arch=="ia32" or \ target_arch=="mipsel" or target_arch=="mips" or \ target_arch=="ppc" or target_arch=="s390")', { 'target_conditions': [ ['_toolset=="host"', { 'conditions': [ ['host_arch=="s390" or host_arch=="s390x"', { 'cflags': [ '-m31' ], 'ldflags': [ '-m31' ], 'asflags': [ '-31' ], },{ 'cflags': [ '-m32' ], 'ldflags': [ '-m32' ], 'asflags': [ '-32' ], }], ], 'xcode_settings': { 'ARCHS': [ 'i386' ], }, }], ], }], ['(OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris" \ or OS=="netbsd" or OS=="mac" or OS=="android" or OS=="qnx") and \ (target_arch=="arm64" or target_arch=="x64" or \ target_arch=="mips64el" or target_arch=="mips64" or \ target_arch=="ppc64" or target_arch=="s390x")', { 'target_conditions': [ ['_toolset=="host"', { 'cflags': [ '-m64' ], 'ldflags': [ '-m64' ], 'asflags': [ '-64' ], 'xcode_settings': { 'ARCHS': [ 'x86_64' ], }, }], ], }], ], 'include_dirs': [ 'source/common', 'source/i18n', ], 'msvs_disabled_warnings': [4005, 4068, 4267], }, 'conditions': [ ['use_system_icu==0 or want_separate_host_toolset==1', { 'targets': [ { 'target_name': 'copy_icudt_dat', 'type': 'none', # icudtl.dat is the same for both host/target, so this only supports a # single toolset. If a target requires that the .dat file be copied # to the output directory, it should explicitly depend on this target # with the host toolset (like copy_icudt_dat#host). 'toolsets': [ 'host' ], 'copies': [{ 'destination': '<(PRODUCT_DIR)', 'conditions': [ ['OS == "android"', { 'files': [ 'android/icudtl.dat', ], } , { # else: OS != android 'conditions': [ # Big Endian [ 'v8_host_byteorder=="big" or target_arch=="mips" or \ target_arch=="mips64"', { 'files': [ 'common/icudtb.dat', ], } , { # else: ! Big Endian = Little Endian 'files': [ 'common/icudtl.dat', ], }], ], }], ], }], }, { 'target_name': 'data_assembly', 'type': 'none', 'conditions': [ [ 'v8_host_byteorder=="big" or target_arch=="mips" or \ target_arch=="mips64"', { # Big Endian 'data_assembly_inputs': [ 'common/icudtb.dat', ], 'data_assembly_outputs': [ '<(SHARED_INTERMEDIATE_DIR)/third_party/icu/icudtb_dat.S', ], }, { # Little Endian 'data_assembly_outputs': [ '<(SHARED_INTERMEDIATE_DIR)/third_party/icu/icudtl_dat.S', ], 'conditions': [ ['OS == "android"', { 'data_assembly_inputs': [ 'android/icudtl.dat', ], } , { # else: OS!="android" 'data_assembly_inputs': [ 'common/icudtl.dat', ], }], # OS==android ], }], ], 'sources': [ '<@(_data_assembly_inputs)', ], 'actions': [ { 'action_name': 'make_data_assembly', 'inputs': [ 'scripts/make_data_assembly.py', '<@(_data_assembly_inputs)', ], 'outputs': [ '<@(_data_assembly_outputs)', ], 'target_conditions': [ [ 'OS == "mac" or OS == "ios" or ' '((OS == "android" or OS == "qnx") and ' '_toolset == "host" and host_os == "mac")', { 'action': ['python', '<@(_inputs)', '<@(_outputs)', '--mac'], } , { 'action': ['python', '<@(_inputs)', '<@(_outputs)'], }], ], }, ], }, { 'target_name': 'icudata', 'type': 'static_library', 'defines': [ 'U_HIDE_DATA_SYMBOL', ], 'dependencies': [ 'data_assembly#target', ], 'sources': [ '<(SHARED_INTERMEDIATE_DIR)/third_party/icu/icudtl_dat.S', '<(SHARED_INTERMEDIATE_DIR)/third_party/icu/icudtb_dat.S', ], 'conditions': [ [ 'v8_host_byteorder=="big" or target_arch=="mips" or \ target_arch=="mips64"', { 'sources!': [ '<(SHARED_INTERMEDIATE_DIR)/third_party/icu/icudtl_dat.S' ], }, { 'sources!': [ '<(SHARED_INTERMEDIATE_DIR)/third_party/icu/icudtb_dat.S' ], }], [ 'use_system_icu==1 and want_separate_host_toolset==1', { 'toolsets': ['host'], }], [ 'use_system_icu==0 and want_separate_host_toolset==1', { 'toolsets': ['host', 'target'], }], [ 'use_system_icu==0 and want_separate_host_toolset==0', { 'toolsets': ['target'], }], [ 'OS == "win" and icu_use_data_file_flag==0', { 'type': 'none', 'dependencies!': [ 'data_assembly#target', ], 'copies': [ { 'destination': '<(PRODUCT_DIR)', 'files': [ 'windows/icudt.dll', ], }, ], }], [ 'icu_use_data_file_flag==1', { 'type': 'none', 'dependencies!': [ 'data_assembly#target', ], # Remove any assembly data file. 'sources/': [['exclude', 'icudt[lb]_dat']], # Make sure any binary depending on this gets the data file. 'conditions': [ ['OS != "ios"', { 'dependencies': [ 'copy_icudt_dat#host', ], } , { # else: OS=="ios" 'link_settings': { 'mac_bundle_resources': [ 'common/icudtl.dat', ], }, }], # OS!=ios ], # conditions }], # icu_use_data_file_flag ], # conditions 'target_conditions': [ [ 'OS == "win"', { 'sources!': [ '<(SHARED_INTERMEDIATE_DIR)/third_party/icu/icudtl_dat.S', '<(SHARED_INTERMEDIATE_DIR)/third_party/icu/icudtb_dat.S' ], }], ], # target_conditions }, { 'target_name': 'icui18n', 'type': '<(component)', 'sources': [ '<@(icui18n_sources)', ], 'defines': [ 'U_I18N_IMPLEMENTATION', ], 'dependencies': [ 'icuuc', ], 'direct_dependent_settings': { 'include_dirs': [ 'source/i18n', ], }, 'variables': { 'clang_warning_flags': [ # ICU uses its own deprecated functions. '-Wno-deprecated-declarations', # ICU prefers `a && b || c` over `(a && b) || c`. '-Wno-logical-op-parentheses', # ICU has some `unsigned < 0` checks. '-Wno-tautological-compare', # ICU has some code with the pattern: # if (found = uprv_getWindowsTimeZoneInfo(...)) '-Wno-parentheses', ], }, # Since ICU wants to internally use its own deprecated APIs, don't # complain about it. 'cflags': [ '-Wno-deprecated-declarations', ], 'cflags_cc': [ '-frtti', ], 'cflags_cc!': [ '-fno-rtti', ], 'xcode_settings': { 'GCC_ENABLE_CPP_RTTI': 'YES', # -frtti }, 'msvs_settings': { 'VCCLCompilerTool': { 'RuntimeTypeInfo': 'true', }, }, 'conditions': [ [ 'use_system_icu==1 and want_separate_host_toolset==1', { 'toolsets': ['host'], }], [ 'use_system_icu==0 and want_separate_host_toolset==1', { 'toolsets': ['host', 'target'], }], [ 'use_system_icu==0 and want_separate_host_toolset==0', { 'toolsets': ['target'], }], ['OS == "android" and clang==0', { # Disable sincos() optimization to avoid a linker error since # Android's math library doesn't have sincos(). Either # -fno-builtin-sin or -fno-builtin-cos works. 'cflags': [ '-fno-builtin-sin', ], }], [ 'OS == "win" and clang==1', { # Note: General clang warnings should go in the # clang_warning_flags block above. 'msvs_settings': { 'VCCLCompilerTool': { 'AdditionalOptions': [ '-Wno-implicit-exception-spec-mismatch', ], }, }, }], ], # conditions }, { 'target_name': 'icuuc', 'type': '<(component)', 'sources': [ '<@(icuuc_sources)', ], 'defines': [ 'U_COMMON_IMPLEMENTATION', ], 'dependencies': [ 'icudata', ], 'direct_dependent_settings': { 'include_dirs': [ 'source/common', ], 'conditions': [ [ 'component=="static_library"', { 'defines': [ 'U_STATIC_IMPLEMENTATION', ], }], ], }, 'variables': { 'clang_warning_flags': [ # ICU uses its own deprecated functions. '-Wno-deprecated-declarations', # ICU prefers `a && b || c` over `(a && b) || c`. '-Wno-logical-op-parentheses', # ICU has some `unsigned < 0` checks. '-Wno-tautological-compare', # uresdata.c has switch(RES_GET_TYPE(x)) code. The # RES_GET_TYPE macro returns an UResType enum, but some switch # statement contains case values that aren't part of that # enum (e.g. URES_TABLE32 which is in UResInternalType). This # is on purpose. '-Wno-switch', # ICU has some code with the pattern: # if (found = uprv_getWindowsTimeZoneInfo(...)) '-Wno-parentheses', # ICU generally has no unused variables, but there are a few # places where this warning triggers. # See https://codereview.chromium.org/1222643002/ and # http://www.icu-project.org/trac/ticket/11759. '-Wno-unused-const-variable', # ucnv2022.cpp contains three functions that are only used when # certain preprocessor defines are set. '-Wno-unused-function', ], }, 'cflags': [ # Since ICU wants to internally use its own deprecated APIs, # don't complain about it. '-Wno-deprecated-declarations', '-Wno-unused-function', ], 'cflags_cc': [ '-frtti', ], 'cflags_cc!': [ '-fno-rtti', ], 'xcode_settings': { 'GCC_ENABLE_CPP_RTTI': 'YES', # -frtti }, 'msvs_settings': { 'VCCLCompilerTool': { 'RuntimeTypeInfo': 'true', }, }, 'all_dependent_settings': { 'msvs_settings': { 'VCLinkerTool': { 'AdditionalDependencies': [ 'advapi32.lib', ], }, }, }, 'conditions': [ [ 'use_system_icu==1 and want_separate_host_toolset==1', { 'toolsets': ['host'], }], [ 'use_system_icu==0 and want_separate_host_toolset==1', { 'toolsets': ['host', 'target'], }], [ 'use_system_icu==0 and want_separate_host_toolset==0', { 'toolsets': ['target'], }], [ 'OS == "win" or icu_use_data_file_flag==1', { 'sources': [ 'source/stubdata/stubdata.cpp', ], 'defines': [ 'U_ICUDATAENTRY_IN_COMMON', ], }], [ 'OS == "win" and clang==1', { # Note: General clang warnings should go in the # clang_warning_flags block above. 'msvs_settings': { 'VCCLCompilerTool': { 'AdditionalOptions': [ '-Wno-implicit-exception-spec-mismatch', ], }, }, }], ], # conditions }, ], # targets }], ['use_system_icu==1', { 'targets': [ { 'target_name': 'system_icu', 'type': 'none', 'conditions': [ ['OS=="qnx"', { 'link_settings': { 'libraries': [ '-licui18n', '-licuuc', ], }, }], ['OS!="qnx"', { 'link_settings': { 'ldflags': [ '