| # Copyright 2016 Google Inc. |
| # |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import("../../gn/skia.gni") |
| import("../third_party.gni") |
| import("icu.gni") |
| |
| declare_args() { |
| skia_use_system_icu = is_official_build |
| } |
| |
| if (skia_use_system_icu) { |
| system("icu") { |
| libs = [ "icuuc" ] |
| defines = [ "U_USING_ICU_NAMESPACE=0" ] |
| } |
| } else { |
| if (target_cpu == "wasm") { |
| data_assembly = "$target_gen_dir/icudtl_dat.cpp" |
| } else { |
| data_assembly = "$target_gen_dir/icudtl_dat.S" |
| } |
| data_dir = "../externals/icu/" |
| if (target_cpu == "wasm") { |
| # Use a super super super stripped down version for wasm, |
| # which is the same thing flutter is using. |
| data_dir += "flutter" |
| } else if (is_android) { |
| data_dir += "android" |
| } else if (is_ios) { |
| data_dir += "ios" |
| } else { |
| data_dir += "common" |
| } |
| action("make_data_assembly") { |
| if (target_cpu == "wasm") { |
| _u_icu_version_major_num = |
| "69" # defined in source/common/unicode/uvernum.h |
| script = "make_data_cpp.py" |
| inputs = [ "$data_dir/icudtl.dat" ] |
| outputs = [ data_assembly ] |
| args = [ |
| "icudt${_u_icu_version_major_num}_dat", |
| rebase_path(inputs[0], root_build_dir), |
| rebase_path(data_assembly, root_build_dir), |
| ] |
| } else { |
| script = "../externals/icu/scripts/make_data_assembly.py" |
| inputs = [ "$data_dir/icudtl.dat" ] |
| outputs = [ "$data_assembly" ] |
| args = [ |
| rebase_path(inputs[0], root_build_dir), |
| rebase_path(data_assembly, root_build_dir), |
| ] |
| if (is_mac || is_ios) { |
| args += [ "--mac" ] |
| } |
| } |
| } |
| |
| third_party("icu") { |
| public_include_dirs = [ |
| "../externals/icu/source/common", |
| "../externals/icu/source/i18n", |
| ".", |
| ] |
| public_defines = [ |
| "U_USING_ICU_NAMESPACE=0", |
| "U_DISABLE_RENAMING", |
| "SK_USING_THIRD_PARTY_ICU", |
| ] |
| configs = [ "//gn/portable:add_rtti" ] |
| defines = [ |
| # http://userguide.icu-project.org/howtouseicu |
| "U_COMMON_IMPLEMENTATION", |
| "U_STATIC_IMPLEMENTATION", |
| "U_ENABLE_DYLOAD=0", |
| "U_I18N_IMPLEMENTATION", |
| |
| # If we don't set this to zero, ICU will set it to 600, |
| # which makes Macs set _POSIX_C_SOURCE=200112L, |
| # which makes Macs set __DARWIN_C_LEVEL=_POSIX_C_SOURCE instead of =__DARWIN_C_FULL, |
| # which makes <time.h> not expose timespec_get, |
| # which makes recent libc++ <ctime> not #include-able with -std=c++17. |
| "_XOPEN_SOURCE=0", |
| ] |
| if (target_cpu == "wasm") { |
| # Tell ICU that we are a 32 bit platform, otherwise, |
| # double-conversion-utils.h doesn't know how to operate. |
| defines += [ "__i386__" ] |
| } |
| sources = icu_sources |
| if (is_win) { |
| deps = [ ":icudata" ] |
| public_defines += [ |
| "U_NOEXCEPT=", |
| "U_STATIC_IMPLEMENTATION", |
| ] |
| libs = [ "Advapi32.lib" ] |
| sources += [ |
| "../externals/icu/source/stubdata/stubdata.cpp", |
| "SkLoadICU.cpp", |
| ] |
| } else { |
| sources += [ "$data_assembly" ] |
| deps = [ ":make_data_assembly" ] |
| } |
| } |
| |
| copy("icudata") { |
| sources = [ "../externals/icu/common/icudtl.dat" ] |
| outputs = [ "$root_out_dir/icudtl.dat" ] |
| data = [ "$root_out_dir/icudtl.dat" ] |
| } |
| } |