1*6777b538SAndroid Build Coastguard Worker# Copyright 2014 The Chromium Authors. All rights reserved. 2*6777b538SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker# found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Workerimport("//build/config/features.gni") 6*6777b538SAndroid Build Coastguard Workerimport("//build/config/host_byteorder.gni") 7*6777b538SAndroid Build Coastguard Workerimport("config.gni") 8*6777b538SAndroid Build Coastguard Workerimport("sources.gni") 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Workerif (is_android) { 11*6777b538SAndroid Build Coastguard Worker import("//build/config/android/rules.gni") 12*6777b538SAndroid Build Coastguard Worker} 13*6777b538SAndroid Build Coastguard Worker 14*6777b538SAndroid Build Coastguard Workerif (is_mac && !icu_is_in_fuchsia) { 15*6777b538SAndroid Build Coastguard Worker import("//build/config/sanitizers/sanitizers.gni") 16*6777b538SAndroid Build Coastguard Worker} 17*6777b538SAndroid Build Coastguard Worker 18*6777b538SAndroid Build Coastguard Workerassert(!icu_disable_thin_archive || !is_component_build, 19*6777b538SAndroid Build Coastguard Worker "icu_disable_thin_archive only works in static library builds") 20*6777b538SAndroid Build Coastguard Worker 21*6777b538SAndroid Build Coastguard Worker# Meta target that includes both icuuc and icui18n. Most targets want both. 22*6777b538SAndroid Build Coastguard Worker# You can depend on the individually if you need to. 23*6777b538SAndroid Build Coastguard Workergroup("icu") { 24*6777b538SAndroid Build Coastguard Worker public_deps = [ 25*6777b538SAndroid Build Coastguard Worker ":icui18n", 26*6777b538SAndroid Build Coastguard Worker ":icuuc", 27*6777b538SAndroid Build Coastguard Worker ] 28*6777b538SAndroid Build Coastguard Worker} 29*6777b538SAndroid Build Coastguard Worker 30*6777b538SAndroid Build Coastguard Worker# Shared config used by ICU and all dependents. 31*6777b538SAndroid Build Coastguard Workerconfig("icu_config") { 32*6777b538SAndroid Build Coastguard Worker defines = [ 33*6777b538SAndroid Build Coastguard Worker # Tell ICU to not insert |using namespace icu;| into its headers, 34*6777b538SAndroid Build Coastguard Worker # so that chrome's source explicitly has to use |icu::|. 35*6777b538SAndroid Build Coastguard Worker "U_USING_ICU_NAMESPACE=0", 36*6777b538SAndroid Build Coastguard Worker 37*6777b538SAndroid Build Coastguard Worker # We don't use ICU plugins and dyload is only necessary for them. 38*6777b538SAndroid Build Coastguard Worker # NaCl-related builds also fail looking for dlfcn.h when it's enabled. 39*6777b538SAndroid Build Coastguard Worker "U_ENABLE_DYLOAD=0", 40*6777b538SAndroid Build Coastguard Worker 41*6777b538SAndroid Build Coastguard Worker # v8/Blink need to know whether Chromium's copy of ICU is used or not. 42*6777b538SAndroid Build Coastguard Worker "USE_CHROMIUM_ICU=1", 43*6777b538SAndroid Build Coastguard Worker 44*6777b538SAndroid Build Coastguard Worker # Enable tracing to connect to UMA but disable tracing of resource 45*6777b538SAndroid Build Coastguard Worker # to avoid performance issues. 46*6777b538SAndroid Build Coastguard Worker "U_ENABLE_TRACING=1", 47*6777b538SAndroid Build Coastguard Worker "U_ENABLE_RESOURCE_TRACING=0", 48*6777b538SAndroid Build Coastguard Worker ] 49*6777b538SAndroid Build Coastguard Worker 50*6777b538SAndroid Build Coastguard Worker if (!is_component_build) { 51*6777b538SAndroid Build Coastguard Worker defines += [ "U_STATIC_IMPLEMENTATION" ] 52*6777b538SAndroid Build Coastguard Worker } 53*6777b538SAndroid Build Coastguard Worker 54*6777b538SAndroid Build Coastguard Worker include_dirs = [ 55*6777b538SAndroid Build Coastguard Worker "source/common", 56*6777b538SAndroid Build Coastguard Worker "source/i18n", 57*6777b538SAndroid Build Coastguard Worker ] 58*6777b538SAndroid Build Coastguard Worker 59*6777b538SAndroid Build Coastguard Worker if (icu_use_data_file) { 60*6777b538SAndroid Build Coastguard Worker defines += [ "ICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_FILE" ] 61*6777b538SAndroid Build Coastguard Worker } else { 62*6777b538SAndroid Build Coastguard Worker defines += [ "ICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_STATIC" ] 63*6777b538SAndroid Build Coastguard Worker } 64*6777b538SAndroid Build Coastguard Worker} 65*6777b538SAndroid Build Coastguard Worker 66*6777b538SAndroid Build Coastguard Worker# Config used only by ICU code. 67*6777b538SAndroid Build Coastguard Workerconfig("icu_code") { 68*6777b538SAndroid Build Coastguard Worker cflags = [] 69*6777b538SAndroid Build Coastguard Worker defines = [ 70*6777b538SAndroid Build Coastguard Worker "HAVE_DLOPEN=0", 71*6777b538SAndroid Build Coastguard Worker 72*6777b538SAndroid Build Coastguard Worker # Only build encoding coverters and detectors necessary for HTML5. 73*6777b538SAndroid Build Coastguard Worker "UCONFIG_ONLY_HTML_CONVERSION=1", 74*6777b538SAndroid Build Coastguard Worker 75*6777b538SAndroid Build Coastguard Worker "UCONFIG_USE_ML_PHRASE_BREAKING=1", 76*6777b538SAndroid Build Coastguard Worker 77*6777b538SAndroid Build Coastguard Worker # TODO(jshin): do we still need this? 78*6777b538SAndroid Build Coastguard Worker "UCONFIG_USE_WINDOWS_LCID_MAPPING_API=0", 79*6777b538SAndroid Build Coastguard Worker 80*6777b538SAndroid Build Coastguard Worker # No dependency on the default platform encoding. 81*6777b538SAndroid Build Coastguard Worker # Will cut down the code size. 82*6777b538SAndroid Build Coastguard Worker "U_CHARSET_IS_UTF8=1", 83*6777b538SAndroid Build Coastguard Worker ] 84*6777b538SAndroid Build Coastguard Worker 85*6777b538SAndroid Build Coastguard Worker if (is_win) { 86*6777b538SAndroid Build Coastguard Worker # Disable some compiler warnings. 87*6777b538SAndroid Build Coastguard Worker cflags += [ 88*6777b538SAndroid Build Coastguard Worker "/wd4005", # Macro redefinition. 89*6777b538SAndroid Build Coastguard Worker "/wd4068", # Unknown pragmas. 90*6777b538SAndroid Build Coastguard Worker "/wd4267", # Conversion from size_t on 64-bits. 91*6777b538SAndroid Build Coastguard Worker "/utf-8", # ICU source files are in UTF-8. 92*6777b538SAndroid Build Coastguard Worker ] 93*6777b538SAndroid Build Coastguard Worker if (!is_clang) { 94*6777b538SAndroid Build Coastguard Worker cflags += [ 95*6777b538SAndroid Build Coastguard Worker # Ignore some msvc warnings here because V8 still supports msvc. 96*6777b538SAndroid Build Coastguard Worker "/wd4244", # Conversion: possible loss of data. 97*6777b538SAndroid Build Coastguard Worker ] 98*6777b538SAndroid Build Coastguard Worker defines += [ 99*6777b538SAndroid Build Coastguard Worker # https://crbug.com/1274247 100*6777b538SAndroid Build Coastguard Worker # <ctgmath> is deprecated in C++17, but ICU still uses it, so we should 101*6777b538SAndroid Build Coastguard Worker # silence the warning for now. 102*6777b538SAndroid Build Coastguard Worker "_SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING", 103*6777b538SAndroid Build Coastguard Worker ] 104*6777b538SAndroid Build Coastguard Worker } 105*6777b538SAndroid Build Coastguard Worker } else if (is_linux || is_chromeos || is_android || icu_is_in_fuchsia) { 106*6777b538SAndroid Build Coastguard Worker cflags += [ "-Wno-unused-function" ] 107*6777b538SAndroid Build Coastguard Worker } 108*6777b538SAndroid Build Coastguard Worker if (is_clang) { 109*6777b538SAndroid Build Coastguard Worker cflags += [ 110*6777b538SAndroid Build Coastguard Worker # ICU has some code with the pattern: 111*6777b538SAndroid Build Coastguard Worker # if (found = uprv_getWindowsTimeZoneInfo(...)) 112*6777b538SAndroid Build Coastguard Worker "-Wno-parentheses", 113*6777b538SAndroid Build Coastguard Worker 114*6777b538SAndroid Build Coastguard Worker # ucnv2022.cpp contains three functions that are only used when 115*6777b538SAndroid Build Coastguard Worker # certain preprocessor defines are set. 116*6777b538SAndroid Build Coastguard Worker # unistr.cpp also has an unused function for non-component builds. 117*6777b538SAndroid Build Coastguard Worker "-Wno-unused-function", 118*6777b538SAndroid Build Coastguard Worker 119*6777b538SAndroid Build Coastguard Worker # putil.cpp contains unused variables when building for iOS simulators. 120*6777b538SAndroid Build Coastguard Worker "-Wno-unused-variable", 121*6777b538SAndroid Build Coastguard Worker 122*6777b538SAndroid Build Coastguard Worker # ICU has decided not to fix this warning as doing so would break its 123*6777b538SAndroid Build Coastguard Worker # stable API. 124*6777b538SAndroid Build Coastguard Worker "-Wno-ambiguous-reversed-operator", 125*6777b538SAndroid Build Coastguard Worker ] 126*6777b538SAndroid Build Coastguard Worker } 127*6777b538SAndroid Build Coastguard Worker if (is_clang || is_linux || is_chromeos || is_android || icu_is_in_fuchsia) { 128*6777b538SAndroid Build Coastguard Worker cflags += [ 129*6777b538SAndroid Build Coastguard Worker # ICU uses its own deprecated functions. 130*6777b538SAndroid Build Coastguard Worker "-Wno-deprecated-declarations", 131*6777b538SAndroid Build Coastguard Worker ] 132*6777b538SAndroid Build Coastguard Worker } 133*6777b538SAndroid Build Coastguard Worker if (icu_is_in_fuchsia) { 134*6777b538SAndroid Build Coastguard Worker cflags += [ 135*6777b538SAndroid Build Coastguard Worker # Disable spurious thread safety errors in umutex.cpp 136*6777b538SAndroid Build Coastguard Worker "-Wno-thread-safety", 137*6777b538SAndroid Build Coastguard Worker 138*6777b538SAndroid Build Coastguard Worker # Can probably remove the below after 139*6777b538SAndroid Build Coastguard Worker # https://unicode-org.atlassian.net/projects/ICU/issues/ICU-20869 140*6777b538SAndroid Build Coastguard Worker # is fixed. 141*6777b538SAndroid Build Coastguard Worker "-Wno-implicit-int-float-conversion", 142*6777b538SAndroid Build Coastguard Worker "-Wno-conversion", 143*6777b538SAndroid Build Coastguard Worker 144*6777b538SAndroid Build Coastguard Worker # Needed for C++20 145*6777b538SAndroid Build Coastguard Worker "-Wno-ambiguous-reversed-operator", 146*6777b538SAndroid Build Coastguard Worker "-Wno-rewrite-not-bool", 147*6777b538SAndroid Build Coastguard Worker "-Wno-deprecated-anon-enum-enum-conversion", 148*6777b538SAndroid Build Coastguard Worker "-Wno-deprecated-array-compare", 149*6777b538SAndroid Build Coastguard Worker "-Wno-deprecated-pragma", 150*6777b538SAndroid Build Coastguard Worker 151*6777b538SAndroid Build Coastguard Worker # Used for conditional changes to the compilation process that 152*6777b538SAndroid Build Coastguard Worker # are only needed for the Fuchsia toolchain. 153*6777b538SAndroid Build Coastguard Worker "-DICU_IS_IN_FUCHSIA", 154*6777b538SAndroid Build Coastguard Worker ] + icu_fuchsia_extra_compile_flags 155*6777b538SAndroid Build Coastguard Worker } 156*6777b538SAndroid Build Coastguard Worker if (current_cpu == "wasm") { 157*6777b538SAndroid Build Coastguard Worker # Tell ICU that we are a 32 bit platform, otherwise, 158*6777b538SAndroid Build Coastguard Worker # double-conversion-utils.h doesn't know how to operate. 159*6777b538SAndroid Build Coastguard Worker defines += [ "__i386__" ] 160*6777b538SAndroid Build Coastguard Worker } 161*6777b538SAndroid Build Coastguard Worker} 162*6777b538SAndroid Build Coastguard Worker 163*6777b538SAndroid Build Coastguard Worker# Config used to set default visibility to hidden. 164*6777b538SAndroid Build Coastguard Workerconfig("visibility_hidden") { 165*6777b538SAndroid Build Coastguard Worker cflags = [] 166*6777b538SAndroid Build Coastguard Worker if (is_mac || is_linux || is_chromeos || is_android || is_fuchsia) { 167*6777b538SAndroid Build Coastguard Worker cflags += [ "-fvisibility=hidden" ] 168*6777b538SAndroid Build Coastguard Worker } 169*6777b538SAndroid Build Coastguard Worker} 170*6777b538SAndroid Build Coastguard Worker 171*6777b538SAndroid Build Coastguard Workertemplate("generate_icu_component") { 172*6777b538SAndroid Build Coastguard Worker if (icu_is_in_fuchsia) { 173*6777b538SAndroid Build Coastguard Worker target(default_library_type, target_name) { 174*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 175*6777b538SAndroid Build Coastguard Worker "*", 176*6777b538SAndroid Build Coastguard Worker [ 177*6777b538SAndroid Build Coastguard Worker "testonly", 178*6777b538SAndroid Build Coastguard Worker "visibility", 179*6777b538SAndroid Build Coastguard Worker ]) 180*6777b538SAndroid Build Coastguard Worker assert(fuchsia_output_name_postfix == "") 181*6777b538SAndroid Build Coastguard Worker 182*6777b538SAndroid Build Coastguard Worker # If icu_use_target_out_dir is defined and set, then the component 183*6777b538SAndroid Build Coastguard Worker # will be output in the regular target_out_dir, rather than the default 184*6777b538SAndroid Build Coastguard Worker # root_build_dir. 185*6777b538SAndroid Build Coastguard Worker # See README.fuchsia for details. 186*6777b538SAndroid Build Coastguard Worker if (defined(icu_use_target_out_dir) && icu_use_target_out_dir) { 187*6777b538SAndroid Build Coastguard Worker output_dir = target_out_dir 188*6777b538SAndroid Build Coastguard Worker } 189*6777b538SAndroid Build Coastguard Worker 190*6777b538SAndroid Build Coastguard Worker # ICU uses RTTI, replace the default "no rtti" config (if applied). 191*6777b538SAndroid Build Coastguard Worker configs += [ 192*6777b538SAndroid Build Coastguard Worker "//build/config:no_rtti", 193*6777b538SAndroid Build Coastguard Worker "//build/config:symbol_visibility_hidden", 194*6777b538SAndroid Build Coastguard Worker ] 195*6777b538SAndroid Build Coastguard Worker configs -= [ 196*6777b538SAndroid Build Coastguard Worker "//build/config:no_rtti", 197*6777b538SAndroid Build Coastguard Worker "//build/config:symbol_visibility_hidden", 198*6777b538SAndroid Build Coastguard Worker ] 199*6777b538SAndroid Build Coastguard Worker 200*6777b538SAndroid Build Coastguard Worker configs += [ "//build/config:rtti" ] 201*6777b538SAndroid Build Coastguard Worker 202*6777b538SAndroid Build Coastguard Worker # These need to be applied after the main configs so the "-Wno-*" options 203*6777b538SAndroid Build Coastguard Worker # take effect. 204*6777b538SAndroid Build Coastguard Worker configs += [ ":icu_code" ] 205*6777b538SAndroid Build Coastguard Worker configs += extra_configs 206*6777b538SAndroid Build Coastguard Worker # Add Fuchsia-specific configs 207*6777b538SAndroid Build Coastguard Worker configs += icu_fuchsia_extra_configs 208*6777b538SAndroid Build Coastguard Worker # Remove Fuchsia-specific configs, the "add-then-remove" ensures that 209*6777b538SAndroid Build Coastguard Worker # removing a config that is not there does not fail. 210*6777b538SAndroid Build Coastguard Worker configs += icu_fuchsia_remove_configs 211*6777b538SAndroid Build Coastguard Worker configs -= icu_fuchsia_remove_configs 212*6777b538SAndroid Build Coastguard Worker public_configs = [ ":icu_config" ] 213*6777b538SAndroid Build Coastguard Worker } 214*6777b538SAndroid Build Coastguard Worker } else { 215*6777b538SAndroid Build Coastguard Worker component(target_name) { 216*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 217*6777b538SAndroid Build Coastguard Worker "*", 218*6777b538SAndroid Build Coastguard Worker [ 219*6777b538SAndroid Build Coastguard Worker "testonly", 220*6777b538SAndroid Build Coastguard Worker "visibility", 221*6777b538SAndroid Build Coastguard Worker ]) 222*6777b538SAndroid Build Coastguard Worker 223*6777b538SAndroid Build Coastguard Worker # If icu_use_target_output_dir is defined and set, then the component 224*6777b538SAndroid Build Coastguard Worker # will be output in the regular target_out_dir, rather than the default 225*6777b538SAndroid Build Coastguard Worker # root_build_dir. 226*6777b538SAndroid Build Coastguard Worker # See README.fuchsia for details. 227*6777b538SAndroid Build Coastguard Worker if (defined(icu_use_target_output_dir) && icu_use_target_output_dir) { 228*6777b538SAndroid Build Coastguard Worker output_dir = target_out_dir 229*6777b538SAndroid Build Coastguard Worker } 230*6777b538SAndroid Build Coastguard Worker 231*6777b538SAndroid Build Coastguard Worker if (is_fuchsia) { 232*6777b538SAndroid Build Coastguard Worker base_output_name = target_name 233*6777b538SAndroid Build Coastguard Worker if (defined(invoker.output_name)) { 234*6777b538SAndroid Build Coastguard Worker base_output_name = invoker.output_name 235*6777b538SAndroid Build Coastguard Worker } 236*6777b538SAndroid Build Coastguard Worker 237*6777b538SAndroid Build Coastguard Worker # Fuchsia puts its own libicu*.so in /system/lib where we need to put our 238*6777b538SAndroid Build Coastguard Worker # .so when doing component builds, so we need to give this a different name. 239*6777b538SAndroid Build Coastguard Worker output_name = "${base_output_name}_cr${fuchsia_output_name_postfix}" 240*6777b538SAndroid Build Coastguard Worker } else { 241*6777b538SAndroid Build Coastguard Worker assert(fuchsia_output_name_postfix == "") 242*6777b538SAndroid Build Coastguard Worker } 243*6777b538SAndroid Build Coastguard Worker 244*6777b538SAndroid Build Coastguard Worker # ICU uses RTTI, replace the default "no rtti" config (if applied). 245*6777b538SAndroid Build Coastguard Worker configs += [ 246*6777b538SAndroid Build Coastguard Worker "//build/config/compiler:no_rtti", 247*6777b538SAndroid Build Coastguard Worker "//build/config/compiler:chromium_code", 248*6777b538SAndroid Build Coastguard Worker ] 249*6777b538SAndroid Build Coastguard Worker configs -= [ 250*6777b538SAndroid Build Coastguard Worker "//build/config/compiler:no_rtti", 251*6777b538SAndroid Build Coastguard Worker "//build/config/compiler:chromium_code", 252*6777b538SAndroid Build Coastguard Worker ] 253*6777b538SAndroid Build Coastguard Worker configs += [ 254*6777b538SAndroid Build Coastguard Worker "//build/config/compiler:rtti", 255*6777b538SAndroid Build Coastguard Worker "//build/config/compiler:no_chromium_code", 256*6777b538SAndroid Build Coastguard Worker ] 257*6777b538SAndroid Build Coastguard Worker 258*6777b538SAndroid Build Coastguard Worker # These need to be applied after the main configs so the "-Wno-*" options 259*6777b538SAndroid Build Coastguard Worker # take effect. 260*6777b538SAndroid Build Coastguard Worker configs += [ ":icu_code" ] 261*6777b538SAndroid Build Coastguard Worker configs += extra_configs 262*6777b538SAndroid Build Coastguard Worker # See a similar stanza above for details. 263*6777b538SAndroid Build Coastguard Worker configs += icu_fuchsia_extra_configs 264*6777b538SAndroid Build Coastguard Worker configs += icu_fuchsia_remove_configs 265*6777b538SAndroid Build Coastguard Worker configs -= icu_fuchsia_remove_configs 266*6777b538SAndroid Build Coastguard Worker public_configs = [ ":icu_config" ] 267*6777b538SAndroid Build Coastguard Worker 268*6777b538SAndroid Build Coastguard Worker # Make icu into a standalone static library. Currently This is only useful 269*6777b538SAndroid Build Coastguard Worker # on Chrome OS. 270*6777b538SAndroid Build Coastguard Worker if (icu_disable_thin_archive) { 271*6777b538SAndroid Build Coastguard Worker configs -= [ "//build/config/compiler:thin_archive" ] 272*6777b538SAndroid Build Coastguard Worker complete_static_lib = true 273*6777b538SAndroid Build Coastguard Worker } 274*6777b538SAndroid Build Coastguard Worker } 275*6777b538SAndroid Build Coastguard Worker } 276*6777b538SAndroid Build Coastguard Worker} 277*6777b538SAndroid Build Coastguard Worker 278*6777b538SAndroid Build Coastguard Workertemplate("generate_icui18n") { 279*6777b538SAndroid Build Coastguard Worker generate_icu_component(target_name) { 280*6777b538SAndroid Build Coastguard Worker assert(defined(invoker.icuuc_deps), "Need the 'icuuc_deps' parameter.") 281*6777b538SAndroid Build Coastguard Worker icuuc_deps = invoker.icuuc_deps 282*6777b538SAndroid Build Coastguard Worker 283*6777b538SAndroid Build Coastguard Worker fuchsia_output_name_postfix = "" 284*6777b538SAndroid Build Coastguard Worker if (defined(invoker.fuchsia_output_name_postfix)) { 285*6777b538SAndroid Build Coastguard Worker fuchsia_output_name_postfix = invoker.fuchsia_output_name_postfix 286*6777b538SAndroid Build Coastguard Worker } 287*6777b538SAndroid Build Coastguard Worker 288*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 289*6777b538SAndroid Build Coastguard Worker "*", 290*6777b538SAndroid Build Coastguard Worker [ 291*6777b538SAndroid Build Coastguard Worker "testonly", 292*6777b538SAndroid Build Coastguard Worker "visibility", 293*6777b538SAndroid Build Coastguard Worker ]) 294*6777b538SAndroid Build Coastguard Worker 295*6777b538SAndroid Build Coastguard Worker sources = icu18n_sources 296*6777b538SAndroid Build Coastguard Worker public = icu18n_public 297*6777b538SAndroid Build Coastguard Worker 298*6777b538SAndroid Build Coastguard Worker defines = [ "U_I18N_IMPLEMENTATION" ] 299*6777b538SAndroid Build Coastguard Worker deps = icuuc_deps 300*6777b538SAndroid Build Coastguard Worker 301*6777b538SAndroid Build Coastguard Worker # TODO(fxbug.dev/42180987): workaround for toolchain issues, see bug 302*6777b538SAndroid Build Coastguard Worker if (icu_is_in_fuchsia && is_fuchsia) { 303*6777b538SAndroid Build Coastguard Worker deps += [ "//build/config/fuchsia:uses-outline-atomics-fxbug98632" ] 304*6777b538SAndroid Build Coastguard Worker } 305*6777b538SAndroid Build Coastguard Worker } 306*6777b538SAndroid Build Coastguard Worker} 307*6777b538SAndroid Build Coastguard Worker 308*6777b538SAndroid Build Coastguard Workergenerate_icui18n("icui18n") { 309*6777b538SAndroid Build Coastguard Worker extra_configs = [] 310*6777b538SAndroid Build Coastguard Worker if (icu_is_in_fuchsia) { 311*6777b538SAndroid Build Coastguard Worker # See similar stanza above for details. 312*6777b538SAndroid Build Coastguard Worker extra_configs += icu_fuchsia_extra_configs 313*6777b538SAndroid Build Coastguard Worker extra_configs += icu_fuchsia_remove_configs 314*6777b538SAndroid Build Coastguard Worker extra_configs -= icu_fuchsia_remove_configs 315*6777b538SAndroid Build Coastguard Worker } 316*6777b538SAndroid Build Coastguard Worker icuuc_deps = [ ":icuuc_private" ] 317*6777b538SAndroid Build Coastguard Worker} 318*6777b538SAndroid Build Coastguard Worker 319*6777b538SAndroid Build Coastguard Workergenerate_icui18n("icui18n_hidden_visibility") { 320*6777b538SAndroid Build Coastguard Worker extra_configs = [ ":visibility_hidden" ] 321*6777b538SAndroid Build Coastguard Worker if (icu_is_in_fuchsia) { 322*6777b538SAndroid Build Coastguard Worker # See similar stanza above for details. 323*6777b538SAndroid Build Coastguard Worker extra_configs += icu_fuchsia_extra_configs 324*6777b538SAndroid Build Coastguard Worker extra_configs += icu_fuchsia_remove_configs 325*6777b538SAndroid Build Coastguard Worker extra_configs -= icu_fuchsia_remove_configs 326*6777b538SAndroid Build Coastguard Worker } 327*6777b538SAndroid Build Coastguard Worker icuuc_deps = [ ":icuuc_private_hidden_visibility" ] 328*6777b538SAndroid Build Coastguard Worker if (is_fuchsia && !icu_is_in_fuchsia) { 329*6777b538SAndroid Build Coastguard Worker fuchsia_output_name_postfix = "_hidden_visibility" 330*6777b538SAndroid Build Coastguard Worker } 331*6777b538SAndroid Build Coastguard Worker} 332*6777b538SAndroid Build Coastguard Worker 333*6777b538SAndroid Build Coastguard Workertemplate("generate_icuuc") { 334*6777b538SAndroid Build Coastguard Worker generate_icu_component(target_name) { 335*6777b538SAndroid Build Coastguard Worker fuchsia_output_name_postfix = "" 336*6777b538SAndroid Build Coastguard Worker if (defined(invoker.fuchsia_output_name_postfix)) { 337*6777b538SAndroid Build Coastguard Worker fuchsia_output_name_postfix = invoker.fuchsia_output_name_postfix 338*6777b538SAndroid Build Coastguard Worker } 339*6777b538SAndroid Build Coastguard Worker 340*6777b538SAndroid Build Coastguard Worker forward_variables_from(invoker, 341*6777b538SAndroid Build Coastguard Worker "*", 342*6777b538SAndroid Build Coastguard Worker [ 343*6777b538SAndroid Build Coastguard Worker "testonly", 344*6777b538SAndroid Build Coastguard Worker "visibility", 345*6777b538SAndroid Build Coastguard Worker ]) 346*6777b538SAndroid Build Coastguard Worker 347*6777b538SAndroid Build Coastguard Worker sources = icuuc_sources 348*6777b538SAndroid Build Coastguard Worker public_deps = [ ":icuuc_public" ] 349*6777b538SAndroid Build Coastguard Worker 350*6777b538SAndroid Build Coastguard Worker defines = [ "U_COMMON_IMPLEMENTATION" ] 351*6777b538SAndroid Build Coastguard Worker deps = [ ":icudata" ] 352*6777b538SAndroid Build Coastguard Worker 353*6777b538SAndroid Build Coastguard Worker if (is_chromeos) { 354*6777b538SAndroid Build Coastguard Worker deps += [ ":icudata_hash" ] 355*6777b538SAndroid Build Coastguard Worker } 356*6777b538SAndroid Build Coastguard Worker 357*6777b538SAndroid Build Coastguard Worker if (icu_use_data_file && icu_use_stub_data) { 358*6777b538SAndroid Build Coastguard Worker sources += [ "source/stubdata/stubdata.cpp" ] 359*6777b538SAndroid Build Coastguard Worker } 360*6777b538SAndroid Build Coastguard Worker 361*6777b538SAndroid Build Coastguard Worker defines += [ "U_ICUDATAENTRY_IN_COMMON" ] 362*6777b538SAndroid Build Coastguard Worker 363*6777b538SAndroid Build Coastguard Worker # TODO(fxbug.dev/42180987): workaround for toolchain issues, see bug 364*6777b538SAndroid Build Coastguard Worker if (icu_is_in_fuchsia && is_fuchsia) { 365*6777b538SAndroid Build Coastguard Worker deps += [ "//build/config/fuchsia:uses-outline-atomics-fxbug98632" ] 366*6777b538SAndroid Build Coastguard Worker } 367*6777b538SAndroid Build Coastguard Worker } 368*6777b538SAndroid Build Coastguard Worker} 369*6777b538SAndroid Build Coastguard Worker 370*6777b538SAndroid Build Coastguard Workergroup("icuuc") { 371*6777b538SAndroid Build Coastguard Worker public_deps = [ ":icuuc_private" ] 372*6777b538SAndroid Build Coastguard Worker} 373*6777b538SAndroid Build Coastguard Worker 374*6777b538SAndroid Build Coastguard Workergroup("icuuc_hidden_visibility") { 375*6777b538SAndroid Build Coastguard Worker public_deps = [ ":icuuc_private_hidden_visibility" ] 376*6777b538SAndroid Build Coastguard Worker} 377*6777b538SAndroid Build Coastguard Worker 378*6777b538SAndroid Build Coastguard Workersource_set("icuuc_public") { 379*6777b538SAndroid Build Coastguard Worker sources = icuuc_public 380*6777b538SAndroid Build Coastguard Worker} 381*6777b538SAndroid Build Coastguard Worker 382*6777b538SAndroid Build Coastguard Workergenerate_icuuc("icuuc_private") { 383*6777b538SAndroid Build Coastguard Worker extra_configs = [] 384*6777b538SAndroid Build Coastguard Worker if (icu_is_in_fuchsia) { 385*6777b538SAndroid Build Coastguard Worker # See similar stanza above for details. 386*6777b538SAndroid Build Coastguard Worker extra_configs += icu_fuchsia_extra_configs 387*6777b538SAndroid Build Coastguard Worker extra_configs += icu_fuchsia_remove_configs 388*6777b538SAndroid Build Coastguard Worker extra_configs -= icu_fuchsia_remove_configs 389*6777b538SAndroid Build Coastguard Worker } 390*6777b538SAndroid Build Coastguard Worker output_name = "icuuc" 391*6777b538SAndroid Build Coastguard Worker visibility = [ 392*6777b538SAndroid Build Coastguard Worker ":icui18n", 393*6777b538SAndroid Build Coastguard Worker ":icuuc", 394*6777b538SAndroid Build Coastguard Worker ] 395*6777b538SAndroid Build Coastguard Worker} 396*6777b538SAndroid Build Coastguard Worker 397*6777b538SAndroid Build Coastguard Workergenerate_icuuc("icuuc_private_hidden_visibility") { 398*6777b538SAndroid Build Coastguard Worker extra_configs = [ ":visibility_hidden" ] 399*6777b538SAndroid Build Coastguard Worker if (icu_is_in_fuchsia) { 400*6777b538SAndroid Build Coastguard Worker # See similar stanza above for details. 401*6777b538SAndroid Build Coastguard Worker extra_configs += icu_fuchsia_extra_configs 402*6777b538SAndroid Build Coastguard Worker extra_configs += icu_fuchsia_remove_configs 403*6777b538SAndroid Build Coastguard Worker extra_configs -= icu_fuchsia_remove_configs 404*6777b538SAndroid Build Coastguard Worker } 405*6777b538SAndroid Build Coastguard Worker output_name = "icuuc_hidden_visibility" 406*6777b538SAndroid Build Coastguard Worker visibility = [ 407*6777b538SAndroid Build Coastguard Worker ":icui18n_hidden_visibility", 408*6777b538SAndroid Build Coastguard Worker ":icuuc_hidden_visibility", 409*6777b538SAndroid Build Coastguard Worker ] 410*6777b538SAndroid Build Coastguard Worker if (is_fuchsia && !icu_is_in_fuchsia) { 411*6777b538SAndroid Build Coastguard Worker fuchsia_output_name_postfix = "_hidden_visibility" 412*6777b538SAndroid Build Coastguard Worker } 413*6777b538SAndroid Build Coastguard Worker} 414*6777b538SAndroid Build Coastguard Worker 415*6777b538SAndroid Build Coastguard Workerif (is_android && enable_java_templates) { 416*6777b538SAndroid Build Coastguard Worker android_assets("icu_assets") { 417*6777b538SAndroid Build Coastguard Worker if (icu_use_data_file) { 418*6777b538SAndroid Build Coastguard Worker sources = [ "$root_out_dir/icudtl.dat" ] 419*6777b538SAndroid Build Coastguard Worker deps = [ ":icudata" ] 420*6777b538SAndroid Build Coastguard Worker disable_compression = true 421*6777b538SAndroid Build Coastguard Worker } 422*6777b538SAndroid Build Coastguard Worker } 423*6777b538SAndroid Build Coastguard Worker} 424*6777b538SAndroid Build Coastguard Worker 425*6777b538SAndroid Build Coastguard Workerif (is_android) { 426*6777b538SAndroid Build Coastguard Worker data_dir = "android" 427*6777b538SAndroid Build Coastguard Worker} else if (is_ios && !use_blink) { 428*6777b538SAndroid Build Coastguard Worker data_dir = "ios" 429*6777b538SAndroid Build Coastguard Worker} else if (is_chromeos) { 430*6777b538SAndroid Build Coastguard Worker data_dir = "chromeos" 431*6777b538SAndroid Build Coastguard Worker} else if (current_cpu == "wasm") { 432*6777b538SAndroid Build Coastguard Worker data_dir = "flutter" 433*6777b538SAndroid Build Coastguard Worker} else if (icu_is_in_fuchsia && icu_fuchsia_override_data_dir != "") { 434*6777b538SAndroid Build Coastguard Worker # See //config.gni for details. 435*6777b538SAndroid Build Coastguard Worker data_dir = icu_fuchsia_override_data_dir 436*6777b538SAndroid Build Coastguard Worker} else { 437*6777b538SAndroid Build Coastguard Worker data_dir = "common" 438*6777b538SAndroid Build Coastguard Worker} 439*6777b538SAndroid Build Coastguard Worker 440*6777b538SAndroid Build Coastguard Workerif (current_cpu == "mips" || current_cpu == "mips64" || 441*6777b538SAndroid Build Coastguard Worker host_byteorder == "big") { 442*6777b538SAndroid Build Coastguard Worker data_bundle_prefix = "icudtb" 443*6777b538SAndroid Build Coastguard Worker} else { 444*6777b538SAndroid Build Coastguard Worker data_bundle_prefix = "icudtl" 445*6777b538SAndroid Build Coastguard Worker} 446*6777b538SAndroid Build Coastguard Workerdata_bundle = "${data_bundle_prefix}.dat" 447*6777b538SAndroid Build Coastguard Worker 448*6777b538SAndroid Build Coastguard Worker# Some code paths end up not using these, marking them to avoid build 449*6777b538SAndroid Build Coastguard Worker# breaks. 450*6777b538SAndroid Build Coastguard Worker# See README.fuchsia for details. 451*6777b538SAndroid Build Coastguard Workernot_needed([ 452*6777b538SAndroid Build Coastguard Worker "data_bundle", 453*6777b538SAndroid Build Coastguard Worker "data_bundle_prefix", 454*6777b538SAndroid Build Coastguard Worker "data_dir", 455*6777b538SAndroid Build Coastguard Worker ]) 456*6777b538SAndroid Build Coastguard Worker 457*6777b538SAndroid Build Coastguard Workerif (icu_copy_icudata_to_root_build_dir) { 458*6777b538SAndroid Build Coastguard Worker copy("copy_icudata") { 459*6777b538SAndroid Build Coastguard Worker sources = [ "$data_dir/$data_bundle" ] 460*6777b538SAndroid Build Coastguard Worker outputs = [ "$root_out_dir/$data_bundle" ] 461*6777b538SAndroid Build Coastguard Worker data = [ "$root_out_dir/$data_bundle" ] 462*6777b538SAndroid Build Coastguard Worker } 463*6777b538SAndroid Build Coastguard Worker} 464*6777b538SAndroid Build Coastguard Worker 465*6777b538SAndroid Build Coastguard Workerif (icu_use_data_file) { 466*6777b538SAndroid Build Coastguard Worker if (is_ios) { 467*6777b538SAndroid Build Coastguard Worker bundle_data("icudata") { 468*6777b538SAndroid Build Coastguard Worker sources = [ "$data_dir/$data_bundle" ] 469*6777b538SAndroid Build Coastguard Worker outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ] 470*6777b538SAndroid Build Coastguard Worker } 471*6777b538SAndroid Build Coastguard Worker } else { 472*6777b538SAndroid Build Coastguard Worker group("icudata") { 473*6777b538SAndroid Build Coastguard Worker if (icu_copy_icudata_to_root_build_dir) { 474*6777b538SAndroid Build Coastguard Worker # Guarded by a flag, to avoid name clashes if other build processes 475*6777b538SAndroid Build Coastguard Worker # also happen to generate the output file by the same name. 476*6777b538SAndroid Build Coastguard Worker # See README.fuchsia for details. 477*6777b538SAndroid Build Coastguard Worker public_deps = [ ":copy_icudata" ] 478*6777b538SAndroid Build Coastguard Worker } 479*6777b538SAndroid Build Coastguard Worker } 480*6777b538SAndroid Build Coastguard Worker } 481*6777b538SAndroid Build Coastguard Worker 482*6777b538SAndroid Build Coastguard Worker if (is_chromeos) { 483*6777b538SAndroid Build Coastguard Worker copy("icudata_hash") { 484*6777b538SAndroid Build Coastguard Worker sources = [ "chromeos/icudtl.dat.hash" ] 485*6777b538SAndroid Build Coastguard Worker outputs = [ "$root_out_dir/icudtl.dat.hash" ] 486*6777b538SAndroid Build Coastguard Worker if (icu_copy_icudata_to_root_build_dir) { 487*6777b538SAndroid Build Coastguard Worker data = [ "$root_out_dir/icudtl.dat.hash" ] 488*6777b538SAndroid Build Coastguard Worker } 489*6777b538SAndroid Build Coastguard Worker } 490*6777b538SAndroid Build Coastguard Worker } 491*6777b538SAndroid Build Coastguard Worker} else { 492*6777b538SAndroid Build Coastguard Worker if (current_cpu == "wasm") { 493*6777b538SAndroid Build Coastguard Worker data_assembly = "$target_gen_dir/${data_bundle_prefix}_dat.cpp" 494*6777b538SAndroid Build Coastguard Worker } else { 495*6777b538SAndroid Build Coastguard Worker data_assembly = "$target_gen_dir/${data_bundle_prefix}_dat.S" 496*6777b538SAndroid Build Coastguard Worker } 497*6777b538SAndroid Build Coastguard Worker inline_data_assembly = "$target_gen_dir/${data_bundle_prefix}_dat.cc" 498*6777b538SAndroid Build Coastguard Worker action("make_data_assembly") { 499*6777b538SAndroid Build Coastguard Worker if (current_cpu == "wasm") { 500*6777b538SAndroid Build Coastguard Worker # See scripts/make_data_cpp.py for details on building ICU for wasm. 501*6777b538SAndroid Build Coastguard Worker script = "scripts/make_data_cpp.py" 502*6777b538SAndroid Build Coastguard Worker inputs = [ "$data_dir/$data_bundle" ] 503*6777b538SAndroid Build Coastguard Worker outputs = [ data_assembly ] 504*6777b538SAndroid Build Coastguard Worker args = [ 505*6777b538SAndroid Build Coastguard Worker rebase_path(inputs[0], root_build_dir), 506*6777b538SAndroid Build Coastguard Worker rebase_path(data_assembly, root_build_dir), 507*6777b538SAndroid Build Coastguard Worker ] 508*6777b538SAndroid Build Coastguard Worker } else { 509*6777b538SAndroid Build Coastguard Worker script = "scripts/make_data_assembly.py" 510*6777b538SAndroid Build Coastguard Worker inputs = [ "$data_dir/$data_bundle" ] 511*6777b538SAndroid Build Coastguard Worker outputs = [ data_assembly ] 512*6777b538SAndroid Build Coastguard Worker args = [ 513*6777b538SAndroid Build Coastguard Worker rebase_path(inputs[0], root_build_dir), 514*6777b538SAndroid Build Coastguard Worker rebase_path(data_assembly, root_build_dir), 515*6777b538SAndroid Build Coastguard Worker ] 516*6777b538SAndroid Build Coastguard Worker if (is_mac || is_ios) { 517*6777b538SAndroid Build Coastguard Worker args += [ "--mac" ] 518*6777b538SAndroid Build Coastguard Worker } else if (is_win) { 519*6777b538SAndroid Build Coastguard Worker if (target_cpu == "arm64" || target_cpu == "x64") { 520*6777b538SAndroid Build Coastguard Worker args += [ "--win64" ] 521*6777b538SAndroid Build Coastguard Worker } else if (target_cpu == "arm" || target_cpu == "x86") { 522*6777b538SAndroid Build Coastguard Worker args += [ "--win32" ] 523*6777b538SAndroid Build Coastguard Worker } else { 524*6777b538SAndroid Build Coastguard Worker assert(false) 525*6777b538SAndroid Build Coastguard Worker } 526*6777b538SAndroid Build Coastguard Worker } 527*6777b538SAndroid Build Coastguard Worker } 528*6777b538SAndroid Build Coastguard Worker } 529*6777b538SAndroid Build Coastguard Worker 530*6777b538SAndroid Build Coastguard Worker if (is_win) { 531*6777b538SAndroid Build Coastguard Worker action("make_inline_data_assembly") { 532*6777b538SAndroid Build Coastguard Worker deps = [ ":make_data_assembly" ] 533*6777b538SAndroid Build Coastguard Worker script = "scripts/asm_to_inline_asm.py" 534*6777b538SAndroid Build Coastguard Worker inputs = [ data_assembly ] 535*6777b538SAndroid Build Coastguard Worker outputs = [ inline_data_assembly ] 536*6777b538SAndroid Build Coastguard Worker args = rebase_path([ 537*6777b538SAndroid Build Coastguard Worker data_assembly, 538*6777b538SAndroid Build Coastguard Worker inline_data_assembly, 539*6777b538SAndroid Build Coastguard Worker ], 540*6777b538SAndroid Build Coastguard Worker root_build_dir) 541*6777b538SAndroid Build Coastguard Worker } 542*6777b538SAndroid Build Coastguard Worker } else { 543*6777b538SAndroid Build Coastguard Worker not_needed([ "inline_data_assembly" ]) 544*6777b538SAndroid Build Coastguard Worker } 545*6777b538SAndroid Build Coastguard Worker 546*6777b538SAndroid Build Coastguard Worker source_set("icudata") { 547*6777b538SAndroid Build Coastguard Worker defines = [ "U_HIDE_DATA_SYMBOL" ] 548*6777b538SAndroid Build Coastguard Worker if (is_win) { 549*6777b538SAndroid Build Coastguard Worker sources = [ inline_data_assembly ] 550*6777b538SAndroid Build Coastguard Worker deps = [ ":make_inline_data_assembly" ] 551*6777b538SAndroid Build Coastguard Worker } else { 552*6777b538SAndroid Build Coastguard Worker sources = [ data_assembly ] 553*6777b538SAndroid Build Coastguard Worker deps = [ ":make_data_assembly" ] 554*6777b538SAndroid Build Coastguard Worker asmflags = [] 555*6777b538SAndroid Build Coastguard Worker if (current_cpu == "arm64") { 556*6777b538SAndroid Build Coastguard Worker import("//build/config/arm.gni") 557*6777b538SAndroid Build Coastguard Worker if (arm_control_flow_integrity == "standard") { 558*6777b538SAndroid Build Coastguard Worker asmflags += [ "-mmark-bti-property" ] 559*6777b538SAndroid Build Coastguard Worker } 560*6777b538SAndroid Build Coastguard Worker } 561*6777b538SAndroid Build Coastguard Worker } 562*6777b538SAndroid Build Coastguard Worker } 563*6777b538SAndroid Build Coastguard Worker} 564